@@ -5,6 +5,16 @@ import { mockNostojs } from "@nosto/nosto-js/testing"
5
5
import { createElement } from "../../utils/jsx"
6
6
7
7
describe ( "Popup" , ( ) => {
8
+ const popupKey = "nosto:web-components:popup"
9
+
10
+ function getPopupData ( ) {
11
+ return JSON . parse ( localStorage . getItem ( popupKey ) ! )
12
+ }
13
+
14
+ function setPopupData ( data : { name : string ; state : "open" | "ribbon" | "closed" } ) {
15
+ localStorage . setItem ( popupKey , JSON . stringify ( data ) )
16
+ }
17
+
8
18
beforeEach ( ( ) => {
9
19
// Clear localStorage before each test
10
20
localStorage . clear ( )
@@ -58,7 +68,7 @@ describe("Popup", () => {
58
68
describe ( "Named popups and persistence" , ( ) => {
59
69
it ( "should hide popup if it was previously closed and name is set" , async ( ) => {
60
70
const popupName = "test-popup"
61
- localStorage . setItem ( `nosto:web-components:popup: ${ popupName } ` , "closed" )
71
+ setPopupData ( { name : popupName , state : "closed" } )
62
72
63
73
const popup = (
64
74
< nosto-popup name = { popupName } >
@@ -208,7 +218,7 @@ describe("Popup", () => {
208
218
const closeButton = popup . querySelector ( "[n-close]" ) as HTMLButtonElement
209
219
closeButton . click ( )
210
220
211
- expect ( localStorage . getItem ( `nosto:web-components:popup: ${ popupName } ` ) ) . toBe ( "closed" )
221
+ expect ( getPopupData ( ) ) . toEqual ( { name : popupName , state : "closed" } )
212
222
} )
213
223
214
224
it ( "should always store closed state in localStorage since name is required" , async ( ) => {
@@ -226,7 +236,7 @@ describe("Popup", () => {
226
236
const closeButton = popup . querySelector ( "[n-close]" ) as HTMLButtonElement
227
237
closeButton . click ( )
228
238
229
- expect ( localStorage . getItem ( "nosto:web-components:popup: always-stores-popup") ) . toBe ( "closed" )
239
+ expect ( getPopupData ( ) ) . toEqual ( { name : " always-stores-popup", state : "closed" } )
230
240
} )
231
241
232
242
it ( "should handle click events on ribbon content with n-close" , async ( ) => {
@@ -249,7 +259,7 @@ describe("Popup", () => {
249
259
ribbonCloseButton . click ( )
250
260
251
261
expect ( popup . style . display ) . toBe ( "none" )
252
- expect ( localStorage . getItem ( "nosto:web-components:popup: ribbon-popup") ) . toBe ( "closed" )
262
+ expect ( getPopupData ( ) ) . toEqual ( { name : " ribbon-popup", state : "closed" } )
253
263
} )
254
264
255
265
it ( "should not close popup when clicking elements without n-close attribute" , async ( ) => {
@@ -332,7 +342,7 @@ describe("Popup", () => {
332
342
const popupName = "segment-popup"
333
343
334
344
// First, close the popup
335
- localStorage . setItem ( `nosto:web-components:popup: ${ popupName } ` , "closed" )
345
+ setPopupData ( { name : popupName , state : "closed" } )
336
346
337
347
// Set up segments that would normally show the popup
338
348
mockNostojs ( {
@@ -396,18 +406,18 @@ describe("Popup", () => {
396
406
ribbonButton . click ( )
397
407
398
408
// Check that ribbon state is stored
399
- expect ( localStorage . getItem ( "nosto:web-components:popup: ribbon-test-popup") ) . toBe ( "ribbon" )
409
+ expect ( getPopupData ( ) ) . toEqual ( { name : " ribbon-test-popup", state : "ribbon" } )
400
410
401
411
// Check DOM structure after switch
402
412
const dialog = popup . shadowRoot ?. querySelector ( '[part="dialog"]' )
403
413
const ribbon = popup . shadowRoot ?. querySelector ( '[part="ribbon"]' )
404
- expect ( dialog ?. classList . contains ( "hidden ") ) . toBe ( true )
414
+ expect ( dialog ?. hasAttribute ( "open ") ) . toBe ( false )
405
415
expect ( ribbon ?. classList . contains ( "hidden" ) ) . toBe ( false )
406
416
} )
407
417
408
418
it ( "should render in ribbon mode when localStorage state is 'ribbon'" , async ( ) => {
409
419
const popupName = "persistent-ribbon-popup"
410
- localStorage . setItem ( `nosto:web-components:popup: ${ popupName } ` , "ribbon" )
420
+ setPopupData ( { name : popupName , state : "ribbon" } )
411
421
412
422
const popup = (
413
423
< nosto-popup name = { popupName } >
@@ -421,7 +431,7 @@ describe("Popup", () => {
421
431
422
432
const dialog = popup . shadowRoot ?. querySelector ( '[part="dialog"]' )
423
433
const ribbon = popup . shadowRoot ?. querySelector ( '[part="ribbon"]' )
424
- expect ( dialog ?. classList . contains ( "hidden ") ) . toBe ( true )
434
+ expect ( dialog ?. hasAttribute ( "open ") ) . toBe ( false )
425
435
expect ( ribbon ?. classList . contains ( "hidden" ) ) . toBe ( false )
426
436
} )
427
437
0 commit comments