@internetarchive/collection-browser 3.3.0 → 3.3.1-alpha1
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/.editorconfig +29 -29
- package/.github/workflows/ci.yml +27 -27
- package/.github/workflows/gh-pages-main.yml +39 -39
- package/.github/workflows/npm-publish.yml +39 -39
- package/.github/workflows/pr-preview.yml +38 -38
- package/.husky/pre-commit +4 -4
- package/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/src/collection-browser.js +683 -683
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.js +118 -118
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets.js +266 -266
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
- package/dist/src/data-source/models.js.map +1 -1
- package/dist/src/tiles/base-tile-component.js.map +1 -1
- package/dist/src/tiles/grid/account-tile.js +36 -36
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.js +77 -77
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +137 -137
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.js +99 -99
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.js +297 -297
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.js +203 -203
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/utils/format-date.js.map +1 -1
- package/dist/test/collection-browser.test.js +189 -189
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +77 -77
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +70 -70
- package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list.test.js +126 -126
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- package/dist/test/utils/format-date.test.js.map +1 -1
- package/eslint.config.mjs +53 -53
- package/index.html +24 -24
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +117 -117
- package/renovate.json +6 -6
- package/src/collection-browser.ts +2829 -2829
- package/src/collection-facets/more-facets-content.ts +639 -639
- package/src/collection-facets.ts +995 -995
- package/src/data-source/collection-browser-data-source.ts +1401 -1401
- package/src/data-source/collection-browser-query-state.ts +65 -65
- package/src/data-source/models.ts +43 -43
- package/src/tiles/base-tile-component.ts +65 -65
- package/src/tiles/grid/account-tile.ts +113 -113
- package/src/tiles/grid/collection-tile.ts +163 -163
- package/src/tiles/grid/item-tile.ts +340 -340
- package/src/tiles/list/tile-list-compact.ts +239 -239
- package/src/tiles/list/tile-list.ts +700 -700
- package/src/tiles/tile-dispatcher.ts +490 -490
- package/src/utils/format-date.ts +62 -62
- package/test/collection-browser.test.ts +2403 -2403
- package/test/tiles/grid/item-tile.test.ts +520 -520
- package/test/tiles/list/tile-list-compact.test.ts +282 -282
- package/test/tiles/list/tile-list.test.ts +552 -552
- package/test/utils/format-date.test.ts +89 -89
- package/tsconfig.json +20 -20
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -123,12 +123,12 @@ describe('Item Tile', () => {
|
|
|
123
123
|
datePublished: new Date(2012, 0, 2),
|
|
124
124
|
dateReviewed: new Date(2013, 0, 2),
|
|
125
125
|
};
|
|
126
|
-
const el = await fixture(html `
|
|
127
|
-
<item-tile
|
|
128
|
-
.model=${model}
|
|
129
|
-
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
130
|
-
>
|
|
131
|
-
</item-tile>
|
|
126
|
+
const el = await fixture(html `
|
|
127
|
+
<item-tile
|
|
128
|
+
.model=${model}
|
|
129
|
+
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
130
|
+
>
|
|
131
|
+
</item-tile>
|
|
132
132
|
`);
|
|
133
133
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
134
134
|
expect(dateSortedBy).to.exist;
|
|
@@ -142,12 +142,12 @@ describe('Item Tile', () => {
|
|
|
142
142
|
datePublished: new Date(2012, 0, 2),
|
|
143
143
|
dateReviewed: new Date(2013, 0, 2),
|
|
144
144
|
};
|
|
145
|
-
const el = await fixture(html `
|
|
146
|
-
<item-tile
|
|
147
|
-
.model=${model}
|
|
148
|
-
.sortParam=${{ field: 'addeddate', direction: 'desc' }}
|
|
149
|
-
>
|
|
150
|
-
</item-tile>
|
|
145
|
+
const el = await fixture(html `
|
|
146
|
+
<item-tile
|
|
147
|
+
.model=${model}
|
|
148
|
+
.sortParam=${{ field: 'addeddate', direction: 'desc' }}
|
|
149
|
+
>
|
|
150
|
+
</item-tile>
|
|
151
151
|
`);
|
|
152
152
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
153
153
|
expect(dateSortedBy).to.exist;
|
|
@@ -161,12 +161,12 @@ describe('Item Tile', () => {
|
|
|
161
161
|
datePublished: new Date(2012, 0, 2),
|
|
162
162
|
dateReviewed: new Date(2013, 0, 2),
|
|
163
163
|
};
|
|
164
|
-
const el = await fixture(html `
|
|
165
|
-
<item-tile
|
|
166
|
-
.model=${model}
|
|
167
|
-
.sortParam=${{ field: 'publicdate', direction: 'desc' }}
|
|
168
|
-
>
|
|
169
|
-
</item-tile>
|
|
164
|
+
const el = await fixture(html `
|
|
165
|
+
<item-tile
|
|
166
|
+
.model=${model}
|
|
167
|
+
.sortParam=${{ field: 'publicdate', direction: 'desc' }}
|
|
168
|
+
>
|
|
169
|
+
</item-tile>
|
|
170
170
|
`);
|
|
171
171
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
172
172
|
expect(dateSortedBy).to.exist;
|
|
@@ -180,12 +180,12 @@ describe('Item Tile', () => {
|
|
|
180
180
|
datePublished: new Date(2012, 0, 2),
|
|
181
181
|
dateReviewed: new Date(2013, 0, 2),
|
|
182
182
|
};
|
|
183
|
-
const el = await fixture(html `
|
|
184
|
-
<item-tile
|
|
185
|
-
.model=${model}
|
|
186
|
-
.sortParam=${{ field: 'reviewdate', direction: 'desc' }}
|
|
187
|
-
>
|
|
188
|
-
</item-tile>
|
|
183
|
+
const el = await fixture(html `
|
|
184
|
+
<item-tile
|
|
185
|
+
.model=${model}
|
|
186
|
+
.sortParam=${{ field: 'reviewdate', direction: 'desc' }}
|
|
187
|
+
>
|
|
188
|
+
</item-tile>
|
|
189
189
|
`);
|
|
190
190
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
191
191
|
expect(dateSortedBy).to.exist;
|
|
@@ -196,12 +196,12 @@ describe('Item Tile', () => {
|
|
|
196
196
|
const model = {
|
|
197
197
|
datePublished: new Date('2012-01-01T00:00:00Z'),
|
|
198
198
|
};
|
|
199
|
-
const el = await fixture(html `
|
|
200
|
-
<item-tile
|
|
201
|
-
.model=${model}
|
|
202
|
-
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
203
|
-
>
|
|
204
|
-
</item-tile>
|
|
199
|
+
const el = await fixture(html `
|
|
200
|
+
<item-tile
|
|
201
|
+
.model=${model}
|
|
202
|
+
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
203
|
+
>
|
|
204
|
+
</item-tile>
|
|
205
205
|
`);
|
|
206
206
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
207
207
|
expect(dateSortedBy).to.exist;
|
|
@@ -215,12 +215,12 @@ describe('Item Tile', () => {
|
|
|
215
215
|
datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),
|
|
216
216
|
dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),
|
|
217
217
|
};
|
|
218
|
-
const el = await fixture(html `
|
|
219
|
-
<item-tile
|
|
220
|
-
.model=${model}
|
|
221
|
-
.sortParam=${{ field: 'addeddate', direction: 'desc' }}
|
|
222
|
-
>
|
|
223
|
-
</item-tile>
|
|
218
|
+
const el = await fixture(html `
|
|
219
|
+
<item-tile
|
|
220
|
+
.model=${model}
|
|
221
|
+
.sortParam=${{ field: 'addeddate', direction: 'desc' }}
|
|
222
|
+
>
|
|
223
|
+
</item-tile>
|
|
224
224
|
`);
|
|
225
225
|
let dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
226
226
|
expect(dateSortedBy).to.exist;
|
|
@@ -241,12 +241,12 @@ describe('Item Tile', () => {
|
|
|
241
241
|
const model = {
|
|
242
242
|
datePublished: new Date('2012-02-15T00:00:00Z'),
|
|
243
243
|
};
|
|
244
|
-
const el = await fixture(html `
|
|
245
|
-
<item-tile
|
|
246
|
-
.model=${model}
|
|
247
|
-
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
248
|
-
>
|
|
249
|
-
</item-tile>
|
|
244
|
+
const el = await fixture(html `
|
|
245
|
+
<item-tile
|
|
246
|
+
.model=${model}
|
|
247
|
+
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
248
|
+
>
|
|
249
|
+
</item-tile>
|
|
250
250
|
`);
|
|
251
251
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
252
252
|
expect(dateSortedBy).to.exist;
|
|
@@ -275,13 +275,13 @@ describe('Item Tile', () => {
|
|
|
275
275
|
const model = {
|
|
276
276
|
datePublished,
|
|
277
277
|
};
|
|
278
|
-
const el = await fixture(html `
|
|
279
|
-
<item-tile
|
|
280
|
-
useLocalTime
|
|
281
|
-
.model=${model}
|
|
282
|
-
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
283
|
-
>
|
|
284
|
-
</item-tile>
|
|
278
|
+
const el = await fixture(html `
|
|
279
|
+
<item-tile
|
|
280
|
+
useLocalTime
|
|
281
|
+
.model=${model}
|
|
282
|
+
.sortParam=${{ field: 'date', direction: 'desc' }}
|
|
283
|
+
>
|
|
284
|
+
</item-tile>
|
|
285
285
|
`);
|
|
286
286
|
const dateSortedBy = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.date-sorted-by');
|
|
287
287
|
expect(dateSortedBy).to.exist;
|
|
@@ -293,8 +293,8 @@ describe('Item Tile', () => {
|
|
|
293
293
|
creator: 'foo',
|
|
294
294
|
creators: ['foo', 'bar', 'baz'],
|
|
295
295
|
};
|
|
296
|
-
const el = await fixture(html `
|
|
297
|
-
<item-tile .model=${model} .creatorFilter=${'B'}> </item-tile>
|
|
296
|
+
const el = await fixture(html `
|
|
297
|
+
<item-tile .model=${model} .creatorFilter=${'B'}> </item-tile>
|
|
298
298
|
`);
|
|
299
299
|
const creator = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.created-by');
|
|
300
300
|
expect(creator).to.exist;
|
|
@@ -302,9 +302,9 @@ describe('Item Tile', () => {
|
|
|
302
302
|
});
|
|
303
303
|
it('should render with snippet block when it has snippets', async () => {
|
|
304
304
|
var _a;
|
|
305
|
-
const el = await fixture(html `
|
|
306
|
-
<item-tile .model=${{ snippets: ['some {{{snippet}}} text'] }}>
|
|
307
|
-
</item-tile>
|
|
305
|
+
const el = await fixture(html `
|
|
306
|
+
<item-tile .model=${{ snippets: ['some {{{snippet}}} text'] }}>
|
|
307
|
+
</item-tile>
|
|
308
308
|
`);
|
|
309
309
|
const snippetBlock = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('text-snippet-block');
|
|
310
310
|
expect(snippetBlock).to.exist;
|
|
@@ -317,8 +317,8 @@ describe('Item Tile', () => {
|
|
|
317
317
|
});
|
|
318
318
|
it('should render info button when showInfoButton flag is set', async () => {
|
|
319
319
|
var _a;
|
|
320
|
-
const el = await fixture(html `
|
|
321
|
-
<item-tile ?showInfoButton=${true}> </item-tile>
|
|
320
|
+
const el = await fixture(html `
|
|
321
|
+
<item-tile ?showInfoButton=${true}> </item-tile>
|
|
322
322
|
`);
|
|
323
323
|
const infoButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.info-button');
|
|
324
324
|
expect(infoButton).to.exist;
|
|
@@ -326,9 +326,9 @@ describe('Item Tile', () => {
|
|
|
326
326
|
it('should dispatch event when info button tapped', async () => {
|
|
327
327
|
var _a;
|
|
328
328
|
const infoButtonSpy = sinon.spy();
|
|
329
|
-
const el = await fixture(html `
|
|
330
|
-
<item-tile ?showInfoButton=${true} @infoButtonPressed=${infoButtonSpy}>
|
|
331
|
-
</item-tile>
|
|
329
|
+
const el = await fixture(html `
|
|
330
|
+
<item-tile ?showInfoButton=${true} @infoButtonPressed=${infoButtonSpy}>
|
|
331
|
+
</item-tile>
|
|
332
332
|
`);
|
|
333
333
|
const infoButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.info-button');
|
|
334
334
|
infoButton.click();
|
|
@@ -337,8 +337,8 @@ describe('Item Tile', () => {
|
|
|
337
337
|
});
|
|
338
338
|
it('should render with volume/issue view', async () => {
|
|
339
339
|
var _a;
|
|
340
|
-
const el = await fixture(html `
|
|
341
|
-
<item-tile .model=${{ volume: '1', issue: 'Index' }}></item-tile>
|
|
340
|
+
const el = await fixture(html `
|
|
341
|
+
<item-tile .model=${{ volume: '1', issue: 'Index' }}></item-tile>
|
|
342
342
|
`);
|
|
343
343
|
const volumeIssueBlock = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.volume-issue');
|
|
344
344
|
expect(volumeIssueBlock).to.exist;
|
|
@@ -355,14 +355,14 @@ describe('Item Tile', () => {
|
|
|
355
355
|
new Date('2010-01-02T12:34:56Z'),
|
|
356
356
|
new Date('2011-02-03T12:43:21Z'),
|
|
357
357
|
];
|
|
358
|
-
const el = await fixture(html `
|
|
359
|
-
<item-tile
|
|
358
|
+
const el = await fixture(html `
|
|
359
|
+
<item-tile
|
|
360
360
|
.model=${{
|
|
361
361
|
identifier: 'foo',
|
|
362
362
|
title: 'https://example.com/',
|
|
363
363
|
captureDates,
|
|
364
|
-
}}
|
|
365
|
-
></item-tile>
|
|
364
|
+
}}
|
|
365
|
+
></item-tile>
|
|
366
366
|
`);
|
|
367
367
|
const captureDatesUl = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.capture-dates');
|
|
368
368
|
expect(captureDatesUl, 'capture dates container').to.exist;
|
|
@@ -382,13 +382,13 @@ describe('Item Tile', () => {
|
|
|
382
382
|
new Date('2010-01-02T12:34:56Z'),
|
|
383
383
|
new Date('2011-02-03T12:43:21Z'),
|
|
384
384
|
];
|
|
385
|
-
const el = await fixture(html `
|
|
386
|
-
<item-tile
|
|
385
|
+
const el = await fixture(html `
|
|
386
|
+
<item-tile
|
|
387
387
|
.model=${{
|
|
388
388
|
identifier: 'foo',
|
|
389
389
|
captureDates,
|
|
390
|
-
}}
|
|
391
|
-
></item-tile>
|
|
390
|
+
}}
|
|
391
|
+
></item-tile>
|
|
392
392
|
`);
|
|
393
393
|
const captureDatesUl = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.capture-dates');
|
|
394
394
|
expect(captureDatesUl).not.to.exist;
|
|
@@ -400,25 +400,25 @@ describe('Item Tile', () => {
|
|
|
400
400
|
body: 'foo bar baz',
|
|
401
401
|
stars: 3,
|
|
402
402
|
};
|
|
403
|
-
const el = await fixture(html `
|
|
404
|
-
<item-tile
|
|
403
|
+
const el = await fixture(html `
|
|
404
|
+
<item-tile
|
|
405
405
|
.model=${{
|
|
406
406
|
identifier: 'foo',
|
|
407
407
|
review,
|
|
408
|
-
}}
|
|
409
|
-
></item-tile>
|
|
408
|
+
}}
|
|
409
|
+
></item-tile>
|
|
410
410
|
`);
|
|
411
411
|
const reviewBlock = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('review-block');
|
|
412
412
|
expect(reviewBlock).to.exist;
|
|
413
413
|
});
|
|
414
414
|
it('should not render review snippet block when no review is present', async () => {
|
|
415
415
|
var _a;
|
|
416
|
-
const el = await fixture(html `
|
|
417
|
-
<item-tile
|
|
416
|
+
const el = await fixture(html `
|
|
417
|
+
<item-tile
|
|
418
418
|
.model=${{
|
|
419
419
|
identifier: 'foo',
|
|
420
|
-
}}
|
|
421
|
-
></item-tile>
|
|
420
|
+
}}
|
|
421
|
+
></item-tile>
|
|
422
422
|
`);
|
|
423
423
|
const reviewBlock = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('review-block');
|
|
424
424
|
expect(reviewBlock).not.to.exist;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-tile.test.js","sourceRoot":"","sources":["../../../../test/tiles/grid/item-tile.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\r\nimport sinon from 'sinon';\r\nimport { html } from 'lit';\r\nimport type { ItemTile } from '../../../src/tiles/grid/item-tile';\r\n\r\nimport '../../../src/tiles/grid/item-tile';\r\nimport type { TileModel } from '../../../src/models';\r\n\r\ndescribe('Item Tile', () => {\r\n it('should render initial component', async () => {\r\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\r\n\r\n const container = el.shadowRoot?.querySelector('.container');\r\n const tileDetails = el.shadowRoot?.querySelector('.tile-details');\r\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\r\n const itemTitle = el.shadowRoot?.querySelector('#title');\r\n const imageBlock = el.shadowRoot?.querySelector('image-block');\r\n\r\n expect(container).to.exist;\r\n expect(tileDetails).to.exist;\r\n expect(itemInfo).to.exist;\r\n expect(imageBlock).to.exist;\r\n expect(itemTitle).to.exist;\r\n });\r\n\r\n it('should render with created-by element', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ creator: 'someone' }}></item-tile>`,\r\n );\r\n\r\n const container = el.shadowRoot?.querySelector('.container');\r\n const tileDetails = el.shadowRoot?.querySelector('.tile-details');\r\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const truncatedCreatorText = createdBy?.querySelector('.truncated');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(container).to.exist;\r\n expect(tileDetails).to.exist;\r\n expect(itemInfo).to.exist;\r\n expect(createdBy).to.exist;\r\n expect(truncatedCreatorText).to.exist;\r\n expect(dateSortedBy).to.not.exist;\r\n });\r\n\r\n it('should not render with created-by but date element', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ datePublished: new Date() }}></item-tile>`,\r\n );\r\n\r\n el.sortParam = {\r\n field: 'date',\r\n direction: 'desc',\r\n };\r\n await el.updateComplete;\r\n\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(createdBy).to.not.exist;\r\n expect(dateSortedBy).to.exist;\r\n });\r\n\r\n it('should not render with created-by but reviewdate element', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ dateReviewed: new Date() }}></item-tile>`,\r\n );\r\n\r\n el.sortParam = {\r\n field: 'reviewdate',\r\n direction: 'desc',\r\n };\r\n await el.updateComplete;\r\n\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(createdBy).to.not.exist;\r\n expect(dateSortedBy).to.exist;\r\n });\r\n\r\n it('should not render with created-by but publicdate element', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ dateArchived: new Date() }}></item-tile>`,\r\n );\r\n\r\n el.sortParam = {\r\n field: 'publicdate',\r\n direction: 'desc',\r\n };\r\n await el.updateComplete;\r\n\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(createdBy).to.not.exist;\r\n expect(dateSortedBy).to.exist;\r\n });\r\n\r\n it('should not render date-sorted-by element if date is not provided', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ dateArchived: undefined }}></item-tile>`,\r\n );\r\n\r\n el.sortParam = {\r\n field: 'publicdate',\r\n direction: 'desc',\r\n };\r\n await el.updateComplete;\r\n\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(createdBy).to.not.exist;\r\n expect(dateSortedBy).to.not.exist;\r\n });\r\n\r\n it('should render without created-by when sorting by a date field', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ dateAdded: new Date() }}></item-tile>`,\r\n );\r\n\r\n el.sortParam = {\r\n field: 'addeddate',\r\n direction: 'asc',\r\n };\r\n await el.updateComplete;\r\n\r\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(itemInfo).to.exist;\r\n expect(createdBy).to.not.exist;\r\n expect(dateSortedBy).to.exist;\r\n });\r\n\r\n it('should render with created-by when sort field is not a date', async () => {\r\n const el = await fixture<ItemTile>(\r\n html`<item-tile .model=${{ creator: 'someone' }}></item-tile>`,\r\n );\r\n\r\n el.sortParam = {\r\n field: 'week',\r\n direction: 'asc',\r\n };\r\n await el.updateComplete;\r\n\r\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\r\n const createdBy = el.shadowRoot?.querySelector('.created-by');\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n\r\n expect(itemInfo).to.exist;\r\n expect(dateSortedBy).to.not.exist; // it should not exist because this is not a date sort\r\n expect(createdBy).to.exist;\r\n });\r\n\r\n it('should render published date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.contain(\r\n 'published Jan 02, 2012',\r\n );\r\n });\r\n\r\n it('should render added date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.contain('added Jan 02, 2010');\r\n });\r\n\r\n it('should render archived date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'publicdate', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.contain(\r\n 'archived Jan 02, 2011',\r\n );\r\n });\r\n\r\n it('should render reviewed date when sorting by it', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 2),\r\n dateArchived: new Date(2011, 0, 2),\r\n datePublished: new Date(2012, 0, 2),\r\n dateReviewed: new Date(2013, 0, 2),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'reviewdate', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.contain(\r\n 'reviewed Jan 02, 2013',\r\n );\r\n });\r\n\r\n it('should only show the year for a date published of Jan 1 at midnight UTC', async () => {\r\n const model: Partial<TileModel> = {\r\n datePublished: new Date('2012-01-01T00:00:00Z'),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.equal('published 2012');\r\n });\r\n\r\n it('should show full date added/archived/reviewed, even on Jan 1 at midnight UTC', async () => {\r\n const model: Partial<TileModel> = {\r\n dateAdded: new Date(2010, 0, 1, 0, 0, 0, 0),\r\n dateArchived: new Date(2011, 0, 1, 0, 0, 0, 0),\r\n datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),\r\n dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n let dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.equal('added Jan 01, 2010');\r\n\r\n el.sortParam = { field: 'publicdate', direction: 'desc' };\r\n await el.updateComplete;\r\n dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.equal('archived Jan 01, 2011');\r\n\r\n el.sortParam = { field: 'reviewdate', direction: 'desc' };\r\n await el.updateComplete;\r\n dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.equal('reviewed Jan 01, 2013');\r\n });\r\n\r\n it('should display dates in UTC time zone by default', async () => {\r\n const model: Partial<TileModel> = {\r\n datePublished: new Date('2012-02-15T00:00:00Z'),\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.equal(\r\n 'published Feb 15, 2012',\r\n );\r\n });\r\n\r\n it('should display dates in local time when useLocalTime option is true', async () => {\r\n // Expected behavior depends on the time zone offset where the testing occurs\r\n const offset = new Date().getTimezoneOffset();\r\n let datePublished, expected;\r\n if (offset > 0) {\r\n // Positive local time zone offsets have earlier local dates than UTC\r\n datePublished = new Date('2012-02-15T00:00:00Z');\r\n expected = 'published Feb 14, 2012';\r\n } else if (offset < 0) {\r\n // Negative local time zone offsets have later local dates than UTC\r\n datePublished = new Date('2012-02-15T23:59:59Z');\r\n expected = 'published Feb 16, 2012';\r\n } else {\r\n // Local time may just be UTC itself\r\n datePublished = new Date('2012-02-15T00:00:00Z');\r\n expected = 'published Feb 15, 2012';\r\n }\r\n\r\n const model: Partial<TileModel> = {\r\n datePublished,\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n useLocalTime\r\n .model=${model}\r\n .sortParam=${{ field: 'date', direction: 'desc' }}\r\n >\r\n </item-tile>\r\n `);\r\n\r\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\r\n expect(dateSortedBy).to.exist;\r\n expect(dateSortedBy?.textContent?.trim()).to.equal(expected);\r\n });\r\n\r\n it('should show the first creator matching the letter filter, if defined', async () => {\r\n const model: Partial<TileModel> = {\r\n creator: 'foo',\r\n creators: ['foo', 'bar', 'baz'],\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile .model=${model} .creatorFilter=${'B'}> </item-tile>\r\n `);\r\n\r\n const creator = el.shadowRoot?.querySelector('.created-by');\r\n expect(creator).to.exist;\r\n expect(creator?.textContent?.trim()).to.match(/by\\s+bar/);\r\n });\r\n\r\n it('should render with snippet block when it has snippets', async () => {\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile .model=${{ snippets: ['some {{{snippet}}} text'] }}>\r\n </item-tile>\r\n `);\r\n\r\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\r\n\r\n expect(snippetBlock).to.exist;\r\n });\r\n\r\n it('should not render snippet block when no snippets are present', async () => {\r\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\r\n\r\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\r\n\r\n expect(snippetBlock).to.not.exist;\r\n });\r\n\r\n it('should render info button when showInfoButton flag is set', async () => {\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile ?showInfoButton=${true}> </item-tile>\r\n `);\r\n\r\n const infoButton = el.shadowRoot?.querySelector('.info-button');\r\n\r\n expect(infoButton).to.exist;\r\n });\r\n\r\n it('should dispatch event when info button tapped', async () => {\r\n const infoButtonSpy = sinon.spy();\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile ?showInfoButton=${true} @infoButtonPressed=${infoButtonSpy}>\r\n </item-tile>\r\n `);\r\n\r\n const infoButton = el.shadowRoot?.querySelector(\r\n '.info-button',\r\n ) as HTMLButtonElement;\r\n infoButton.click();\r\n await el.updateComplete;\r\n\r\n expect(infoButtonSpy.callCount).to.equal(1);\r\n });\r\n\r\n it('should render with volume/issue view', async () => {\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile .model=${{ volume: '1', issue: 'Index' }}></item-tile>\r\n `);\r\n\r\n const volumeIssueBlock = el.shadowRoot?.querySelector('.volume-issue');\r\n\r\n expect(volumeIssueBlock).to.exist;\r\n });\r\n\r\n it('should render with volume/issue view to not render', async () => {\r\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\r\n\r\n const volumeIssueBlock = el.shadowRoot?.querySelector('.volume-issue');\r\n\r\n expect(volumeIssueBlock).to.not.exist;\r\n });\r\n\r\n it('should render web capture date links if present', async () => {\r\n const captureDates = [\r\n new Date('2010-01-02T12:34:56Z'),\r\n new Date('2011-02-03T12:43:21Z'),\r\n ];\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${{\r\n identifier: 'foo',\r\n title: 'https://example.com/',\r\n captureDates,\r\n }}\r\n ></item-tile>\r\n `);\r\n\r\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\r\n expect(captureDatesUl, 'capture dates container').to.exist;\r\n expect(captureDatesUl?.children.length).to.equal(2);\r\n\r\n const firstDateLink = captureDatesUl?.children[0]?.querySelector('a[href]');\r\n expect(firstDateLink, 'first date link').to.exist;\r\n expect(firstDateLink?.getAttribute('href')).to.equal(\r\n 'https://web.archive.org/web/20100102123456/https%3A%2F%2Fexample.com%2F',\r\n );\r\n expect(firstDateLink?.textContent?.trim()).to.equal('Jan 02, 2010');\r\n\r\n const secondDateLink =\r\n captureDatesUl?.children[1]?.querySelector('a[href]');\r\n expect(secondDateLink, 'second date link').to.exist;\r\n expect(secondDateLink?.getAttribute('href')).to.equal(\r\n 'https://web.archive.org/web/20110203124321/https%3A%2F%2Fexample.com%2F',\r\n );\r\n expect(secondDateLink?.textContent?.trim()).to.equal('Feb 03, 2011');\r\n });\r\n\r\n it('should not render web captures if no title is present', async () => {\r\n const captureDates = [\r\n new Date('2010-01-02T12:34:56Z'),\r\n new Date('2011-02-03T12:43:21Z'),\r\n ];\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${{\r\n identifier: 'foo',\r\n captureDates,\r\n }}\r\n ></item-tile>\r\n `);\r\n\r\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\r\n expect(captureDatesUl).not.to.exist;\r\n });\r\n\r\n it('should render review snippet if present', async () => {\r\n const review = {\r\n title: 'Foo',\r\n body: 'foo bar baz',\r\n stars: 3,\r\n };\r\n\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${{\r\n identifier: 'foo',\r\n review,\r\n }}\r\n ></item-tile>\r\n `);\r\n\r\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\r\n expect(reviewBlock).to.exist;\r\n });\r\n\r\n it('should not render review snippet block when no review is present', async () => {\r\n const el = await fixture<ItemTile>(html`\r\n <item-tile\r\n .model=${{\r\n identifier: 'foo',\r\n }}\r\n ></item-tile>\r\n `);\r\n\r\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\r\n expect(reviewBlock).not.to.exist;\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"item-tile.test.js","sourceRoot":"","sources":["../../../../test/tiles/grid/item-tile.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 { ItemTile } from '../../../src/tiles/grid/item-tile';\n\nimport '../../../src/tiles/grid/item-tile';\nimport type { TileModel } from '../../../src/models';\n\ndescribe('Item Tile', () => {\n it('should render initial component', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n const container = el.shadowRoot?.querySelector('.container');\n const tileDetails = el.shadowRoot?.querySelector('.tile-details');\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const itemTitle = el.shadowRoot?.querySelector('#title');\n const imageBlock = el.shadowRoot?.querySelector('image-block');\n\n expect(container).to.exist;\n expect(tileDetails).to.exist;\n expect(itemInfo).to.exist;\n expect(imageBlock).to.exist;\n expect(itemTitle).to.exist;\n });\n\n it('should render with created-by element', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ creator: 'someone' }}></item-tile>`,\n );\n\n const container = el.shadowRoot?.querySelector('.container');\n const tileDetails = el.shadowRoot?.querySelector('.tile-details');\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const truncatedCreatorText = createdBy?.querySelector('.truncated');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(container).to.exist;\n expect(tileDetails).to.exist;\n expect(itemInfo).to.exist;\n expect(createdBy).to.exist;\n expect(truncatedCreatorText).to.exist;\n expect(dateSortedBy).to.not.exist;\n });\n\n it('should not render with created-by but date element', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ datePublished: new Date() }}></item-tile>`,\n );\n\n el.sortParam = {\n field: 'date',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should not render with created-by but reviewdate element', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ dateReviewed: new Date() }}></item-tile>`,\n );\n\n el.sortParam = {\n field: 'reviewdate',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should not render with created-by but publicdate element', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ dateArchived: new Date() }}></item-tile>`,\n );\n\n el.sortParam = {\n field: 'publicdate',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should not render date-sorted-by element if date is not provided', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ dateArchived: undefined }}></item-tile>`,\n );\n\n el.sortParam = {\n field: 'publicdate',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.not.exist;\n });\n\n it('should render without created-by when sorting by a date field', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ dateAdded: new Date() }}></item-tile>`,\n );\n\n el.sortParam = {\n field: 'addeddate',\n direction: 'asc',\n };\n await el.updateComplete;\n\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(itemInfo).to.exist;\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should render with created-by when sort field is not a date', async () => {\n const el = await fixture<ItemTile>(\n html`<item-tile .model=${{ creator: 'someone' }}></item-tile>`,\n );\n\n el.sortParam = {\n field: 'week',\n direction: 'asc',\n };\n await el.updateComplete;\n\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(itemInfo).to.exist;\n expect(dateSortedBy).to.not.exist; // it should not exist because this is not a date sort\n expect(createdBy).to.exist;\n });\n\n it('should render published date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.contain(\n 'published Jan 02, 2012',\n );\n });\n\n it('should render added date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.contain('added Jan 02, 2010');\n });\n\n it('should render archived date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'publicdate', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.contain(\n 'archived Jan 02, 2011',\n );\n });\n\n it('should render reviewed date when sorting by it', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 2),\n dateArchived: new Date(2011, 0, 2),\n datePublished: new Date(2012, 0, 2),\n dateReviewed: new Date(2013, 0, 2),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'reviewdate', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.contain(\n 'reviewed Jan 02, 2013',\n );\n });\n\n it('should only show the year for a date published of Jan 1 at midnight UTC', async () => {\n const model: Partial<TileModel> = {\n datePublished: new Date('2012-01-01T00:00:00Z'),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.equal('published 2012');\n });\n\n it('should show full date added/archived/reviewed, even on Jan 1 at midnight UTC', async () => {\n const model: Partial<TileModel> = {\n dateAdded: new Date(2010, 0, 1, 0, 0, 0, 0),\n dateArchived: new Date(2011, 0, 1, 0, 0, 0, 0),\n datePublished: new Date(2012, 0, 1, 0, 0, 0, 0),\n dateReviewed: new Date(2013, 0, 1, 0, 0, 0, 0),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n let dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.equal('added Jan 01, 2010');\n\n el.sortParam = { field: 'publicdate', direction: 'desc' };\n await el.updateComplete;\n dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.equal('archived Jan 01, 2011');\n\n el.sortParam = { field: 'reviewdate', direction: 'desc' };\n await el.updateComplete;\n dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.equal('reviewed Jan 01, 2013');\n });\n\n it('should display dates in UTC time zone by default', async () => {\n const model: Partial<TileModel> = {\n datePublished: new Date('2012-02-15T00:00:00Z'),\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.equal(\n 'published Feb 15, 2012',\n );\n });\n\n it('should display dates in local time when useLocalTime option is true', async () => {\n // Expected behavior depends on the time zone offset where the testing occurs\n const offset = new Date().getTimezoneOffset();\n let datePublished, expected;\n if (offset > 0) {\n // Positive local time zone offsets have earlier local dates than UTC\n datePublished = new Date('2012-02-15T00:00:00Z');\n expected = 'published Feb 14, 2012';\n } else if (offset < 0) {\n // Negative local time zone offsets have later local dates than UTC\n datePublished = new Date('2012-02-15T23:59:59Z');\n expected = 'published Feb 16, 2012';\n } else {\n // Local time may just be UTC itself\n datePublished = new Date('2012-02-15T00:00:00Z');\n expected = 'published Feb 15, 2012';\n }\n\n const model: Partial<TileModel> = {\n datePublished,\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n useLocalTime\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </item-tile>\n `);\n\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n expect(dateSortedBy).to.exist;\n expect(dateSortedBy?.textContent?.trim()).to.equal(expected);\n });\n\n it('should show the first creator matching the letter filter, if defined', async () => {\n const model: Partial<TileModel> = {\n creator: 'foo',\n creators: ['foo', 'bar', 'baz'],\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile .model=${model} .creatorFilter=${'B'}> </item-tile>\n `);\n\n const creator = el.shadowRoot?.querySelector('.created-by');\n expect(creator).to.exist;\n expect(creator?.textContent?.trim()).to.match(/by\\s+bar/);\n });\n\n it('should render with snippet block when it has snippets', async () => {\n const el = await fixture<ItemTile>(html`\n <item-tile .model=${{ snippets: ['some {{{snippet}}} text'] }}>\n </item-tile>\n `);\n\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\n\n expect(snippetBlock).to.exist;\n });\n\n it('should not render snippet block when no snippets are present', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\n\n expect(snippetBlock).to.not.exist;\n });\n\n it('should render info button when showInfoButton flag is set', async () => {\n const el = await fixture<ItemTile>(html`\n <item-tile ?showInfoButton=${true}> </item-tile>\n `);\n\n const infoButton = el.shadowRoot?.querySelector('.info-button');\n\n expect(infoButton).to.exist;\n });\n\n it('should dispatch event when info button tapped', async () => {\n const infoButtonSpy = sinon.spy();\n const el = await fixture<ItemTile>(html`\n <item-tile ?showInfoButton=${true} @infoButtonPressed=${infoButtonSpy}>\n </item-tile>\n `);\n\n const infoButton = el.shadowRoot?.querySelector(\n '.info-button',\n ) as HTMLButtonElement;\n infoButton.click();\n await el.updateComplete;\n\n expect(infoButtonSpy.callCount).to.equal(1);\n });\n\n it('should render with volume/issue view', async () => {\n const el = await fixture<ItemTile>(html`\n <item-tile .model=${{ volume: '1', issue: 'Index' }}></item-tile>\n `);\n\n const volumeIssueBlock = el.shadowRoot?.querySelector('.volume-issue');\n\n expect(volumeIssueBlock).to.exist;\n });\n\n it('should render with volume/issue view to not render', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n const volumeIssueBlock = el.shadowRoot?.querySelector('.volume-issue');\n\n expect(volumeIssueBlock).to.not.exist;\n });\n\n it('should render web capture date links if present', async () => {\n const captureDates = [\n new Date('2010-01-02T12:34:56Z'),\n new Date('2011-02-03T12:43:21Z'),\n ];\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${{\n identifier: 'foo',\n title: 'https://example.com/',\n captureDates,\n }}\n ></item-tile>\n `);\n\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\n expect(captureDatesUl, 'capture dates container').to.exist;\n expect(captureDatesUl?.children.length).to.equal(2);\n\n const firstDateLink = captureDatesUl?.children[0]?.querySelector('a[href]');\n expect(firstDateLink, 'first date link').to.exist;\n expect(firstDateLink?.getAttribute('href')).to.equal(\n 'https://web.archive.org/web/20100102123456/https%3A%2F%2Fexample.com%2F',\n );\n expect(firstDateLink?.textContent?.trim()).to.equal('Jan 02, 2010');\n\n const secondDateLink =\n captureDatesUl?.children[1]?.querySelector('a[href]');\n expect(secondDateLink, 'second date link').to.exist;\n expect(secondDateLink?.getAttribute('href')).to.equal(\n 'https://web.archive.org/web/20110203124321/https%3A%2F%2Fexample.com%2F',\n );\n expect(secondDateLink?.textContent?.trim()).to.equal('Feb 03, 2011');\n });\n\n it('should not render web captures if no title is present', async () => {\n const captureDates = [\n new Date('2010-01-02T12:34:56Z'),\n new Date('2011-02-03T12:43:21Z'),\n ];\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${{\n identifier: 'foo',\n captureDates,\n }}\n ></item-tile>\n `);\n\n const captureDatesUl = el.shadowRoot?.querySelector('.capture-dates');\n expect(captureDatesUl).not.to.exist;\n });\n\n it('should render review snippet if present', async () => {\n const review = {\n title: 'Foo',\n body: 'foo bar baz',\n stars: 3,\n };\n\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${{\n identifier: 'foo',\n review,\n }}\n ></item-tile>\n `);\n\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\n expect(reviewBlock).to.exist;\n });\n\n it('should not render review snippet block when no review is present', async () => {\n const el = await fixture<ItemTile>(html`\n <item-tile\n .model=${{\n identifier: 'foo',\n }}\n ></item-tile>\n `);\n\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\n expect(reviewBlock).not.to.exist;\n });\n});\n"]}
|