@internetarchive/collection-browser 1.14.9-alpha1 → 1.14.9-alpha10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/src/app-root.d.ts +1 -0
  2. package/dist/src/app-root.js +154 -82
  3. package/dist/src/app-root.js.map +1 -1
  4. package/dist/src/collection-browser.d.ts +2 -2
  5. package/dist/src/collection-browser.js +23 -18
  6. package/dist/src/collection-browser.js.map +1 -1
  7. package/dist/src/collection-facets/facet-row.d.ts +30 -0
  8. package/dist/src/collection-facets/facet-row.js +245 -0
  9. package/dist/src/collection-facets/facet-row.js.map +1 -0
  10. package/dist/src/collection-facets/facets-template.d.ts +1 -4
  11. package/dist/src/collection-facets/facets-template.js +40 -182
  12. package/dist/src/collection-facets/facets-template.js.map +1 -1
  13. package/dist/src/models.d.ts +18 -2
  14. package/dist/src/models.js.map +1 -1
  15. package/dist/test/collection-browser.test.js +36 -4
  16. package/dist/test/collection-browser.test.js.map +1 -1
  17. package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
  18. package/dist/test/collection-facets/facet-row.test.js +235 -0
  19. package/dist/test/collection-facets/facet-row.test.js.map +1 -0
  20. package/dist/test/collection-facets/facets-template.test.js +65 -96
  21. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  22. package/dist/test/collection-facets.test.js +39 -70
  23. package/dist/test/collection-facets.test.js.map +1 -1
  24. package/package.json +2 -2
  25. package/src/app-root.ts +159 -82
  26. package/src/collection-browser.ts +23 -20
  27. package/src/collection-facets/facet-row.ts +274 -0
  28. package/src/collection-facets/facets-template.ts +49 -196
  29. package/src/models.ts +18 -2
  30. package/test/collection-browser.test.ts +36 -4
  31. package/test/collection-facets/facet-row.test.ts +328 -0
  32. package/test/collection-facets/facets-template.test.ts +72 -110
  33. package/test/collection-facets.test.ts +69 -101
@@ -0,0 +1,235 @@
1
+ import { expect, fixture } from '@open-wc/testing';
2
+ import sinon from 'sinon';
3
+ import { html } from 'lit';
4
+ import '../../src/collection-facets/facet-row';
5
+ import { MockCollectionNameCache } from '../mocks/mock-collection-name-cache';
6
+ describe('Facet row', () => {
7
+ it('renders nothing if no bucket provided', async () => {
8
+ var _a;
9
+ const el = await fixture(html `<facet-row .facetType=${'subject'}></facet-row>`);
10
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-row-container')).not.to.exist;
11
+ });
12
+ it('renders nothing if no facet type provided', async () => {
13
+ var _a;
14
+ const bucket = {
15
+ key: 'foo',
16
+ state: 'none',
17
+ count: 5,
18
+ };
19
+ const el = await fixture(html `<facet-row .bucket=${bucket}></facet-row>`);
20
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-row-container')).not.to.exist;
21
+ });
22
+ it('renders provided bucket as facet row', async () => {
23
+ var _a, _b, _c, _d, _e;
24
+ const bucket = {
25
+ key: 'foo',
26
+ state: 'none',
27
+ count: 5,
28
+ };
29
+ const el = await fixture(html `<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`);
30
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-row-container')).to.exist;
31
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelectorAll('input[type="checkbox"]')).to.have.length(2);
32
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelectorAll('label')).to.have.length(2);
33
+ expect((_e = (_d = el.shadowRoot) === null || _d === void 0 ? void 0 : _d.textContent) === null || _e === void 0 ? void 0 : _e.trim()).to.match(/^foo\s*5$/);
34
+ });
35
+ it('renders locale-appropriate facet count', async () => {
36
+ var _a;
37
+ const bucket = {
38
+ key: 'foo',
39
+ state: 'none',
40
+ count: 54321,
41
+ };
42
+ const el = await fixture(html `<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`);
43
+ const facetCount = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-count');
44
+ expect(facetCount === null || facetCount === void 0 ? void 0 : facetCount.textContent).to.equal('54,321');
45
+ });
46
+ it('renders selected facets with checked checkbox', async () => {
47
+ var _a, _b, _c;
48
+ const bucket = {
49
+ key: 'foo',
50
+ state: 'selected',
51
+ count: 5,
52
+ };
53
+ const el = await fixture(html `<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`);
54
+ // "Positive" checkbox is checked; "Negative" checkbox is not checked
55
+ const selectCheckbox = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-facet-checkbox');
56
+ const hideCheckbox = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.hide-facet-checkbox');
57
+ expect(selectCheckbox === null || selectCheckbox === void 0 ? void 0 : selectCheckbox.checked).to.be.true;
58
+ expect(hideCheckbox === null || hideCheckbox === void 0 ? void 0 : hideCheckbox.checked).to.be.false;
59
+ // Eye icon is not in its active state
60
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.hide-facet-icon')).to.exist.and.satisfy((icon) => !icon.classList.contains('active'));
61
+ });
62
+ it('renders hidden facets with closed eye icon', async () => {
63
+ var _a, _b, _c;
64
+ const bucket = {
65
+ key: 'foo',
66
+ state: 'hidden',
67
+ count: 5,
68
+ };
69
+ const el = await fixture(html `<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`);
70
+ // "Positive" checkbox is not checked; "Negative" checkbox is checked
71
+ const selectCheckbox = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-facet-checkbox');
72
+ const hideCheckbox = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.hide-facet-checkbox');
73
+ expect(selectCheckbox === null || selectCheckbox === void 0 ? void 0 : selectCheckbox.checked).to.be.false;
74
+ expect(hideCheckbox === null || hideCheckbox === void 0 ? void 0 : hideCheckbox.checked).to.be.true;
75
+ // Eye icon is in its "active" state
76
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.hide-facet-icon')).to.exist.and.satisfy((icon) => icon.classList.contains('active'));
77
+ });
78
+ it('renders collection facets as links', async () => {
79
+ var _a, _b;
80
+ const collectionNameCache = new MockCollectionNameCache();
81
+ const bucket = {
82
+ key: 'foo',
83
+ state: 'none',
84
+ count: 5,
85
+ };
86
+ const el = await fixture(html `<facet-row
87
+ .facetType=${'collection'}
88
+ .bucket=${bucket}
89
+ .collectionNameCache=${collectionNameCache}
90
+ ></facet-row>`);
91
+ const collectionName = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('async-collection-name');
92
+ expect(collectionName === null || collectionName === void 0 ? void 0 : collectionName.parentElement).to.be.instanceOf(HTMLAnchorElement);
93
+ expect((_b = collectionName === null || collectionName === void 0 ? void 0 : collectionName.parentElement) === null || _b === void 0 ? void 0 : _b.getAttribute('href')).to.equal('/details/foo');
94
+ });
95
+ it('does not render non-collection facets as links', async () => {
96
+ var _a;
97
+ const collectionNameCache = new MockCollectionNameCache();
98
+ const bucket = {
99
+ key: 'foo',
100
+ state: 'none',
101
+ count: 5,
102
+ };
103
+ const el = await fixture(html `<facet-row
104
+ .facetType=${'subject'}
105
+ .bucket=${bucket}
106
+ .collectionNameCache=${collectionNameCache}
107
+ ></facet-row>`);
108
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('a:link')).not.to.exist;
109
+ });
110
+ it('emits event when facet checkbox is clicked', async () => {
111
+ var _a, _b;
112
+ const facetClickSpy = sinon.spy();
113
+ const bucket = {
114
+ key: 'foo',
115
+ state: 'none',
116
+ count: 5,
117
+ };
118
+ const el = await fixture(html `<facet-row
119
+ .facetType=${'subject'}
120
+ .bucket=${bucket}
121
+ @facetClick=${facetClickSpy}
122
+ ></facet-row>`);
123
+ const positiveFacetCheck = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-facet-checkbox');
124
+ expect(positiveFacetCheck).to.exist;
125
+ positiveFacetCheck.click();
126
+ expect(facetClickSpy.callCount).to.equal(1);
127
+ expect((_b = facetClickSpy.lastCall.args[0]) === null || _b === void 0 ? void 0 : _b.detail).to.deep.equal({
128
+ facetType: 'subject',
129
+ bucket,
130
+ negative: false,
131
+ });
132
+ });
133
+ it('emits event when facet checkbox is unchecked', async () => {
134
+ var _a, _b;
135
+ const facetClickSpy = sinon.spy();
136
+ const bucket = {
137
+ key: 'foo',
138
+ state: 'selected',
139
+ count: 5,
140
+ };
141
+ const el = await fixture(html `<facet-row
142
+ .facetType=${'subject'}
143
+ .bucket=${bucket}
144
+ @facetClick=${facetClickSpy}
145
+ ></facet-row>`);
146
+ const positiveFacetCheck = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-facet-checkbox');
147
+ expect(positiveFacetCheck).to.exist;
148
+ positiveFacetCheck.click();
149
+ expect(facetClickSpy.callCount).to.equal(1);
150
+ expect((_b = facetClickSpy.lastCall.args[0]) === null || _b === void 0 ? void 0 : _b.detail).to.deep.equal({
151
+ facetType: 'subject',
152
+ bucket,
153
+ negative: false,
154
+ });
155
+ });
156
+ it('emits event when facet negative icon is clicked', async () => {
157
+ var _a, _b;
158
+ const facetClickSpy = sinon.spy();
159
+ const bucket = {
160
+ key: 'foo',
161
+ state: 'none',
162
+ count: 5,
163
+ };
164
+ const el = await fixture(html `<facet-row
165
+ .facetType=${'subject'}
166
+ .bucket=${bucket}
167
+ @facetClick=${facetClickSpy}
168
+ ></facet-row>`);
169
+ const negativeFacetIcon = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.hide-facet-icon');
170
+ expect(negativeFacetIcon).to.exist;
171
+ negativeFacetIcon.click();
172
+ expect(facetClickSpy.callCount).to.equal(1);
173
+ expect((_b = facetClickSpy.lastCall.args[0]) === null || _b === void 0 ? void 0 : _b.detail).to.deep.equal({
174
+ facetType: 'subject',
175
+ bucket,
176
+ negative: true,
177
+ });
178
+ });
179
+ it('emits event when facet negative icon is unchecked', async () => {
180
+ var _a, _b;
181
+ const facetClickSpy = sinon.spy();
182
+ const bucket = {
183
+ key: 'foo',
184
+ state: 'hidden',
185
+ count: 5,
186
+ };
187
+ const el = await fixture(html `<facet-row
188
+ .facetType=${'subject'}
189
+ .bucket=${bucket}
190
+ @facetClick=${facetClickSpy}
191
+ ></facet-row>`);
192
+ const negativeFacetIcon = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.hide-facet-icon');
193
+ expect(negativeFacetIcon).to.exist;
194
+ negativeFacetIcon.click();
195
+ expect(facetClickSpy.callCount).to.equal(1);
196
+ expect((_b = facetClickSpy.lastCall.args[0]) === null || _b === void 0 ? void 0 : _b.detail).to.deep.equal({
197
+ facetType: 'subject',
198
+ bucket,
199
+ negative: true,
200
+ });
201
+ });
202
+ it('selects/deselects facet when label is clicked', async () => {
203
+ var _a, _b, _c;
204
+ const facetClickSpy = sinon.spy();
205
+ const bucket = {
206
+ key: 'foo',
207
+ state: 'none',
208
+ count: 5,
209
+ };
210
+ const el = await fixture(html `<facet-row
211
+ .facetType=${'subject'}
212
+ .bucket=${bucket}
213
+ @facetClick=${facetClickSpy}
214
+ ></facet-row>`);
215
+ const facetLabel = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-info-display');
216
+ expect(facetLabel).to.exist;
217
+ // Select facet by clicking label
218
+ facetLabel.click();
219
+ expect(facetClickSpy.callCount).to.equal(1);
220
+ expect((_b = facetClickSpy.lastCall.args[0]) === null || _b === void 0 ? void 0 : _b.detail).to.deep.equal({
221
+ facetType: 'subject',
222
+ bucket,
223
+ negative: false,
224
+ });
225
+ // Deselect facet by clicking label
226
+ facetLabel.click();
227
+ expect(facetClickSpy.callCount).to.equal(2);
228
+ expect((_c = facetClickSpy.lastCall.args[0]) === null || _c === void 0 ? void 0 : _c.detail).to.deep.equal({
229
+ facetType: 'subject',
230
+ bucket,
231
+ negative: false,
232
+ });
233
+ });
234
+ });
235
+ //# sourceMappingURL=facet-row.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facet-row.test.js","sourceRoot":"","sources":["../../../test/collection-facets/facet-row.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport type { FacetRow } from '../../src/collection-facets/facet-row';\nimport '../../src/collection-facets/facet-row';\nimport type { FacetState } from '../../src/models';\nimport { MockCollectionNameCache } from '../mocks/mock-collection-name-cache';\n\ndescribe('Facet row', () => {\n it('renders nothing if no bucket provided', async () => {\n const el = await fixture<FacetRow>(\n html`<facet-row .facetType=${'subject'}></facet-row>`\n );\n\n expect(el.shadowRoot?.querySelector('.facet-row-container')).not.to.exist;\n });\n\n it('renders nothing if no facet type provided', async () => {\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row .bucket=${bucket}></facet-row>`\n );\n\n expect(el.shadowRoot?.querySelector('.facet-row-container')).not.to.exist;\n });\n\n it('renders provided bucket as facet row', async () => {\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`\n );\n\n expect(el.shadowRoot?.querySelector('.facet-row-container')).to.exist;\n expect(\n el.shadowRoot?.querySelectorAll('input[type=\"checkbox\"]')\n ).to.have.length(2);\n expect(el.shadowRoot?.querySelectorAll('label')).to.have.length(2);\n\n expect(el.shadowRoot?.textContent?.trim()).to.match(/^foo\\s*5$/);\n });\n\n it('renders locale-appropriate facet count', async () => {\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 54321,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`\n );\n\n const facetCount = el.shadowRoot?.querySelector('.facet-count');\n expect(facetCount?.textContent).to.equal('54,321');\n });\n\n it('renders selected facets with checked checkbox', async () => {\n const bucket = {\n key: 'foo',\n state: 'selected' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`\n );\n\n // \"Positive\" checkbox is checked; \"Negative\" checkbox is not checked\n const selectCheckbox = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n const hideCheckbox = el.shadowRoot?.querySelector(\n '.hide-facet-checkbox'\n ) as HTMLInputElement;\n expect(selectCheckbox?.checked).to.be.true;\n expect(hideCheckbox?.checked).to.be.false;\n\n // Eye icon is not in its active state\n expect(\n el.shadowRoot?.querySelector('.hide-facet-icon')\n ).to.exist.and.satisfy(\n (icon: HTMLElement) => !icon.classList.contains('active')\n );\n });\n\n it('renders hidden facets with closed eye icon', async () => {\n const bucket = {\n key: 'foo',\n state: 'hidden' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`\n );\n\n // \"Positive\" checkbox is not checked; \"Negative\" checkbox is checked\n const selectCheckbox = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n const hideCheckbox = el.shadowRoot?.querySelector(\n '.hide-facet-checkbox'\n ) as HTMLInputElement;\n expect(selectCheckbox?.checked).to.be.false;\n expect(hideCheckbox?.checked).to.be.true;\n\n // Eye icon is in its \"active\" state\n expect(\n el.shadowRoot?.querySelector('.hide-facet-icon')\n ).to.exist.and.satisfy((icon: HTMLElement) =>\n icon.classList.contains('active')\n );\n });\n\n it('renders collection facets as links', async () => {\n const collectionNameCache = new MockCollectionNameCache();\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'collection'}\n .bucket=${bucket}\n .collectionNameCache=${collectionNameCache}\n ></facet-row>`\n );\n\n const collectionName = el.shadowRoot?.querySelector(\n 'async-collection-name'\n );\n expect(collectionName?.parentElement).to.be.instanceOf(HTMLAnchorElement);\n expect(collectionName?.parentElement?.getAttribute('href')).to.equal(\n '/details/foo'\n );\n });\n\n it('does not render non-collection facets as links', async () => {\n const collectionNameCache = new MockCollectionNameCache();\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'subject'}\n .bucket=${bucket}\n .collectionNameCache=${collectionNameCache}\n ></facet-row>`\n );\n\n expect(el.shadowRoot?.querySelector('a:link')).not.to.exist;\n });\n\n it('emits event when facet checkbox is clicked', async () => {\n const facetClickSpy = sinon.spy();\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'subject'}\n .bucket=${bucket}\n @facetClick=${facetClickSpy}\n ></facet-row>`\n );\n\n const positiveFacetCheck = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(positiveFacetCheck).to.exist;\n positiveFacetCheck.click();\n\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({\n facetType: 'subject',\n bucket,\n negative: false,\n });\n });\n\n it('emits event when facet checkbox is unchecked', async () => {\n const facetClickSpy = sinon.spy();\n const bucket = {\n key: 'foo',\n state: 'selected' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'subject'}\n .bucket=${bucket}\n @facetClick=${facetClickSpy}\n ></facet-row>`\n );\n\n const positiveFacetCheck = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(positiveFacetCheck).to.exist;\n positiveFacetCheck.click();\n\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({\n facetType: 'subject',\n bucket,\n negative: false,\n });\n });\n\n it('emits event when facet negative icon is clicked', async () => {\n const facetClickSpy = sinon.spy();\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'subject'}\n .bucket=${bucket}\n @facetClick=${facetClickSpy}\n ></facet-row>`\n );\n\n const negativeFacetIcon = el.shadowRoot?.querySelector(\n '.hide-facet-icon'\n ) as HTMLLabelElement;\n expect(negativeFacetIcon).to.exist;\n negativeFacetIcon.click();\n\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({\n facetType: 'subject',\n bucket,\n negative: true,\n });\n });\n\n it('emits event when facet negative icon is unchecked', async () => {\n const facetClickSpy = sinon.spy();\n const bucket = {\n key: 'foo',\n state: 'hidden' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'subject'}\n .bucket=${bucket}\n @facetClick=${facetClickSpy}\n ></facet-row>`\n );\n\n const negativeFacetIcon = el.shadowRoot?.querySelector(\n '.hide-facet-icon'\n ) as HTMLLabelElement;\n expect(negativeFacetIcon).to.exist;\n negativeFacetIcon.click();\n\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({\n facetType: 'subject',\n bucket,\n negative: true,\n });\n });\n\n it('selects/deselects facet when label is clicked', async () => {\n const facetClickSpy = sinon.spy();\n const bucket = {\n key: 'foo',\n state: 'none' as FacetState,\n count: 5,\n };\n\n const el = await fixture<FacetRow>(\n html`<facet-row\n .facetType=${'subject'}\n .bucket=${bucket}\n @facetClick=${facetClickSpy}\n ></facet-row>`\n );\n\n const facetLabel = el.shadowRoot?.querySelector(\n '.facet-info-display'\n ) as HTMLLabelElement;\n expect(facetLabel).to.exist;\n\n // Select facet by clicking label\n facetLabel.click();\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({\n facetType: 'subject',\n bucket,\n negative: false,\n });\n\n // Deselect facet by clicking label\n facetLabel.click();\n expect(facetClickSpy.callCount).to.equal(2);\n expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({\n facetType: 'subject',\n bucket,\n negative: false,\n });\n });\n});\n"]}
@@ -2,7 +2,6 @@ import { expect, fixture } from '@open-wc/testing';
2
2
  import sinon from 'sinon';
3
3
  import { html } from 'lit';
4
4
  import '../../src/collection-facets/facets-template';
5
- import { getDefaultSelectedFacets } from '../../src/models';
6
5
  const facetGroup = {
7
6
  title: 'Media Type',
8
7
  key: 'mediatype',
@@ -19,7 +18,7 @@ describe('Render facets', () => {
19
18
  var _a;
20
19
  const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
21
20
  await el.updateComplete;
22
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-row')).to.exist;
21
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('facet-row')).to.exist;
23
22
  });
24
23
  it('facets render on page', async () => {
25
24
  var _a;
@@ -27,7 +26,6 @@ describe('Render facets', () => {
27
26
  .facetGroup=${facetGroup}
28
27
  .renderOn=${'page'}
29
28
  ></facets-template>`);
30
- await el.updateComplete;
31
29
  expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-on-page')).to.exist;
32
30
  });
33
31
  it('facets render on modal', async () => {
@@ -36,120 +34,91 @@ describe('Render facets', () => {
36
34
  .facetGroup=${facetGroup}
37
35
  .renderOn=${'modal'}
38
36
  ></facets-template>`);
39
- await el.updateComplete;
40
37
  expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-on-modal')).to.exist;
41
38
  });
42
- it('find facet-title and facet-count for particular facet group', async () => {
43
- var _a, _b, _c, _d;
44
- const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
45
- await el.updateComplete;
46
- const facetInfo = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-info-display');
47
- expect((_b = facetInfo === null || facetInfo === void 0 ? void 0 : facetInfo.querySelector('.facet-title')) === null || _b === void 0 ? void 0 : _b.textContent).to.equal('audio');
48
- expect((_d = (_c = facetInfo === null || facetInfo === void 0 ? void 0 : facetInfo.querySelector('.facet-count')) === null || _c === void 0 ? void 0 : _c.textContent) === null || _d === void 0 ? void 0 : _d.trim()).to.equal('1,001');
49
- });
50
- it('find the hidden facet item', async () => {
39
+ it('applies correct bucket values to facet row', async () => {
51
40
  var _a;
52
- const selectedFacets = { ...facetGroup };
53
- selectedFacets.buckets[2].state = 'hidden'; // hide 'texts' mediatype
54
- const el = await fixture(html `<facets-template
55
- .facetGroup=${facetGroup}
56
- .selectedFacets=${selectedFacets}
57
- ></facets-template>`);
58
- await el.updateComplete;
59
- const hiddenFacet = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.hide-facet-icon')[0];
60
- // check title attribute for 'texts' mediatype
61
- expect(hiddenFacet === null || hiddenFacet === void 0 ? void 0 : hiddenFacet.getAttribute('title')).equal('Unhide mediatype: texts');
41
+ const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
42
+ const facetRows = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('facet-row');
43
+ expect(facetRows === null || facetRows === void 0 ? void 0 : facetRows.length).to.equal(facetGroup.buckets.length);
44
+ facetRows === null || facetRows === void 0 ? void 0 : facetRows.forEach((elmt, i) => {
45
+ const facetRow = elmt;
46
+ expect(facetRow).to.exist;
47
+ expect(facetRow.bucket).to.equal(facetGroup.buckets[i]);
48
+ expect(facetRow.facetType).to.equal(facetGroup.key);
49
+ });
62
50
  });
63
- it('find the selected facet item', async () => {
64
- var _a;
65
- const selectedFacets = { ...facetGroup };
66
- selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype
51
+ it('emits facet click and change events when a facet is selected/deselected', async () => {
52
+ var _a, _b, _c, _d;
53
+ const facetClickSpy = sinon.spy();
54
+ const facetChangeSpy = sinon.spy();
67
55
  const el = await fixture(html `<facets-template
68
56
  .facetGroup=${facetGroup}
69
- .selectedFacets=${selectedFacets}
57
+ @facetClick=${facetClickSpy}
58
+ @selectedFacetsChanged=${facetChangeSpy}
70
59
  ></facets-template>`);
71
- await el.updateComplete;
72
- const selectedFacet = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.hide-facet-icon')[0];
73
- // check title attribute for 'movies' mediatype
74
- expect(selectedFacet === null || selectedFacet === void 0 ? void 0 : selectedFacet.getAttribute('title')).equal('Hide mediatype: movies');
60
+ const facetRow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('facet-row');
61
+ expect(facetRow).to.exist;
62
+ const facetSelectCheck = (_b = facetRow.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.select-facet-checkbox');
63
+ expect(facetSelectCheck).to.exist;
64
+ facetSelectCheck.click();
65
+ expect(facetClickSpy.callCount).to.equal(1);
66
+ expect(facetChangeSpy.callCount).to.equal(1);
67
+ expect((_c = facetRow.bucket) === null || _c === void 0 ? void 0 : _c.state).to.equal('selected');
68
+ facetSelectCheck.click();
69
+ expect(facetClickSpy.callCount).to.equal(2);
70
+ expect(facetChangeSpy.callCount).to.equal(2);
71
+ expect((_d = facetRow.bucket) === null || _d === void 0 ? void 0 : _d.state).to.equal('none');
75
72
  });
76
- it('emits facetClick events for normal facets', async () => {
77
- var _a, _b, _c, _d, _e, _f, _g;
73
+ it('emits facet click and change events when a facet is negated/un-negated', async () => {
74
+ var _a, _b, _c, _d;
78
75
  const facetClickSpy = sinon.spy();
79
- const mediatypeGroup = {
80
- title: 'Media Type',
81
- key: 'mediatype',
82
- buckets: [
83
- { displayText: 'audio', key: 'audio', count: 42, state: 'none' },
84
- ],
85
- };
86
- const selectedFacets = getDefaultSelectedFacets();
76
+ const facetChangeSpy = sinon.spy();
87
77
  const el = await fixture(html `<facets-template
88
- .facetGroup=${mediatypeGroup}
89
- .selectedFacets=${selectedFacets}
78
+ .facetGroup=${facetGroup}
90
79
  @facetClick=${facetClickSpy}
80
+ @selectedFacetsChanged=${facetChangeSpy}
91
81
  ></facets-template>`);
92
- const checkbox = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-facet-checkbox');
93
- expect(checkbox).to.exist;
94
- // Select it
95
- checkbox.click();
96
- await el.updateComplete;
82
+ const facetRow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('facet-row');
83
+ expect(facetRow).to.exist;
84
+ const facetNegateCheck = (_b = facetRow.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.hide-facet-checkbox');
85
+ expect(facetNegateCheck).to.exist;
86
+ facetNegateCheck.click();
97
87
  expect(facetClickSpy.callCount).to.equal(1);
98
- const selectEvent = facetClickSpy
99
- .args[0][0];
100
- expect(selectEvent).to.exist;
101
- expect((_b = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _b === void 0 ? void 0 : _b.key).to.equal('mediatype');
102
- expect((_c = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _c === void 0 ? void 0 : _c.state).to.equal('selected');
103
- expect((_d = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _d === void 0 ? void 0 : _d.negative).to.be.false;
104
- // Unselect it
105
- checkbox.click();
106
- await el.updateComplete;
88
+ expect(facetChangeSpy.callCount).to.equal(1);
89
+ expect((_c = facetRow.bucket) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
90
+ facetNegateCheck.click();
107
91
  expect(facetClickSpy.callCount).to.equal(2);
108
- const unselectEvent = facetClickSpy
109
- .args[1][0];
110
- expect(unselectEvent).to.exist;
111
- expect((_e = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _e === void 0 ? void 0 : _e.key).to.equal('mediatype');
112
- expect((_f = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _f === void 0 ? void 0 : _f.state).to.equal('none');
113
- expect((_g = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _g === void 0 ? void 0 : _g.negative).to.be.false;
92
+ expect(facetChangeSpy.callCount).to.equal(2);
93
+ expect((_d = facetRow.bucket) === null || _d === void 0 ? void 0 : _d.state).to.equal('none');
114
94
  });
115
- it('emits facetClick events for negative facets', async () => {
116
- var _a, _b, _c, _d, _e, _f, _g;
95
+ it('emits facet click and change events when a pre-selected facet is deselected', async () => {
96
+ var _a, _b, _c, _d;
117
97
  const facetClickSpy = sinon.spy();
118
- const mediatypeGroup = {
119
- title: 'Media Type',
120
- key: 'mediatype',
121
- buckets: [
122
- { displayText: 'audio', key: 'audio', count: 42, state: 'none' },
123
- ],
124
- };
125
- const selectedFacets = getDefaultSelectedFacets();
98
+ const facetChangeSpy = sinon.spy();
99
+ const facetGroupWithSelection = { ...facetGroup };
100
+ facetGroupWithSelection.buckets = [
101
+ { ...facetGroup.buckets[0], state: 'selected' },
102
+ ...facetGroup.buckets.slice(1),
103
+ ];
126
104
  const el = await fixture(html `<facets-template
127
- .facetGroup=${mediatypeGroup}
128
- .selectedFacets=${selectedFacets}
105
+ .facetGroup=${facetGroupWithSelection}
129
106
  @facetClick=${facetClickSpy}
107
+ @selectedFacetsChanged=${facetChangeSpy}
130
108
  ></facets-template>`);
131
- const checkbox = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.hide-facet-checkbox');
132
- expect(checkbox).to.exist;
133
- // Select it
134
- checkbox.click();
135
- await el.updateComplete;
109
+ const facetRow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('facet-row');
110
+ expect(facetRow).to.exist;
111
+ const facetSelectCheck = (_b = facetRow.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.select-facet-checkbox');
112
+ expect(facetSelectCheck).to.exist;
113
+ expect(facetSelectCheck.checked).to.be.true;
114
+ facetSelectCheck.click();
136
115
  expect(facetClickSpy.callCount).to.equal(1);
137
- const selectEvent = facetClickSpy
138
- .args[0][0];
139
- expect(selectEvent).to.exist;
140
- expect((_b = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _b === void 0 ? void 0 : _b.key).to.equal('mediatype');
141
- expect((_c = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
142
- expect((_d = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _d === void 0 ? void 0 : _d.negative).to.be.true;
143
- // Unselect it
144
- checkbox.click();
145
- await el.updateComplete;
116
+ expect(facetChangeSpy.callCount).to.equal(1);
117
+ expect((_c = facetRow.bucket) === null || _c === void 0 ? void 0 : _c.state).to.equal('none');
118
+ facetSelectCheck.click();
146
119
  expect(facetClickSpy.callCount).to.equal(2);
147
- const unselectEvent = facetClickSpy
148
- .args[1][0];
149
- expect(unselectEvent).to.exist;
150
- expect((_e = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _e === void 0 ? void 0 : _e.key).to.equal('mediatype');
151
- expect((_f = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _f === void 0 ? void 0 : _f.state).to.equal('none');
152
- expect((_g = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _g === void 0 ? void 0 : _g.negative).to.be.true;
120
+ expect(facetChangeSpy.callCount).to.equal(2);
121
+ expect((_d = facetRow.bucket) === null || _d === void 0 ? void 0 : _d.state).to.equal('selected');
153
122
  });
154
123
  });
155
124
  //# sourceMappingURL=facets-template.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"facets-template.test.js","sourceRoot":"","sources":["../../../test/collection-facets/facets-template.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport type { FacetsTemplate } from '../../src/collection-facets/facets-template';\nimport '../../src/collection-facets/facets-template';\nimport { getDefaultSelectedFacets, FacetEventDetails } from '../../src/models';\n\nconst facetGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },\n { displayText: 'movies', key: 'movies', count: 901, state: 'none' },\n { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },\n { displayText: 'data', key: 'data', count: 230, state: 'none' },\n { displayText: 'web', key: 'web', count: 453, state: 'none' },\n ],\n};\n\ndescribe('Render facets', () => {\n it('should render more facets template', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facet-row')).to.exist;\n });\n\n it('facets render on page', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'page'}\n ></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-on-page')).to.exist;\n });\n\n it('facets render on modal', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'modal'}\n ></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-on-modal')).to.exist;\n });\n\n it('find facet-title and facet-count for particular facet group', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n const facetInfo = el.shadowRoot?.querySelector('.facet-info-display');\n expect(facetInfo?.querySelector('.facet-title')?.textContent).to.equal(\n 'audio'\n );\n expect(\n facetInfo?.querySelector('.facet-count')?.textContent?.trim()\n ).to.equal('1,001');\n });\n\n it('find the hidden facet item', async () => {\n const selectedFacets = { ...facetGroup };\n selectedFacets.buckets[2].state = 'hidden'; // hide 'texts' mediatype\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .selectedFacets=${selectedFacets}\n ></facets-template>`\n );\n await el.updateComplete;\n\n const hiddenFacet = el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];\n\n // check title attribute for 'texts' mediatype\n expect(hiddenFacet?.getAttribute('title')).equal('Unhide mediatype: texts');\n });\n\n it('find the selected facet item', async () => {\n const selectedFacets = { ...facetGroup };\n selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .selectedFacets=${selectedFacets}\n ></facets-template>`\n );\n await el.updateComplete;\n\n const selectedFacet =\n el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];\n\n // check title attribute for 'movies' mediatype\n expect(selectedFacet?.getAttribute('title')).equal(\n 'Hide mediatype: movies'\n );\n });\n\n it('emits facetClick events for normal facets', async () => {\n const facetClickSpy = sinon.spy();\n const mediatypeGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 42, state: 'none' },\n ],\n };\n const selectedFacets = getDefaultSelectedFacets();\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${mediatypeGroup}\n .selectedFacets=${selectedFacets}\n @facetClick=${facetClickSpy}\n ></facets-template>`\n );\n\n const checkbox = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(checkbox).to.exist;\n\n // Select it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(1);\n\n const selectEvent = facetClickSpy\n .args[0][0] as CustomEvent<FacetEventDetails>;\n expect(selectEvent).to.exist;\n expect(selectEvent?.detail?.key).to.equal('mediatype');\n expect(selectEvent?.detail?.state).to.equal('selected');\n expect(selectEvent?.detail?.negative).to.be.false;\n\n // Unselect it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(2);\n\n const unselectEvent = facetClickSpy\n .args[1][0] as CustomEvent<FacetEventDetails>;\n expect(unselectEvent).to.exist;\n expect(unselectEvent?.detail?.key).to.equal('mediatype');\n expect(unselectEvent?.detail?.state).to.equal('none');\n expect(unselectEvent?.detail?.negative).to.be.false;\n });\n\n it('emits facetClick events for negative facets', async () => {\n const facetClickSpy = sinon.spy();\n const mediatypeGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 42, state: 'none' },\n ],\n };\n const selectedFacets = getDefaultSelectedFacets();\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${mediatypeGroup}\n .selectedFacets=${selectedFacets}\n @facetClick=${facetClickSpy}\n ></facets-template>`\n );\n\n const checkbox = el.shadowRoot?.querySelector(\n '.hide-facet-checkbox'\n ) as HTMLInputElement;\n expect(checkbox).to.exist;\n\n // Select it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(1);\n\n const selectEvent = facetClickSpy\n .args[0][0] as CustomEvent<FacetEventDetails>;\n expect(selectEvent).to.exist;\n expect(selectEvent?.detail?.key).to.equal('mediatype');\n expect(selectEvent?.detail?.state).to.equal('hidden');\n expect(selectEvent?.detail?.negative).to.be.true;\n\n // Unselect it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(2);\n\n const unselectEvent = facetClickSpy\n .args[1][0] as CustomEvent<FacetEventDetails>;\n expect(unselectEvent).to.exist;\n expect(unselectEvent?.detail?.key).to.equal('mediatype');\n expect(unselectEvent?.detail?.state).to.equal('none');\n expect(unselectEvent?.detail?.negative).to.be.true;\n });\n});\n"]}
1
+ {"version":3,"file":"facets-template.test.js","sourceRoot":"","sources":["../../../test/collection-facets/facets-template.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport type { FacetsTemplate } from '../../src/collection-facets/facets-template';\nimport '../../src/collection-facets/facets-template';\nimport type { FacetRow } from '../../src/collection-facets/facet-row';\nimport type { FacetGroup } from '../../src/models';\n\nconst facetGroup: FacetGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },\n { displayText: 'movies', key: 'movies', count: 901, state: 'none' },\n { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },\n { displayText: 'data', key: 'data', count: 230, state: 'none' },\n { displayText: 'web', key: 'web', count: 453, state: 'none' },\n ],\n};\n\ndescribe('Render facets', () => {\n it('should render more facets template', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('facet-row')).to.exist;\n });\n\n it('facets render on page', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'page'}\n ></facets-template>`\n );\n\n expect(el.shadowRoot?.querySelector('.facets-on-page')).to.exist;\n });\n\n it('facets render on modal', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'modal'}\n ></facets-template>`\n );\n\n expect(el.shadowRoot?.querySelector('.facets-on-modal')).to.exist;\n });\n\n it('applies correct bucket values to facet row', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n\n const facetRows = el.shadowRoot?.querySelectorAll('facet-row');\n expect(facetRows?.length).to.equal(facetGroup.buckets.length);\n\n facetRows?.forEach((elmt, i) => {\n const facetRow = elmt as FacetRow;\n expect(facetRow).to.exist;\n expect(facetRow.bucket).to.equal(facetGroup.buckets[i]);\n expect(facetRow.facetType).to.equal(facetGroup.key);\n });\n });\n\n it('emits facet click and change events when a facet is selected/deselected', async () => {\n const facetClickSpy = sinon.spy();\n const facetChangeSpy = sinon.spy();\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n @facetClick=${facetClickSpy}\n @selectedFacetsChanged=${facetChangeSpy}\n ></facets-template>`\n );\n\n const facetRow = el.shadowRoot?.querySelector('facet-row') as FacetRow;\n expect(facetRow).to.exist;\n\n const facetSelectCheck = facetRow.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(facetSelectCheck).to.exist;\n\n facetSelectCheck.click();\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetChangeSpy.callCount).to.equal(1);\n expect(facetRow.bucket?.state).to.equal('selected');\n\n facetSelectCheck.click();\n expect(facetClickSpy.callCount).to.equal(2);\n expect(facetChangeSpy.callCount).to.equal(2);\n expect(facetRow.bucket?.state).to.equal('none');\n });\n\n it('emits facet click and change events when a facet is negated/un-negated', async () => {\n const facetClickSpy = sinon.spy();\n const facetChangeSpy = sinon.spy();\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n @facetClick=${facetClickSpy}\n @selectedFacetsChanged=${facetChangeSpy}\n ></facets-template>`\n );\n\n const facetRow = el.shadowRoot?.querySelector('facet-row') as FacetRow;\n expect(facetRow).to.exist;\n\n const facetNegateCheck = facetRow.shadowRoot?.querySelector(\n '.hide-facet-checkbox'\n ) as HTMLInputElement;\n expect(facetNegateCheck).to.exist;\n\n facetNegateCheck.click();\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetChangeSpy.callCount).to.equal(1);\n expect(facetRow.bucket?.state).to.equal('hidden');\n\n facetNegateCheck.click();\n expect(facetClickSpy.callCount).to.equal(2);\n expect(facetChangeSpy.callCount).to.equal(2);\n expect(facetRow.bucket?.state).to.equal('none');\n });\n\n it('emits facet click and change events when a pre-selected facet is deselected', async () => {\n const facetClickSpy = sinon.spy();\n const facetChangeSpy = sinon.spy();\n const facetGroupWithSelection = { ...facetGroup };\n facetGroupWithSelection.buckets = [\n { ...facetGroup.buckets[0], state: 'selected' },\n ...facetGroup.buckets.slice(1),\n ];\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroupWithSelection}\n @facetClick=${facetClickSpy}\n @selectedFacetsChanged=${facetChangeSpy}\n ></facets-template>`\n );\n\n const facetRow = el.shadowRoot?.querySelector('facet-row') as FacetRow;\n expect(facetRow).to.exist;\n\n const facetSelectCheck = facetRow.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(facetSelectCheck).to.exist;\n expect(facetSelectCheck.checked).to.be.true;\n\n facetSelectCheck.click();\n expect(facetClickSpy.callCount).to.equal(1);\n expect(facetChangeSpy.callCount).to.equal(1);\n expect(facetRow.bucket?.state).to.equal('none');\n\n facetSelectCheck.click();\n expect(facetClickSpy.callCount).to.equal(2);\n expect(facetChangeSpy.callCount).to.equal(2);\n expect(facetRow.bucket?.state).to.equal('selected');\n });\n});\n"]}