@internetarchive/collection-browser 4.4.0 → 4.4.1
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 +1 -1
- package/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/src/app-root.js +672 -672
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.js +763 -763
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/tiles/item-image.js +28 -28
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/tile-display-value-provider.js +2 -1
- package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +2 -2
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
- package/dist/test/tiles/list/tile-list.test.js +2 -2
- package/dist/test/tiles/list/tile-list.test.js.map +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +14 -0
- package/dist/test/tiles/tile-dispatcher.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 +120 -120
- package/renovate.json +6 -6
- package/src/app-root.ts +1254 -1254
- package/src/collection-browser.ts +3161 -3161
- package/src/data-source/collection-browser-data-source.ts +1465 -1465
- package/src/tiles/item-image.ts +214 -214
- package/src/tiles/tile-display-value-provider.ts +2 -3
- package/test/tiles/grid/item-tile.test.ts +2 -2
- package/test/tiles/list/tile-list.test.ts +2 -2
- package/test/tiles/tile-dispatcher.test.ts +20 -0
- package/tsconfig.json +25 -25
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +52 -52
|
@@ -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';\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"]}
|
|
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://example.com/',\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://example.com/',\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"]}
|
|
@@ -405,11 +405,11 @@ describe('List Tile', () => {
|
|
|
405
405
|
expect(captureDatesUl?.children.length).to.equal(2);
|
|
406
406
|
const firstDateLink = captureDatesUl?.children[0]?.querySelector('a[href]');
|
|
407
407
|
expect(firstDateLink, 'first date link').to.exist;
|
|
408
|
-
expect(firstDateLink?.getAttribute('href')).to.equal('https://web.archive.org/web/20100102123456/https
|
|
408
|
+
expect(firstDateLink?.getAttribute('href')).to.equal('https://web.archive.org/web/20100102123456/https://example.com/');
|
|
409
409
|
expect(firstDateLink?.textContent?.trim()).to.equal('Jan 02, 2010');
|
|
410
410
|
const secondDateLink = captureDatesUl?.children[1]?.querySelector('a[href]');
|
|
411
411
|
expect(secondDateLink, 'second date link').to.exist;
|
|
412
|
-
expect(secondDateLink?.getAttribute('href')).to.equal('https://web.archive.org/web/20110203124321/https
|
|
412
|
+
expect(secondDateLink?.getAttribute('href')).to.equal('https://web.archive.org/web/20110203124321/https://example.com/');
|
|
413
413
|
expect(secondDateLink?.textContent?.trim()).to.equal('Feb 03, 2011');
|
|
414
414
|
});
|
|
415
415
|
it('should not render web captures if no title is present', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-list.test.js","sourceRoot":"","sources":["../../../../test/tiles/list/tile-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { TileList } from '../../../src/tiles/list/tile-list';\n\nimport '../../../src/tiles/list/tile-list';\nimport type { TileModel } from '../../../src/models';\n\ndescribe('List Tile', () => {\n it('should render initial component', async () => {\n const el = await fixture<TileList>(\n html`<tile-list .model=${{}}></tile-list>`,\n );\n\n const listContainer = el.shadowRoot?.querySelector('#list-line');\n const itemTitle = el.shadowRoot?.querySelector('#title');\n const imageBlock = el.shadowRoot?.querySelector('image-block');\n\n expect(listContainer).to.exist;\n expect(itemTitle).to.exist;\n expect(imageBlock).to.exist;\n });\n\n it('should render the mobile template if below mobile breakpoint', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .mobileBreakpoint=${500} .currentWidth=${400}> </tile-list>\n `);\n\n const listContainer = el.shadowRoot?.getElementById('list-line');\n const topLine = el.shadowRoot?.getElementById('list-line-top');\n const bottomLine = el.shadowRoot?.getElementById('list-line-bottom');\n\n expect(listContainer).to.exist;\n expect(listContainer?.classList.contains('mobile')).to.be.true;\n expect(topLine).to.exist;\n expect(bottomLine).to.exist;\n });\n\n it('should render title link with model href if provided', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${''}\n .model=${{ title: 'foo', href: '/foo/bar' }}\n ></tile-list>\n `);\n\n const title = el.shadowRoot?.querySelector('#title > a');\n\n expect(title).to.exist;\n expect(title?.getAttribute('href')).to.equal('/foo/bar');\n });\n\n it('should add title to image link if provided', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${''}\n .model=${{ title: 'foo', href: '/foo/bar' }}\n ></tile-list>\n `);\n\n const imageLink = el.shadowRoot?.querySelector('#image-link');\n\n expect(imageLink).to.exist;\n expect(imageLink?.getAttribute('title')).to.equal('View foo');\n });\n\n it('should render with creator element but not dates', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ creators: ['someone'] }}></tile-list>\n `);\n\n const creator = el.shadowRoot?.querySelector('#creator');\n const datesLine = el.shadowRoot?.querySelector('#dates-line');\n\n expect(creator).to.exist;\n expect(datesLine?.children.length).to.equal(0);\n });\n\n it('should render with snippet block when it has snippets', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ snippets: ['some {{{snippet}}} text'] }}>\n </tile-list>\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<TileList>(html`<tile-list></tile-list>`);\n\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\n\n expect(snippetBlock).to.not.exist;\n });\n\n it('should not render suppressed collections', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ collections: ['deemphasize', 'community', 'foo'] }}\n .baseNavigationUrl=${'base'}\n >\n </tile-list>\n `);\n\n const collectionsRow = el.shadowRoot?.getElementById('collections');\n expect(collectionsRow).to.exist;\n\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\n expect(collectionLinks?.length).to.equal(1);\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\n 'base/details/foo',\n );\n });\n\n it('should not render fav- collections', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ collections: ['fav-foo', 'bar'] }}\n .baseNavigationUrl=${'base'}\n >\n </tile-list>\n `);\n\n const collectionsRow = el.shadowRoot?.getElementById('collections');\n expect(collectionsRow).to.exist;\n\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\n expect(collectionLinks?.length).to.equal(1);\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\n 'base/details/bar',\n );\n });\n\n it('should render weekly views when sorting by week', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\n .sortParam=${{ field: 'week', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('Weekly views: 10');\n });\n\n it('should render all-time views when sorting by non-week field', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\n .sortParam=${{ field: 'downloads', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\n });\n\n it('should render all-time views with no sort param', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ viewCount: 50, weeklyViewCount: 10 }}> </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: Jan 02, 2012');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'publicdate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 02, 2011');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'reviewdate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Reviewed: Jan 02, 2013');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n let dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Added: Jan 01, 2010');\n\n el.sortParam = { field: 'publicdate', direction: 'desc' };\n await el.updateComplete;\n dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 01, 2011');\n\n el.sortParam = { field: 'reviewdate', direction: 'desc' };\n await el.updateComplete;\n dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: Feb 15, 2012');\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<TileList>(html`\n <tile-list\n useLocalTime\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n\n expect(dateRow?.textContent?.trim()).to.contain(expected);\n });\n\n it('should render links to /search pages (not search.php) for subject, creator, and source', async () => {\n const model: Partial<TileModel> = {\n subjects: ['foo'],\n creators: ['bar'],\n source: 'baz',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list .model=${model}></tile-list>\n `);\n\n const subjectLink = el.shadowRoot?.querySelector('#topics a[href]');\n expect(subjectLink).to.exist;\n expect(subjectLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('subject:\"foo\"')}`,\n );\n\n const creatorLink = el.shadowRoot?.querySelector('#creator a[href]');\n expect(creatorLink).to.exist;\n expect(creatorLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('creator:\"bar\"')}`,\n );\n\n const sourceLink = el.shadowRoot?.querySelector('#source a[href]');\n expect(sourceLink).to.exist;\n expect(sourceLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('source:\"baz\"')}`,\n );\n });\n\n it('should render multi-line descriptions with spaces b/w lines', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ description: 'line1\\nline2' }}> </tile-list>\n `);\n\n const descriptionBlock = el.shadowRoot?.getElementById('description');\n expect(descriptionBlock).to.exist;\n expect(descriptionBlock?.textContent?.trim()).to.equal('line1 line2'); // line break replaced by space\n });\n\n it('should render mediatype icon as link to corresponding mediatype collection details', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'texts',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(\n `https://archive.org/details/texts`,\n );\n expect(mediatypeLink?.getAttribute('title')).to.equal('See more: texts');\n });\n\n it('should render mediatype icon as link even with empty baseNavigationUrl', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'texts',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list .baseNavigationUrl=${''} .model=${model}></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(`/details/texts`);\n });\n\n it('should render collection mediatype icon as link to search page', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'collection',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(\n `https://archive.org/search?query=mediatype:collection&sort=-downloads`,\n );\n });\n\n it('should not render account mediatype icon as link', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'account',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).not.to.exist;\n });\n\n it('should render date added for accounts', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n mediatype: 'account',\n dateAdded: new Date('2015-05-05T00:00:00'),\n }}\n >\n </tile-list>\n `);\n\n const creatorBlock = el.shadowRoot?.getElementById('creator');\n expect(creatorBlock).to.exist;\n expect(creatorBlock?.textContent?.trim()).to.equal('Archivist since 2015');\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n title: 'https://example.com/',\n captureDates,\n }}\n ></tile-list>\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n captureDates,\n }}\n ></tile-list>\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n review,\n }}\n ></tile-list>\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n }}\n ></tile-list>\n `);\n\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\n expect(reviewBlock).not.to.exist;\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"tile-list.test.js","sourceRoot":"","sources":["../../../../test/tiles/list/tile-list.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { TileList } from '../../../src/tiles/list/tile-list';\n\nimport '../../../src/tiles/list/tile-list';\nimport type { TileModel } from '../../../src/models';\n\ndescribe('List Tile', () => {\n it('should render initial component', async () => {\n const el = await fixture<TileList>(\n html`<tile-list .model=${{}}></tile-list>`,\n );\n\n const listContainer = el.shadowRoot?.querySelector('#list-line');\n const itemTitle = el.shadowRoot?.querySelector('#title');\n const imageBlock = el.shadowRoot?.querySelector('image-block');\n\n expect(listContainer).to.exist;\n expect(itemTitle).to.exist;\n expect(imageBlock).to.exist;\n });\n\n it('should render the mobile template if below mobile breakpoint', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .mobileBreakpoint=${500} .currentWidth=${400}> </tile-list>\n `);\n\n const listContainer = el.shadowRoot?.getElementById('list-line');\n const topLine = el.shadowRoot?.getElementById('list-line-top');\n const bottomLine = el.shadowRoot?.getElementById('list-line-bottom');\n\n expect(listContainer).to.exist;\n expect(listContainer?.classList.contains('mobile')).to.be.true;\n expect(topLine).to.exist;\n expect(bottomLine).to.exist;\n });\n\n it('should render title link with model href if provided', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${''}\n .model=${{ title: 'foo', href: '/foo/bar' }}\n ></tile-list>\n `);\n\n const title = el.shadowRoot?.querySelector('#title > a');\n\n expect(title).to.exist;\n expect(title?.getAttribute('href')).to.equal('/foo/bar');\n });\n\n it('should add title to image link if provided', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${''}\n .model=${{ title: 'foo', href: '/foo/bar' }}\n ></tile-list>\n `);\n\n const imageLink = el.shadowRoot?.querySelector('#image-link');\n\n expect(imageLink).to.exist;\n expect(imageLink?.getAttribute('title')).to.equal('View foo');\n });\n\n it('should render with creator element but not dates', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ creators: ['someone'] }}></tile-list>\n `);\n\n const creator = el.shadowRoot?.querySelector('#creator');\n const datesLine = el.shadowRoot?.querySelector('#dates-line');\n\n expect(creator).to.exist;\n expect(datesLine?.children.length).to.equal(0);\n });\n\n it('should render with snippet block when it has snippets', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ snippets: ['some {{{snippet}}} text'] }}>\n </tile-list>\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<TileList>(html`<tile-list></tile-list>`);\n\n const snippetBlock = el.shadowRoot?.querySelector('text-snippet-block');\n\n expect(snippetBlock).to.not.exist;\n });\n\n it('should not render suppressed collections', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ collections: ['deemphasize', 'community', 'foo'] }}\n .baseNavigationUrl=${'base'}\n >\n </tile-list>\n `);\n\n const collectionsRow = el.shadowRoot?.getElementById('collections');\n expect(collectionsRow).to.exist;\n\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\n expect(collectionLinks?.length).to.equal(1);\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\n 'base/details/foo',\n );\n });\n\n it('should not render fav- collections', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ collections: ['fav-foo', 'bar'] }}\n .baseNavigationUrl=${'base'}\n >\n </tile-list>\n `);\n\n const collectionsRow = el.shadowRoot?.getElementById('collections');\n expect(collectionsRow).to.exist;\n\n const collectionLinks = collectionsRow?.querySelectorAll('a[href]');\n expect(collectionLinks?.length).to.equal(1);\n expect(collectionLinks?.item(0).getAttribute('href')).to.equal(\n 'base/details/bar',\n );\n });\n\n it('should render weekly views when sorting by week', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\n .sortParam=${{ field: 'week', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('Weekly views: 10');\n });\n\n it('should render all-time views when sorting by non-week field', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{ viewCount: 50, weeklyViewCount: 10 }}\n .sortParam=${{ field: 'downloads', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\n });\n\n it('should render all-time views with no sort param', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ viewCount: 50, weeklyViewCount: 10 }}> </tile-list>\n `);\n\n const viewsRow = el.shadowRoot?.getElementById('views-line');\n expect(viewsRow).to.exist;\n expect(viewsRow?.textContent?.trim()).to.equal('All-time views: 50');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: Jan 02, 2012');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'publicdate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 02, 2011');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'reviewdate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Reviewed: Jan 02, 2013');\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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'addeddate', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n let dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Added: Jan 01, 2010');\n\n el.sortParam = { field: 'publicdate', direction: 'desc' };\n await el.updateComplete;\n dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Archived: Jan 01, 2011');\n\n el.sortParam = { field: 'reviewdate', direction: 'desc' };\n await el.updateComplete;\n dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('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<TileList>(html`\n <tile-list\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n expect(dateRow?.textContent?.trim()).to.contain('Published: Feb 15, 2012');\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<TileList>(html`\n <tile-list\n useLocalTime\n .model=${model}\n .sortParam=${{ field: 'date', direction: 'desc' }}\n >\n </tile-list>\n `);\n\n const dateRow = el.shadowRoot?.getElementById('dates-line');\n expect(dateRow).to.exist;\n\n expect(dateRow?.textContent?.trim()).to.contain(expected);\n });\n\n it('should render links to /search pages (not search.php) for subject, creator, and source', async () => {\n const model: Partial<TileModel> = {\n subjects: ['foo'],\n creators: ['bar'],\n source: 'baz',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list .model=${model}></tile-list>\n `);\n\n const subjectLink = el.shadowRoot?.querySelector('#topics a[href]');\n expect(subjectLink).to.exist;\n expect(subjectLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('subject:\"foo\"')}`,\n );\n\n const creatorLink = el.shadowRoot?.querySelector('#creator a[href]');\n expect(creatorLink).to.exist;\n expect(creatorLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('creator:\"bar\"')}`,\n );\n\n const sourceLink = el.shadowRoot?.querySelector('#source a[href]');\n expect(sourceLink).to.exist;\n expect(sourceLink?.getAttribute('href')).to.equal(\n `/search?query=${encodeURIComponent('source:\"baz\"')}`,\n );\n });\n\n it('should render multi-line descriptions with spaces b/w lines', async () => {\n const el = await fixture<TileList>(html`\n <tile-list .model=${{ description: 'line1\\nline2' }}> </tile-list>\n `);\n\n const descriptionBlock = el.shadowRoot?.getElementById('description');\n expect(descriptionBlock).to.exist;\n expect(descriptionBlock?.textContent?.trim()).to.equal('line1 line2'); // line break replaced by space\n });\n\n it('should render mediatype icon as link to corresponding mediatype collection details', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'texts',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(\n `https://archive.org/details/texts`,\n );\n expect(mediatypeLink?.getAttribute('title')).to.equal('See more: texts');\n });\n\n it('should render mediatype icon as link even with empty baseNavigationUrl', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'texts',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list .baseNavigationUrl=${''} .model=${model}></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(`/details/texts`);\n });\n\n it('should render collection mediatype icon as link to search page', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'collection',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).to.equal(\n `https://archive.org/search?query=mediatype:collection&sort=-downloads`,\n );\n });\n\n it('should not render account mediatype icon as link', async () => {\n const model: Partial<TileModel> = {\n mediatype: 'account',\n };\n\n const el = await fixture<TileList>(html`\n <tile-list\n .baseNavigationUrl=${'https://archive.org'}\n .model=${model}\n ></tile-list>\n `);\n\n const mediatypeLink = el.shadowRoot?.querySelector('a#icon-right');\n expect(mediatypeLink).to.exist;\n expect(mediatypeLink?.getAttribute('href')).not.to.exist;\n });\n\n it('should render date added for accounts', async () => {\n const el = await fixture<TileList>(html`\n <tile-list\n .model=${{\n mediatype: 'account',\n dateAdded: new Date('2015-05-05T00:00:00'),\n }}\n >\n </tile-list>\n `);\n\n const creatorBlock = el.shadowRoot?.getElementById('creator');\n expect(creatorBlock).to.exist;\n expect(creatorBlock?.textContent?.trim()).to.equal('Archivist since 2015');\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n title: 'https://example.com/',\n captureDates,\n }}\n ></tile-list>\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://example.com/',\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://example.com/',\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n captureDates,\n }}\n ></tile-list>\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n review,\n }}\n ></tile-list>\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<TileList>(html`\n <tile-list\n .model=${{\n identifier: 'foo',\n }}\n ></tile-list>\n `);\n\n const reviewBlock = el.shadowRoot?.querySelector('review-block');\n expect(reviewBlock).not.to.exist;\n });\n});\n"]}
|
|
@@ -85,6 +85,20 @@ describe('Tile Dispatcher', () => {
|
|
|
85
85
|
expect(spy.args[0][1]).to.equal('_blank');
|
|
86
86
|
window.open = oldWindowOpen;
|
|
87
87
|
});
|
|
88
|
+
it('should use model href as link href', async () => {
|
|
89
|
+
const el = await fixture(html `
|
|
90
|
+
<tile-dispatcher
|
|
91
|
+
.model=${{
|
|
92
|
+
identifier: 'foo',
|
|
93
|
+
href: 'https://web.archive.org/web/20180613065659/http://www.sankei.com/',
|
|
94
|
+
}}
|
|
95
|
+
.baseNavigationUrl=${''}
|
|
96
|
+
></tile-dispatcher>
|
|
97
|
+
`);
|
|
98
|
+
const tileLink = el.shadowRoot?.querySelector('a[href]');
|
|
99
|
+
expect(tileLink).to.exist;
|
|
100
|
+
expect(tileLink.getAttribute('href')).to.equal('https://web.archive.org/web/20180613065659/http://www.sankei.com/');
|
|
101
|
+
});
|
|
88
102
|
it('should toggle model checked state when manage check clicked', async () => {
|
|
89
103
|
const el = await fixture(html `
|
|
90
104
|
<tile-dispatcher
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-dispatcher.test.js","sourceRoot":"","sources":["../../../test/tiles/tile-dispatcher.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { aTimeout, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { TileDispatcher } from '../../src/tiles/tile-dispatcher';\n\nimport '../../src/tiles/tile-dispatcher';\nimport type { ItemTile } from '../../src/tiles/grid/item-tile';\nimport { TileHoverPane } from '../../src/tiles/hover/tile-hover-pane';\nimport type { HoverPaneProperties } from '../../src/tiles/hover/hover-pane-controller';\n\ndescribe('Tile Dispatcher', () => {\n it('should render item-tile for grid mode by default', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile');\n expect(itemTile).to.exist;\n });\n\n it('should render collection-tile for grid mode and collection mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'collection' }}\n >\n </tile-dispatcher>\n `);\n\n const collectionTile = el.shadowRoot?.querySelector('collection-tile');\n expect(collectionTile).to.exist;\n });\n\n it('should render account-tile for grid mode and account mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'account' }}\n >\n </tile-dispatcher>\n `);\n\n const accountTile = el.shadowRoot?.querySelector('account-tile');\n expect(accountTile).to.exist;\n });\n\n it('should render search-tile for grid mode and search mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'search' }}\n >\n </tile-dispatcher>\n `);\n\n const searchTile = el.shadowRoot?.querySelector('search-tile');\n expect(searchTile).to.exist;\n });\n\n it('should render tile-list for extended list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'list-detail'} .model=${{}}>\n </tile-dispatcher>\n `);\n\n const listTile = el.shadowRoot?.querySelector('tile-list');\n expect(listTile).to.exist;\n });\n\n it('should render tile-list-compact for compact list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'list-compact'} .model=${{}}>\n </tile-dispatcher>\n `);\n\n const compactListTile = el.shadowRoot?.querySelector('tile-list-compact');\n expect(compactListTile).to.exist;\n });\n\n it('should open item in new tab when right-clicked in manage mode', async () => {\n const oldWindowOpen = window.open;\n const spy = sinon.spy();\n window.open = spy;\n\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n isManageView\n .model=${{ identifier: 'foo', href: '/foo' }}\n .baseNavigationUrl=${''}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n 'a[href]',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n tileLink.dispatchEvent(new Event('contextmenu'));\n await el.updateComplete;\n\n expect(spy.callCount).to.equal(1);\n expect(spy.args[0][0]).to.equal('/foo');\n expect(spy.args[0][1]).to.equal('_blank');\n\n window.open = oldWindowOpen;\n });\n\n it('should toggle model checked state when manage check clicked', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n isManageView\n .model=${{ identifier: 'foo', href: '/foo' }}\n .tileDisplayMode=${'grid'}\n ></tile-dispatcher>\n `);\n\n const manageCheck = el.shadowRoot?.querySelector(\n '.manage-check > input[type=\"checkbox\"]',\n ) as HTMLButtonElement;\n\n manageCheck.click();\n await el.updateComplete;\n expect(el.model?.checked).to.be.true;\n\n manageCheck.click();\n await el.updateComplete;\n expect(el.model?.checked).to.be.false;\n });\n\n it('should return hover pane props', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .model=${{ identifier: 'foo' }}> </tile-dispatcher>\n `);\n\n expect(el.getHoverPaneProps()).to.satisfy(\n (props: HoverPaneProperties) => props?.model?.identifier === 'foo',\n );\n });\n\n it('should focus the tile link when requested', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n const spyFocus = sinon.spy(tileLink, 'focus');\n el.acquireFocus();\n expect(spyFocus.callCount).to.equal(1);\n });\n\n it('should blur the tile link when requested', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n const spyBlur = sinon.spy(tileLink, 'blur');\n el.releaseFocus();\n expect(spyBlur.callCount).to.equal(1);\n });\n\n describe('Hover pane info button behavior', () => {\n let oldMatchMedia: typeof window.matchMedia;\n\n before(() => {\n oldMatchMedia = window.matchMedia;\n // Pretend that there is no hover-capable input device\n window.matchMedia = () => ({ matches: false }) as MediaQueryList;\n });\n\n after(() => {\n window.matchMedia = oldMatchMedia;\n });\n\n it('should toggle hover pane when tile info button is pressed', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n .enableHoverPane=${true}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\n expect(itemTile).to.exist;\n\n const infoButton = itemTile.shadowRoot?.querySelector(\n '.info-button',\n ) as HTMLButtonElement;\n expect(infoButton).to.exist;\n\n infoButton.click();\n await aTimeout(500);\n await el.updateComplete;\n expect(el.getHoverPane()).to.be.instanceOf(TileHoverPane);\n\n infoButton.click();\n await aTimeout(500);\n await el.updateComplete;\n expect(el.getHoverPane()).not.to.exist;\n });\n\n it('should not show info button when hover pane is not enabled', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n .enableHoverPane=${false}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\n expect(itemTile).to.exist;\n\n const infoButton = itemTile.shadowRoot?.querySelector('.info-button');\n expect(infoButton).to.not.exist;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper aria-label on tile link', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n title: 'Example Title',\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('aria-label')).to.equal('Example Title');\n });\n\n it('should fallback to untitled aria-label on tile link when no title', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('aria-label')).to.equal('Untitled item');\n });\n\n it('should have no accessibility violations in grid mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n title: 'Example Title',\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n await expect(el).to.be.accessible();\n });\n\n it('should have no accessibility violations in list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'list-detail'}\n .model=${{ mediatype: 'texts' }}\n >\n </tile-dispatcher>\n `);\n\n await expect(el).to.be.accessible();\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"tile-dispatcher.test.js","sourceRoot":"","sources":["../../../test/tiles/tile-dispatcher.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { aTimeout, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { TileDispatcher } from '../../src/tiles/tile-dispatcher';\n\nimport '../../src/tiles/tile-dispatcher';\nimport type { ItemTile } from '../../src/tiles/grid/item-tile';\nimport { TileHoverPane } from '../../src/tiles/hover/tile-hover-pane';\nimport type { HoverPaneProperties } from '../../src/tiles/hover/hover-pane-controller';\n\ndescribe('Tile Dispatcher', () => {\n it('should render item-tile for grid mode by default', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile');\n expect(itemTile).to.exist;\n });\n\n it('should render collection-tile for grid mode and collection mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'collection' }}\n >\n </tile-dispatcher>\n `);\n\n const collectionTile = el.shadowRoot?.querySelector('collection-tile');\n expect(collectionTile).to.exist;\n });\n\n it('should render account-tile for grid mode and account mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'account' }}\n >\n </tile-dispatcher>\n `);\n\n const accountTile = el.shadowRoot?.querySelector('account-tile');\n expect(accountTile).to.exist;\n });\n\n it('should render search-tile for grid mode and search mediatype', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'search' }}\n >\n </tile-dispatcher>\n `);\n\n const searchTile = el.shadowRoot?.querySelector('search-tile');\n expect(searchTile).to.exist;\n });\n\n it('should render tile-list for extended list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'list-detail'} .model=${{}}>\n </tile-dispatcher>\n `);\n\n const listTile = el.shadowRoot?.querySelector('tile-list');\n expect(listTile).to.exist;\n });\n\n it('should render tile-list-compact for compact list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'list-compact'} .model=${{}}>\n </tile-dispatcher>\n `);\n\n const compactListTile = el.shadowRoot?.querySelector('tile-list-compact');\n expect(compactListTile).to.exist;\n });\n\n it('should open item in new tab when right-clicked in manage mode', async () => {\n const oldWindowOpen = window.open;\n const spy = sinon.spy();\n window.open = spy;\n\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n isManageView\n .model=${{ identifier: 'foo', href: '/foo' }}\n .baseNavigationUrl=${''}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n 'a[href]',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n tileLink.dispatchEvent(new Event('contextmenu'));\n await el.updateComplete;\n\n expect(spy.callCount).to.equal(1);\n expect(spy.args[0][0]).to.equal('/foo');\n expect(spy.args[0][1]).to.equal('_blank');\n\n window.open = oldWindowOpen;\n });\n\n it('should use model href as link href', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .model=${{\n identifier: 'foo',\n href: 'https://web.archive.org/web/20180613065659/http://www.sankei.com/',\n }}\n .baseNavigationUrl=${''}\n ></tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n 'a[href]',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('href')).to.equal(\n 'https://web.archive.org/web/20180613065659/http://www.sankei.com/',\n );\n });\n\n it('should toggle model checked state when manage check clicked', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n isManageView\n .model=${{ identifier: 'foo', href: '/foo' }}\n .tileDisplayMode=${'grid'}\n ></tile-dispatcher>\n `);\n\n const manageCheck = el.shadowRoot?.querySelector(\n '.manage-check > input[type=\"checkbox\"]',\n ) as HTMLButtonElement;\n\n manageCheck.click();\n await el.updateComplete;\n expect(el.model?.checked).to.be.true;\n\n manageCheck.click();\n await el.updateComplete;\n expect(el.model?.checked).to.be.false;\n });\n\n it('should return hover pane props', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .model=${{ identifier: 'foo' }}> </tile-dispatcher>\n `);\n\n expect(el.getHoverPaneProps()).to.satisfy(\n (props: HoverPaneProperties) => props?.model?.identifier === 'foo',\n );\n });\n\n it('should focus the tile link when requested', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n const spyFocus = sinon.spy(tileLink, 'focus');\n el.acquireFocus();\n expect(spyFocus.callCount).to.equal(1);\n });\n\n it('should blur the tile link when requested', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher .tileDisplayMode=${'grid'}> </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n\n const spyBlur = sinon.spy(tileLink, 'blur');\n el.releaseFocus();\n expect(spyBlur.callCount).to.equal(1);\n });\n\n describe('Hover pane info button behavior', () => {\n let oldMatchMedia: typeof window.matchMedia;\n\n before(() => {\n oldMatchMedia = window.matchMedia;\n // Pretend that there is no hover-capable input device\n window.matchMedia = () => ({ matches: false }) as MediaQueryList;\n });\n\n after(() => {\n window.matchMedia = oldMatchMedia;\n });\n\n it('should toggle hover pane when tile info button is pressed', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n .enableHoverPane=${true}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\n expect(itemTile).to.exist;\n\n const infoButton = itemTile.shadowRoot?.querySelector(\n '.info-button',\n ) as HTMLButtonElement;\n expect(infoButton).to.exist;\n\n infoButton.click();\n await aTimeout(500);\n await el.updateComplete;\n expect(el.getHoverPane()).to.be.instanceOf(TileHoverPane);\n\n infoButton.click();\n await aTimeout(500);\n await el.updateComplete;\n expect(el.getHoverPane()).not.to.exist;\n });\n\n it('should not show info button when hover pane is not enabled', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{ mediatype: 'texts' }}\n .enableHoverPane=${false}\n >\n </tile-dispatcher>\n `);\n\n const itemTile = el.shadowRoot?.querySelector('item-tile') as ItemTile;\n expect(itemTile).to.exist;\n\n const infoButton = itemTile.shadowRoot?.querySelector('.info-button');\n expect(infoButton).to.not.exist;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper aria-label on tile link', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n title: 'Example Title',\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('aria-label')).to.equal('Example Title');\n });\n\n it('should fallback to untitled aria-label on tile link when no title', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n const tileLink = el.shadowRoot?.querySelector(\n '.tile-link',\n ) as HTMLAnchorElement;\n expect(tileLink).to.exist;\n expect(tileLink.getAttribute('aria-label')).to.equal('Untitled item');\n });\n\n it('should have no accessibility violations in grid mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'grid'}\n .model=${{\n title: 'Example Title',\n mediatype: 'texts',\n }}\n >\n </tile-dispatcher>\n `);\n\n await expect(el).to.be.accessible();\n });\n\n it('should have no accessibility violations in list mode', async () => {\n const el = await fixture<TileDispatcher>(html`\n <tile-dispatcher\n .tileDisplayMode=${'list-detail'}\n .model=${{ mediatype: 'texts' }}\n >\n </tile-dispatcher>\n `);\n\n await expect(el).to.be.accessible();\n });\n });\n});\n"]}
|
package/eslint.config.mjs
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
2
|
-
import html from 'eslint-plugin-html';
|
|
3
|
-
import tsParser from '@typescript-eslint/parser';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import js from '@eslint/js';
|
|
7
|
-
import { FlatCompat } from '@eslint/eslintrc';
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = path.dirname(__filename);
|
|
11
|
-
const compat = new FlatCompat({
|
|
12
|
-
baseDirectory: __dirname,
|
|
13
|
-
recommendedConfig: js.configs.recommended,
|
|
14
|
-
allConfig: js.configs.all,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
export default [
|
|
18
|
-
...compat.extends('plugin:@typescript-eslint/recommended'),
|
|
19
|
-
{
|
|
20
|
-
plugins: {
|
|
21
|
-
'@typescript-eslint': typescriptEslint,
|
|
22
|
-
html,
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
languageOptions: {
|
|
26
|
-
parser: tsParser,
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
settings: {
|
|
30
|
-
'import/resolver': {
|
|
31
|
-
node: {
|
|
32
|
-
extensions: ['.ts', '.tsx'],
|
|
33
|
-
moduleDirectory: ['node_modules', 'src', 'demo'],
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
rules: {
|
|
39
|
-
'@typescript-eslint/no-unsafe-function-type': 'warn',
|
|
40
|
-
'@typescript-eslint/no-unused-vars': 'warn',
|
|
41
|
-
'@typescript-eslint/no-explicit-any': 'warn',
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
files: ['**/*.test.ts'],
|
|
49
|
-
rules: {
|
|
50
|
-
'@typescript-eslint/no-unused-expressions': 'off',
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
];
|
|
1
|
+
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
2
|
+
import html from 'eslint-plugin-html';
|
|
3
|
+
import tsParser from '@typescript-eslint/parser';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import js from '@eslint/js';
|
|
7
|
+
import { FlatCompat } from '@eslint/eslintrc';
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
const compat = new FlatCompat({
|
|
12
|
+
baseDirectory: __dirname,
|
|
13
|
+
recommendedConfig: js.configs.recommended,
|
|
14
|
+
allConfig: js.configs.all,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export default [
|
|
18
|
+
...compat.extends('plugin:@typescript-eslint/recommended'),
|
|
19
|
+
{
|
|
20
|
+
plugins: {
|
|
21
|
+
'@typescript-eslint': typescriptEslint,
|
|
22
|
+
html,
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
languageOptions: {
|
|
26
|
+
parser: tsParser,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
settings: {
|
|
30
|
+
'import/resolver': {
|
|
31
|
+
node: {
|
|
32
|
+
extensions: ['.ts', '.tsx'],
|
|
33
|
+
moduleDirectory: ['node_modules', 'src', 'demo'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
rules: {
|
|
39
|
+
'@typescript-eslint/no-unsafe-function-type': 'warn',
|
|
40
|
+
'@typescript-eslint/no-unused-vars': 'warn',
|
|
41
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
files: ['**/*.test.ts'],
|
|
49
|
+
rules: {
|
|
50
|
+
'@typescript-eslint/no-unused-expressions': 'off',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
];
|