Skip to content

Commit 68434dd

Browse files
iisalatonv
authored andcommitted
Sort Bar Test - Ensure Resize Observer fires ONLY when needed
- this breaks View when dynamically toggling sort bar on an already loaded collection browser
1 parent 9ae1c41 commit 68434dd

File tree

1 file changed

+50
-4
lines changed

1 file changed

+50
-4
lines changed

test/sort-filter-bar/sort-filter-bar.test.ts

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* eslint-disable import/no-duplicates */
22
import { expect, fixture } from '@open-wc/testing';
3+
import sinon from 'sinon';
34
import { html } from 'lit';
45
import type { IaDropdown } from '@internetarchive/ia-dropdown';
56
import { 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

Comments
 (0)