@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.
- package/dist/src/app-root.d.ts +1 -0
- package/dist/src/app-root.js +154 -82
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +2 -2
- package/dist/src/collection-browser.js +23 -18
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.d.ts +30 -0
- package/dist/src/collection-facets/facet-row.js +245 -0
- package/dist/src/collection-facets/facet-row.js.map +1 -0
- package/dist/src/collection-facets/facets-template.d.ts +1 -4
- package/dist/src/collection-facets/facets-template.js +40 -182
- package/dist/src/collection-facets/facets-template.js.map +1 -1
- package/dist/src/models.d.ts +18 -2
- package/dist/src/models.js.map +1 -1
- package/dist/test/collection-browser.test.js +36 -4
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
- package/dist/test/collection-facets/facet-row.test.js +235 -0
- package/dist/test/collection-facets/facet-row.test.js.map +1 -0
- package/dist/test/collection-facets/facets-template.test.js +65 -96
- package/dist/test/collection-facets/facets-template.test.js.map +1 -1
- package/dist/test/collection-facets.test.js +39 -70
- package/dist/test/collection-facets.test.js.map +1 -1
- package/package.json +2 -2
- package/src/app-root.ts +159 -82
- package/src/collection-browser.ts +23 -20
- package/src/collection-facets/facet-row.ts +274 -0
- package/src/collection-facets/facets-template.ts +49 -196
- package/src/models.ts +18 -2
- package/test/collection-browser.test.ts +36 -4
- package/test/collection-facets/facet-row.test.ts +328 -0
- package/test/collection-facets/facets-template.test.ts +72 -110
- package/test/collection-facets.test.ts +69 -101
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { expect, fixture } from '@open-wc/testing';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
import { html } from 'lit';
|
|
4
|
+
import type { FacetRow } from '../../src/collection-facets/facet-row';
|
|
5
|
+
import '../../src/collection-facets/facet-row';
|
|
6
|
+
import type { FacetState } from '../../src/models';
|
|
7
|
+
import { MockCollectionNameCache } from '../mocks/mock-collection-name-cache';
|
|
8
|
+
|
|
9
|
+
describe('Facet row', () => {
|
|
10
|
+
it('renders nothing if no bucket provided', async () => {
|
|
11
|
+
const el = await fixture<FacetRow>(
|
|
12
|
+
html`<facet-row .facetType=${'subject'}></facet-row>`
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
expect(el.shadowRoot?.querySelector('.facet-row-container')).not.to.exist;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('renders nothing if no facet type provided', async () => {
|
|
19
|
+
const bucket = {
|
|
20
|
+
key: 'foo',
|
|
21
|
+
state: 'none' as FacetState,
|
|
22
|
+
count: 5,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const el = await fixture<FacetRow>(
|
|
26
|
+
html`<facet-row .bucket=${bucket}></facet-row>`
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
expect(el.shadowRoot?.querySelector('.facet-row-container')).not.to.exist;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('renders provided bucket as facet row', async () => {
|
|
33
|
+
const bucket = {
|
|
34
|
+
key: 'foo',
|
|
35
|
+
state: 'none' as FacetState,
|
|
36
|
+
count: 5,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const el = await fixture<FacetRow>(
|
|
40
|
+
html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
expect(el.shadowRoot?.querySelector('.facet-row-container')).to.exist;
|
|
44
|
+
expect(
|
|
45
|
+
el.shadowRoot?.querySelectorAll('input[type="checkbox"]')
|
|
46
|
+
).to.have.length(2);
|
|
47
|
+
expect(el.shadowRoot?.querySelectorAll('label')).to.have.length(2);
|
|
48
|
+
|
|
49
|
+
expect(el.shadowRoot?.textContent?.trim()).to.match(/^foo\s*5$/);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('renders locale-appropriate facet count', async () => {
|
|
53
|
+
const bucket = {
|
|
54
|
+
key: 'foo',
|
|
55
|
+
state: 'none' as FacetState,
|
|
56
|
+
count: 54321,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const el = await fixture<FacetRow>(
|
|
60
|
+
html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const facetCount = el.shadowRoot?.querySelector('.facet-count');
|
|
64
|
+
expect(facetCount?.textContent).to.equal('54,321');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('renders selected facets with checked checkbox', async () => {
|
|
68
|
+
const bucket = {
|
|
69
|
+
key: 'foo',
|
|
70
|
+
state: 'selected' as FacetState,
|
|
71
|
+
count: 5,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const el = await fixture<FacetRow>(
|
|
75
|
+
html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// "Positive" checkbox is checked; "Negative" checkbox is not checked
|
|
79
|
+
const selectCheckbox = el.shadowRoot?.querySelector(
|
|
80
|
+
'.select-facet-checkbox'
|
|
81
|
+
) as HTMLInputElement;
|
|
82
|
+
const hideCheckbox = el.shadowRoot?.querySelector(
|
|
83
|
+
'.hide-facet-checkbox'
|
|
84
|
+
) as HTMLInputElement;
|
|
85
|
+
expect(selectCheckbox?.checked).to.be.true;
|
|
86
|
+
expect(hideCheckbox?.checked).to.be.false;
|
|
87
|
+
|
|
88
|
+
// Eye icon is not in its active state
|
|
89
|
+
expect(
|
|
90
|
+
el.shadowRoot?.querySelector('.hide-facet-icon')
|
|
91
|
+
).to.exist.and.satisfy(
|
|
92
|
+
(icon: HTMLElement) => !icon.classList.contains('active')
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('renders hidden facets with closed eye icon', async () => {
|
|
97
|
+
const bucket = {
|
|
98
|
+
key: 'foo',
|
|
99
|
+
state: 'hidden' as FacetState,
|
|
100
|
+
count: 5,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const el = await fixture<FacetRow>(
|
|
104
|
+
html`<facet-row .facetType=${'subject'} .bucket=${bucket}></facet-row>`
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// "Positive" checkbox is not checked; "Negative" checkbox is checked
|
|
108
|
+
const selectCheckbox = el.shadowRoot?.querySelector(
|
|
109
|
+
'.select-facet-checkbox'
|
|
110
|
+
) as HTMLInputElement;
|
|
111
|
+
const hideCheckbox = el.shadowRoot?.querySelector(
|
|
112
|
+
'.hide-facet-checkbox'
|
|
113
|
+
) as HTMLInputElement;
|
|
114
|
+
expect(selectCheckbox?.checked).to.be.false;
|
|
115
|
+
expect(hideCheckbox?.checked).to.be.true;
|
|
116
|
+
|
|
117
|
+
// Eye icon is in its "active" state
|
|
118
|
+
expect(
|
|
119
|
+
el.shadowRoot?.querySelector('.hide-facet-icon')
|
|
120
|
+
).to.exist.and.satisfy((icon: HTMLElement) =>
|
|
121
|
+
icon.classList.contains('active')
|
|
122
|
+
);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('renders collection facets as links', async () => {
|
|
126
|
+
const collectionNameCache = new MockCollectionNameCache();
|
|
127
|
+
const bucket = {
|
|
128
|
+
key: 'foo',
|
|
129
|
+
state: 'none' as FacetState,
|
|
130
|
+
count: 5,
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const el = await fixture<FacetRow>(
|
|
134
|
+
html`<facet-row
|
|
135
|
+
.facetType=${'collection'}
|
|
136
|
+
.bucket=${bucket}
|
|
137
|
+
.collectionNameCache=${collectionNameCache}
|
|
138
|
+
></facet-row>`
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
const collectionName = el.shadowRoot?.querySelector(
|
|
142
|
+
'async-collection-name'
|
|
143
|
+
);
|
|
144
|
+
expect(collectionName?.parentElement).to.be.instanceOf(HTMLAnchorElement);
|
|
145
|
+
expect(collectionName?.parentElement?.getAttribute('href')).to.equal(
|
|
146
|
+
'/details/foo'
|
|
147
|
+
);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('does not render non-collection facets as links', async () => {
|
|
151
|
+
const collectionNameCache = new MockCollectionNameCache();
|
|
152
|
+
const bucket = {
|
|
153
|
+
key: 'foo',
|
|
154
|
+
state: 'none' as FacetState,
|
|
155
|
+
count: 5,
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const el = await fixture<FacetRow>(
|
|
159
|
+
html`<facet-row
|
|
160
|
+
.facetType=${'subject'}
|
|
161
|
+
.bucket=${bucket}
|
|
162
|
+
.collectionNameCache=${collectionNameCache}
|
|
163
|
+
></facet-row>`
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
expect(el.shadowRoot?.querySelector('a:link')).not.to.exist;
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('emits event when facet checkbox is clicked', async () => {
|
|
170
|
+
const facetClickSpy = sinon.spy();
|
|
171
|
+
const bucket = {
|
|
172
|
+
key: 'foo',
|
|
173
|
+
state: 'none' as FacetState,
|
|
174
|
+
count: 5,
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
const el = await fixture<FacetRow>(
|
|
178
|
+
html`<facet-row
|
|
179
|
+
.facetType=${'subject'}
|
|
180
|
+
.bucket=${bucket}
|
|
181
|
+
@facetClick=${facetClickSpy}
|
|
182
|
+
></facet-row>`
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
const positiveFacetCheck = el.shadowRoot?.querySelector(
|
|
186
|
+
'.select-facet-checkbox'
|
|
187
|
+
) as HTMLInputElement;
|
|
188
|
+
expect(positiveFacetCheck).to.exist;
|
|
189
|
+
positiveFacetCheck.click();
|
|
190
|
+
|
|
191
|
+
expect(facetClickSpy.callCount).to.equal(1);
|
|
192
|
+
expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({
|
|
193
|
+
facetType: 'subject',
|
|
194
|
+
bucket,
|
|
195
|
+
negative: false,
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it('emits event when facet checkbox is unchecked', async () => {
|
|
200
|
+
const facetClickSpy = sinon.spy();
|
|
201
|
+
const bucket = {
|
|
202
|
+
key: 'foo',
|
|
203
|
+
state: 'selected' as FacetState,
|
|
204
|
+
count: 5,
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
const el = await fixture<FacetRow>(
|
|
208
|
+
html`<facet-row
|
|
209
|
+
.facetType=${'subject'}
|
|
210
|
+
.bucket=${bucket}
|
|
211
|
+
@facetClick=${facetClickSpy}
|
|
212
|
+
></facet-row>`
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
const positiveFacetCheck = el.shadowRoot?.querySelector(
|
|
216
|
+
'.select-facet-checkbox'
|
|
217
|
+
) as HTMLInputElement;
|
|
218
|
+
expect(positiveFacetCheck).to.exist;
|
|
219
|
+
positiveFacetCheck.click();
|
|
220
|
+
|
|
221
|
+
expect(facetClickSpy.callCount).to.equal(1);
|
|
222
|
+
expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({
|
|
223
|
+
facetType: 'subject',
|
|
224
|
+
bucket,
|
|
225
|
+
negative: false,
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('emits event when facet negative icon is clicked', async () => {
|
|
230
|
+
const facetClickSpy = sinon.spy();
|
|
231
|
+
const bucket = {
|
|
232
|
+
key: 'foo',
|
|
233
|
+
state: 'none' as FacetState,
|
|
234
|
+
count: 5,
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
const el = await fixture<FacetRow>(
|
|
238
|
+
html`<facet-row
|
|
239
|
+
.facetType=${'subject'}
|
|
240
|
+
.bucket=${bucket}
|
|
241
|
+
@facetClick=${facetClickSpy}
|
|
242
|
+
></facet-row>`
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
const negativeFacetIcon = el.shadowRoot?.querySelector(
|
|
246
|
+
'.hide-facet-icon'
|
|
247
|
+
) as HTMLLabelElement;
|
|
248
|
+
expect(negativeFacetIcon).to.exist;
|
|
249
|
+
negativeFacetIcon.click();
|
|
250
|
+
|
|
251
|
+
expect(facetClickSpy.callCount).to.equal(1);
|
|
252
|
+
expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({
|
|
253
|
+
facetType: 'subject',
|
|
254
|
+
bucket,
|
|
255
|
+
negative: true,
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it('emits event when facet negative icon is unchecked', async () => {
|
|
260
|
+
const facetClickSpy = sinon.spy();
|
|
261
|
+
const bucket = {
|
|
262
|
+
key: 'foo',
|
|
263
|
+
state: 'hidden' as FacetState,
|
|
264
|
+
count: 5,
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const el = await fixture<FacetRow>(
|
|
268
|
+
html`<facet-row
|
|
269
|
+
.facetType=${'subject'}
|
|
270
|
+
.bucket=${bucket}
|
|
271
|
+
@facetClick=${facetClickSpy}
|
|
272
|
+
></facet-row>`
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
const negativeFacetIcon = el.shadowRoot?.querySelector(
|
|
276
|
+
'.hide-facet-icon'
|
|
277
|
+
) as HTMLLabelElement;
|
|
278
|
+
expect(negativeFacetIcon).to.exist;
|
|
279
|
+
negativeFacetIcon.click();
|
|
280
|
+
|
|
281
|
+
expect(facetClickSpy.callCount).to.equal(1);
|
|
282
|
+
expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({
|
|
283
|
+
facetType: 'subject',
|
|
284
|
+
bucket,
|
|
285
|
+
negative: true,
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
it('selects/deselects facet when label is clicked', async () => {
|
|
290
|
+
const facetClickSpy = sinon.spy();
|
|
291
|
+
const bucket = {
|
|
292
|
+
key: 'foo',
|
|
293
|
+
state: 'none' as FacetState,
|
|
294
|
+
count: 5,
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
const el = await fixture<FacetRow>(
|
|
298
|
+
html`<facet-row
|
|
299
|
+
.facetType=${'subject'}
|
|
300
|
+
.bucket=${bucket}
|
|
301
|
+
@facetClick=${facetClickSpy}
|
|
302
|
+
></facet-row>`
|
|
303
|
+
);
|
|
304
|
+
|
|
305
|
+
const facetLabel = el.shadowRoot?.querySelector(
|
|
306
|
+
'.facet-info-display'
|
|
307
|
+
) as HTMLLabelElement;
|
|
308
|
+
expect(facetLabel).to.exist;
|
|
309
|
+
|
|
310
|
+
// Select facet by clicking label
|
|
311
|
+
facetLabel.click();
|
|
312
|
+
expect(facetClickSpy.callCount).to.equal(1);
|
|
313
|
+
expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({
|
|
314
|
+
facetType: 'subject',
|
|
315
|
+
bucket,
|
|
316
|
+
negative: false,
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
// Deselect facet by clicking label
|
|
320
|
+
facetLabel.click();
|
|
321
|
+
expect(facetClickSpy.callCount).to.equal(2);
|
|
322
|
+
expect(facetClickSpy.lastCall.args[0]?.detail).to.deep.equal({
|
|
323
|
+
facetType: 'subject',
|
|
324
|
+
bucket,
|
|
325
|
+
negative: false,
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
});
|
|
@@ -3,9 +3,10 @@ import sinon from 'sinon';
|
|
|
3
3
|
import { html } from 'lit';
|
|
4
4
|
import type { FacetsTemplate } from '../../src/collection-facets/facets-template';
|
|
5
5
|
import '../../src/collection-facets/facets-template';
|
|
6
|
-
import {
|
|
6
|
+
import type { FacetRow } from '../../src/collection-facets/facet-row';
|
|
7
|
+
import type { FacetGroup } from '../../src/models';
|
|
7
8
|
|
|
8
|
-
const facetGroup = {
|
|
9
|
+
const facetGroup: FacetGroup = {
|
|
9
10
|
title: 'Media Type',
|
|
10
11
|
key: 'mediatype',
|
|
11
12
|
buckets: [
|
|
@@ -24,7 +25,7 @@ describe('Render facets', () => {
|
|
|
24
25
|
);
|
|
25
26
|
await el.updateComplete;
|
|
26
27
|
|
|
27
|
-
expect(el.shadowRoot?.querySelector('
|
|
28
|
+
expect(el.shadowRoot?.querySelector('facet-row')).to.exist;
|
|
28
29
|
});
|
|
29
30
|
|
|
30
31
|
it('facets render on page', async () => {
|
|
@@ -34,7 +35,6 @@ describe('Render facets', () => {
|
|
|
34
35
|
.renderOn=${'page'}
|
|
35
36
|
></facets-template>`
|
|
36
37
|
);
|
|
37
|
-
await el.updateComplete;
|
|
38
38
|
|
|
39
39
|
expect(el.shadowRoot?.querySelector('.facets-on-page')).to.exist;
|
|
40
40
|
});
|
|
@@ -46,158 +46,120 @@ describe('Render facets', () => {
|
|
|
46
46
|
.renderOn=${'modal'}
|
|
47
47
|
></facets-template>`
|
|
48
48
|
);
|
|
49
|
-
await el.updateComplete;
|
|
50
49
|
|
|
51
50
|
expect(el.shadowRoot?.querySelector('.facets-on-modal')).to.exist;
|
|
52
51
|
});
|
|
53
52
|
|
|
54
|
-
it('
|
|
53
|
+
it('applies correct bucket values to facet row', async () => {
|
|
55
54
|
const el = await fixture<FacetsTemplate>(
|
|
56
55
|
html`<facets-template .facetGroup=${facetGroup}></facets-template>`
|
|
57
56
|
);
|
|
58
|
-
await el.updateComplete;
|
|
59
57
|
|
|
60
|
-
const
|
|
61
|
-
expect(
|
|
62
|
-
'audio'
|
|
63
|
-
);
|
|
64
|
-
expect(
|
|
65
|
-
facetInfo?.querySelector('.facet-count')?.textContent?.trim()
|
|
66
|
-
).to.equal('1,001');
|
|
67
|
-
});
|
|
58
|
+
const facetRows = el.shadowRoot?.querySelectorAll('facet-row');
|
|
59
|
+
expect(facetRows?.length).to.equal(facetGroup.buckets.length);
|
|
68
60
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
facetRows?.forEach((elmt, i) => {
|
|
62
|
+
const facetRow = elmt as FacetRow;
|
|
63
|
+
expect(facetRow).to.exist;
|
|
64
|
+
expect(facetRow.bucket).to.equal(facetGroup.buckets[i]);
|
|
65
|
+
expect(facetRow.facetType).to.equal(facetGroup.key);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
72
68
|
|
|
69
|
+
it('emits facet click and change events when a facet is selected/deselected', async () => {
|
|
70
|
+
const facetClickSpy = sinon.spy();
|
|
71
|
+
const facetChangeSpy = sinon.spy();
|
|
73
72
|
const el = await fixture<FacetsTemplate>(
|
|
74
73
|
html`<facets-template
|
|
75
74
|
.facetGroup=${facetGroup}
|
|
76
|
-
|
|
75
|
+
@facetClick=${facetClickSpy}
|
|
76
|
+
@selectedFacetsChanged=${facetChangeSpy}
|
|
77
77
|
></facets-template>`
|
|
78
78
|
);
|
|
79
|
-
await el.updateComplete;
|
|
80
|
-
|
|
81
|
-
const hiddenFacet = el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
expect(
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('find the selected facet item', async () => {
|
|
88
|
-
const selectedFacets = { ...facetGroup };
|
|
89
|
-
selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype
|
|
80
|
+
const facetRow = el.shadowRoot?.querySelector('facet-row') as FacetRow;
|
|
81
|
+
expect(facetRow).to.exist;
|
|
90
82
|
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
></facets-template>`
|
|
96
|
-
);
|
|
97
|
-
await el.updateComplete;
|
|
83
|
+
const facetSelectCheck = facetRow.shadowRoot?.querySelector(
|
|
84
|
+
'.select-facet-checkbox'
|
|
85
|
+
) as HTMLInputElement;
|
|
86
|
+
expect(facetSelectCheck).to.exist;
|
|
98
87
|
|
|
99
|
-
|
|
100
|
-
|
|
88
|
+
facetSelectCheck.click();
|
|
89
|
+
expect(facetClickSpy.callCount).to.equal(1);
|
|
90
|
+
expect(facetChangeSpy.callCount).to.equal(1);
|
|
91
|
+
expect(facetRow.bucket?.state).to.equal('selected');
|
|
101
92
|
|
|
102
|
-
|
|
103
|
-
expect(
|
|
104
|
-
|
|
105
|
-
);
|
|
93
|
+
facetSelectCheck.click();
|
|
94
|
+
expect(facetClickSpy.callCount).to.equal(2);
|
|
95
|
+
expect(facetChangeSpy.callCount).to.equal(2);
|
|
96
|
+
expect(facetRow.bucket?.state).to.equal('none');
|
|
106
97
|
});
|
|
107
98
|
|
|
108
|
-
it('emits
|
|
99
|
+
it('emits facet click and change events when a facet is negated/un-negated', async () => {
|
|
109
100
|
const facetClickSpy = sinon.spy();
|
|
110
|
-
const
|
|
111
|
-
title: 'Media Type',
|
|
112
|
-
key: 'mediatype',
|
|
113
|
-
buckets: [
|
|
114
|
-
{ displayText: 'audio', key: 'audio', count: 42, state: 'none' },
|
|
115
|
-
],
|
|
116
|
-
};
|
|
117
|
-
const selectedFacets = getDefaultSelectedFacets();
|
|
101
|
+
const facetChangeSpy = sinon.spy();
|
|
118
102
|
const el = await fixture<FacetsTemplate>(
|
|
119
103
|
html`<facets-template
|
|
120
|
-
.facetGroup=${
|
|
121
|
-
.selectedFacets=${selectedFacets}
|
|
104
|
+
.facetGroup=${facetGroup}
|
|
122
105
|
@facetClick=${facetClickSpy}
|
|
106
|
+
@selectedFacetsChanged=${facetChangeSpy}
|
|
123
107
|
></facets-template>`
|
|
124
108
|
);
|
|
125
109
|
|
|
126
|
-
const
|
|
127
|
-
|
|
110
|
+
const facetRow = el.shadowRoot?.querySelector('facet-row') as FacetRow;
|
|
111
|
+
expect(facetRow).to.exist;
|
|
112
|
+
|
|
113
|
+
const facetNegateCheck = facetRow.shadowRoot?.querySelector(
|
|
114
|
+
'.hide-facet-checkbox'
|
|
128
115
|
) as HTMLInputElement;
|
|
129
|
-
expect(
|
|
116
|
+
expect(facetNegateCheck).to.exist;
|
|
130
117
|
|
|
131
|
-
|
|
132
|
-
checkbox.click();
|
|
133
|
-
await el.updateComplete;
|
|
118
|
+
facetNegateCheck.click();
|
|
134
119
|
expect(facetClickSpy.callCount).to.equal(1);
|
|
120
|
+
expect(facetChangeSpy.callCount).to.equal(1);
|
|
121
|
+
expect(facetRow.bucket?.state).to.equal('hidden');
|
|
135
122
|
|
|
136
|
-
|
|
137
|
-
.args[0][0] as CustomEvent<FacetEventDetails>;
|
|
138
|
-
expect(selectEvent).to.exist;
|
|
139
|
-
expect(selectEvent?.detail?.key).to.equal('mediatype');
|
|
140
|
-
expect(selectEvent?.detail?.state).to.equal('selected');
|
|
141
|
-
expect(selectEvent?.detail?.negative).to.be.false;
|
|
142
|
-
|
|
143
|
-
// Unselect it
|
|
144
|
-
checkbox.click();
|
|
145
|
-
await el.updateComplete;
|
|
123
|
+
facetNegateCheck.click();
|
|
146
124
|
expect(facetClickSpy.callCount).to.equal(2);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
.args[1][0] as CustomEvent<FacetEventDetails>;
|
|
150
|
-
expect(unselectEvent).to.exist;
|
|
151
|
-
expect(unselectEvent?.detail?.key).to.equal('mediatype');
|
|
152
|
-
expect(unselectEvent?.detail?.state).to.equal('none');
|
|
153
|
-
expect(unselectEvent?.detail?.negative).to.be.false;
|
|
125
|
+
expect(facetChangeSpy.callCount).to.equal(2);
|
|
126
|
+
expect(facetRow.bucket?.state).to.equal('none');
|
|
154
127
|
});
|
|
155
128
|
|
|
156
|
-
it('emits
|
|
129
|
+
it('emits facet click and change events when a pre-selected facet is deselected', async () => {
|
|
157
130
|
const facetClickSpy = sinon.spy();
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
buckets:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const selectedFacets = getDefaultSelectedFacets();
|
|
131
|
+
const facetChangeSpy = sinon.spy();
|
|
132
|
+
const facetGroupWithSelection = { ...facetGroup };
|
|
133
|
+
facetGroupWithSelection.buckets = [
|
|
134
|
+
{ ...facetGroup.buckets[0], state: 'selected' },
|
|
135
|
+
...facetGroup.buckets.slice(1),
|
|
136
|
+
];
|
|
137
|
+
|
|
166
138
|
const el = await fixture<FacetsTemplate>(
|
|
167
139
|
html`<facets-template
|
|
168
|
-
.facetGroup=${
|
|
169
|
-
.selectedFacets=${selectedFacets}
|
|
140
|
+
.facetGroup=${facetGroupWithSelection}
|
|
170
141
|
@facetClick=${facetClickSpy}
|
|
142
|
+
@selectedFacetsChanged=${facetChangeSpy}
|
|
171
143
|
></facets-template>`
|
|
172
144
|
);
|
|
173
145
|
|
|
174
|
-
const
|
|
175
|
-
|
|
146
|
+
const facetRow = el.shadowRoot?.querySelector('facet-row') as FacetRow;
|
|
147
|
+
expect(facetRow).to.exist;
|
|
148
|
+
|
|
149
|
+
const facetSelectCheck = facetRow.shadowRoot?.querySelector(
|
|
150
|
+
'.select-facet-checkbox'
|
|
176
151
|
) as HTMLInputElement;
|
|
177
|
-
expect(
|
|
152
|
+
expect(facetSelectCheck).to.exist;
|
|
153
|
+
expect(facetSelectCheck.checked).to.be.true;
|
|
178
154
|
|
|
179
|
-
|
|
180
|
-
checkbox.click();
|
|
181
|
-
await el.updateComplete;
|
|
155
|
+
facetSelectCheck.click();
|
|
182
156
|
expect(facetClickSpy.callCount).to.equal(1);
|
|
157
|
+
expect(facetChangeSpy.callCount).to.equal(1);
|
|
158
|
+
expect(facetRow.bucket?.state).to.equal('none');
|
|
183
159
|
|
|
184
|
-
|
|
185
|
-
.args[0][0] as CustomEvent<FacetEventDetails>;
|
|
186
|
-
expect(selectEvent).to.exist;
|
|
187
|
-
expect(selectEvent?.detail?.key).to.equal('mediatype');
|
|
188
|
-
expect(selectEvent?.detail?.state).to.equal('hidden');
|
|
189
|
-
expect(selectEvent?.detail?.negative).to.be.true;
|
|
190
|
-
|
|
191
|
-
// Unselect it
|
|
192
|
-
checkbox.click();
|
|
193
|
-
await el.updateComplete;
|
|
160
|
+
facetSelectCheck.click();
|
|
194
161
|
expect(facetClickSpy.callCount).to.equal(2);
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
.args[1][0] as CustomEvent<FacetEventDetails>;
|
|
198
|
-
expect(unselectEvent).to.exist;
|
|
199
|
-
expect(unselectEvent?.detail?.key).to.equal('mediatype');
|
|
200
|
-
expect(unselectEvent?.detail?.state).to.equal('none');
|
|
201
|
-
expect(unselectEvent?.detail?.negative).to.be.true;
|
|
162
|
+
expect(facetChangeSpy.callCount).to.equal(2);
|
|
163
|
+
expect(facetRow.bucket?.state).to.equal('selected');
|
|
202
164
|
});
|
|
203
165
|
});
|