11/* eslint-disable import/no-duplicates */
22import { expect , fixture } from '@open-wc/testing' ;
3+ import sinon from 'sinon' ;
34import { html } from 'lit' ;
45import type { IaDropdown } from '@internetarchive/ia-dropdown' ;
56import { SharedResizeObserver } from '@internetarchive/shared-resize-observer' ;
@@ -19,11 +20,16 @@ describe('Sort selector default buttons', async () => {
1920 '#desktop-sort-selector'
2021 ) ;
2122
22- before ( async ( ) => {
23+ beforeEach ( async ( ) => {
2324 el . resizeObserver = new SharedResizeObserver ( ) ;
2425 await el . updateComplete ;
2526 } ) ;
2627
28+ afterEach ( async ( ) => {
29+ el . resizeObserver = undefined ;
30+ await el . updateComplete ;
31+ } ) ;
32+
2733 it ( 'should render basic component' , async ( ) => {
2834 expect ( sortSelectorContainer ) . to . exist ;
2935 expect ( desktopSortSelector ) . to . exist ;
@@ -617,15 +623,55 @@ describe('Sort/filter bar mobile view', () => {
617623 expect ( backdrop ) . not . to . exist ;
618624 } ) ;
619625
620- it ( 'shows loansTab top-bar slot' , async ( ) => {
626+ it ( 'shows loansTab top-bar slot Default View' , async ( ) => {
627+ const resizeStub = new SharedResizeObserver ( ) ;
628+ const addSpy = sinon . spy ( resizeStub , 'addObserver' ) ;
629+ const removeSpy = sinon . spy ( resizeStub , 'removeObserver' ) ;
630+
621631 const el = await fixture < SortFilterBar > ( html `
622- < sort-filter-bar > </ sort-filter-bar >
632+ < sort-filter-bar .resizeObserver =${ resizeStub } > </ sort-filter-bar >
633+ ` ) ;
634+
635+ // this element exists
636+ expect ( el ?. shadowRoot ?. querySelector ( '#sort-selector-container' ) ) . to . exist ;
637+
638+ // loads & unloads twice when [re]setting ResizeObserver
639+ expect ( addSpy . callCount ) . to . equal ( 2 ) ;
640+
641+ const resizeStub2 = new SharedResizeObserver ( ) ;
642+ el . resizeObserver = resizeStub2 ;
643+ await el . updateComplete ;
644+ expect ( removeSpy . callCount ) . to . equal ( 2 ) ;
645+ } ) ;
646+
647+ it ( 'shows loansTab top-bar slot Custom Slotted View' , async ( ) => {
648+ const resizeStub = new SharedResizeObserver ( ) ;
649+ const addSpy = sinon . spy ( resizeStub , 'addObserver' ) ;
650+ const removeSpy = sinon . spy ( resizeStub , 'removeObserver' ) ;
651+
652+ const el = await fixture < SortFilterBar > ( html `
653+ < sort-filter-bar
654+ .resizeObserver =${ resizeStub }
655+ .showLoansTopBar =${ true }
656+ > </ sort-filter-bar >
623657 ` ) ;
624658
625- el . showLoansTopBar = true ;
626659 await el . updateComplete ;
627660
661+ // slot exists
628662 const loansTabSlot = el ?. shadowRoot ?. querySelector ( 'slot' ) ;
629663 expect ( loansTabSlot ) . to . exist ;
664+
665+ // sort bar does not exist
666+ expect ( el ?. shadowRoot ?. querySelector ( '#sort-selector-container' ) ) . to . not
667+ . exist ;
668+
669+ const resizeStub2 = new SharedResizeObserver ( ) ;
670+ el . resizeObserver = resizeStub2 ;
671+ await el . updateComplete ;
672+
673+ // there's no need for resize observer
674+ expect ( addSpy . callCount ) . to . equal ( 0 ) ;
675+ expect ( removeSpy . callCount ) . to . equal ( 0 ) ;
630676 } ) ;
631677} ) ;
0 commit comments