@internetarchive/collection-browser 0.4.16-alpha.9 → 0.4.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/src/app-root.js +12 -0
  2. package/dist/src/app-root.js.map +1 -1
  3. package/dist/src/collection-browser.d.ts +53 -14
  4. package/dist/src/collection-browser.js +279 -113
  5. package/dist/src/collection-browser.js.map +1 -1
  6. package/dist/src/collection-facets/facets-template.d.ts +3 -0
  7. package/dist/src/collection-facets/facets-template.js +20 -1
  8. package/dist/src/collection-facets/facets-template.js.map +1 -1
  9. package/dist/src/collection-facets/more-facets-content.js +7 -4
  10. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  11. package/dist/src/collection-facets.d.ts +0 -2
  12. package/dist/src/collection-facets.js +1 -4
  13. package/dist/src/collection-facets.js.map +1 -1
  14. package/dist/src/empty-placeholder.js +1 -0
  15. package/dist/src/empty-placeholder.js.map +1 -1
  16. package/dist/src/models.d.ts +5 -0
  17. package/dist/src/models.js.map +1 -1
  18. package/dist/src/tiles/grid/item-tile.js +10 -3
  19. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  20. package/dist/src/tiles/list/tile-list-compact.d.ts +1 -0
  21. package/dist/src/tiles/list/tile-list-compact.js +13 -1
  22. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  23. package/dist/src/tiles/list/tile-list.js +10 -1
  24. package/dist/src/tiles/list/tile-list.js.map +1 -1
  25. package/dist/src/utils/format-date.d.ts +1 -1
  26. package/dist/src/utils/format-date.js +3 -0
  27. package/dist/src/utils/format-date.js.map +1 -1
  28. package/dist/src/utils/local-date-from-utc.d.ts +9 -0
  29. package/dist/src/utils/local-date-from-utc.js +16 -0
  30. package/dist/src/utils/local-date-from-utc.js.map +1 -0
  31. package/dist/test/collection-browser.test.js +73 -10
  32. package/dist/test/collection-browser.test.js.map +1 -1
  33. package/dist/test/collection-facets/facets-template.test.js +80 -0
  34. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  35. package/dist/test/mocks/mock-collection-name-cache.d.ts +2 -0
  36. package/dist/test/mocks/mock-collection-name-cache.js +4 -0
  37. package/dist/test/mocks/mock-collection-name-cache.js.map +1 -1
  38. package/dist/test/mocks/mock-search-responses.d.ts +2 -0
  39. package/dist/test/mocks/mock-search-responses.js +81 -0
  40. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  41. package/dist/test/mocks/mock-search-service.js +3 -1
  42. package/dist/test/mocks/mock-search-service.js.map +1 -1
  43. package/dist/test/tiles/grid/item-tile.test.js +124 -3
  44. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  45. package/dist/test/tiles/list/tile-list-compact.test.js +65 -20
  46. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  47. package/dist/test/tiles/list/tile-list.test.js +106 -4
  48. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  49. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -0
  50. package/dist/test/utils/local-date-from-utc.test.js +27 -0
  51. package/dist/test/utils/local-date-from-utc.test.js.map +1 -0
  52. package/index.html +1 -0
  53. package/package.json +3 -3
  54. package/src/app-root.ts +12 -0
  55. package/src/collection-browser.ts +311 -114
  56. package/src/collection-facets/facets-template.ts +32 -1
  57. package/src/collection-facets/more-facets-content.ts +4 -1
  58. package/src/collection-facets.ts +1 -8
  59. package/src/empty-placeholder.ts +1 -0
  60. package/src/models.ts +6 -0
  61. package/src/tiles/grid/item-tile.ts +11 -4
  62. package/src/tiles/list/tile-list-compact.ts +16 -2
  63. package/src/tiles/list/tile-list.ts +12 -5
  64. package/src/utils/format-date.ts +4 -0
  65. package/src/utils/local-date-from-utc.ts +15 -0
  66. package/test/collection-browser.test.ts +101 -12
  67. package/test/collection-facets/facets-template.test.ts +98 -0
  68. package/test/mocks/mock-collection-name-cache.ts +8 -0
  69. package/test/mocks/mock-search-responses.ts +89 -0
  70. package/test/mocks/mock-search-service.ts +4 -0
  71. package/test/tiles/grid/item-tile.test.ts +145 -3
  72. package/test/tiles/list/tile-list-compact.test.ts +70 -19
  73. package/test/tiles/list/tile-list.test.ts +118 -4
  74. package/test/utils/local-date-from-utc.test.ts +37 -0
@@ -1 +1 @@
1
- {"version":3,"file":"collection-browser.test.js","sourceRoot":"","sources":["../../test/collection-browser.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { aTimeout, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { InfiniteScroller } from '@internetarchive/infinite-scroller';\nimport { SearchType } from '@internetarchive/search-service';\nimport type { HistogramDateRange } from '@internetarchive/histogram-date-range';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\nimport {\n getDefaultSelectedFacets,\n FacetBucket,\n SelectedFacets,\n SortField,\n} from '../src/models';\nimport { MockSearchService } from './mocks/mock-search-service';\nimport { MockCollectionNameCache } from './mocks/mock-collection-name-cache';\nimport { MockAnalyticsHandler } from './mocks/mock-analytics-handler';\nimport { analyticsCategories } from '../src/utils/analytics-events';\nimport type { TileDispatcher } from '../src/tiles/tile-dispatcher';\nimport type { CollectionFacets } from '../src/collection-facets';\nimport type { EmptyPlaceholder } from '../src/empty-placeholder';\n\n/**\n * Wait for the next tick of the event loop.\n *\n * This is necessary in some of the tests because certain collection browser\n * updates take more than one tick to render (e.g., date picker & query changes).\n * These delays are non-ideal and should eventually be investigated and fixed,\n * but they are minor enough that waiting for the next tick is a reasonable\n * testing solution for now.\n */\nconst nextTick = () => aTimeout(0);\n\ndescribe('Collection Browser', () => {\n beforeEach(async () => {\n // Apparently query params set by one test can bleed into other tests.\n // Since collection browser restores its state from certain query params, we need\n // to clear these before each test to ensure they run in isolation from one another.\n const url = new URL(window.location.href);\n const { searchParams } = url;\n searchParams.delete('sin');\n searchParams.delete('sort');\n searchParams.delete('query');\n searchParams.delete('page');\n searchParams.delete('and[]');\n searchParams.delete('not[]');\n window.history.replaceState({}, '', url);\n });\n\n it('clears selected facets when requested', async () => {\n const selectedFacets = getDefaultSelectedFacets();\n selectedFacets.creator.foo = { count: 1, key: 'foo', state: 'selected' };\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n el.clearFilters(); // By default, sort is not cleared\n\n expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());\n });\n\n it('clears existing filters but not sort by default', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n await el.updateComplete;\n el.clearFilters(); // By default, sort is not cleared\n\n expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());\n expect(el.selectedSort).to.equal('title');\n expect(el.sortDirection).to.equal('asc');\n expect(el.sortParam).to.deep.equal({\n field: 'titleSorter',\n direction: 'asc',\n });\n expect(el.selectedCreatorFilter).to.be.null;\n expect(el.selectedTitleFilter).to.be.null;\n });\n\n it('clears existing filters for facets & sort via option', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.selectedSort = 'title' as SortField;\n await el.updateComplete;\n el.clearFilters({ sort: true }); // Sort is reset too due to the option\n\n expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());\n expect(el.selectedSort).to.equal('relevance');\n expect(el.sortDirection).to.be.null;\n expect(el.sortParam).to.be.null;\n expect(el.selectedCreatorFilter).to.be.null;\n expect(el.selectedTitleFilter).to.be.null;\n });\n\n it('filterBy creator with analytics', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'betaSearchService';\n el.selectedSort = 'creator' as SortField;\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'A';\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');\n expect(mockAnalyticsHandler.callLabel).to.equal('start-A');\n\n el.clearFilters();\n await el.updateComplete;\n\n expect(el.selectedTitleFilter).to.be.null;\n expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');\n expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');\n });\n\n it('filterBy title with analytics', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'beta-search-service';\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n el.selectedTitleFilter = 'A';\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');\n expect(mockAnalyticsHandler.callLabel).to.equal('start-A');\n\n el.clearFilters();\n await el.updateComplete;\n\n expect(el.selectedTitleFilter).to.be.null;\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');\n expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');\n });\n\n it('selected facets with analytics - not negative facets', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const mediaTypeBucket = { count: 123, state: 'selected' } as FacetBucket;\n const mockedSelectedFacets: SelectedFacets = {\n subject: {},\n lending: {},\n mediatype: { data: mediaTypeBucket },\n language: {},\n creator: {},\n collection: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'search-service';\n el.selectedFacets = mockedSelectedFacets;\n await el.updateComplete;\n\n el.facetClickHandler('mediatype', true, false);\n expect(mockAnalyticsHandler.callCategory).to.equal('search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n\n el.facetClickHandler('mediatype', false, false);\n expect(el.selectedFacets).to.equal(mockedSelectedFacets);\n expect(mockAnalyticsHandler.callCategory).to.equal('search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n });\n\n it('selected facets with analytics - negative facets', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const mediaTypeBucket = { count: 123, state: 'selected' } as FacetBucket;\n const mockedSelectedFacets: SelectedFacets = {\n subject: {},\n lending: {},\n mediatype: { data: mediaTypeBucket },\n language: {},\n creator: {},\n collection: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'beta-search-service';\n el.selectedFacets = mockedSelectedFacets;\n await el.updateComplete;\n\n el.facetClickHandler('mediatype', true, true);\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n\n el.facetClickHandler('mediatype', false, true);\n expect(el.selectedFacets).to.equal(mockedSelectedFacets);\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n });\n\n it('should render with a sort bar, facets, and infinite scroller', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'hello';\n await el.updateComplete;\n\n const facets = el.shadowRoot?.querySelector('collection-facets');\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n expect(facets).to.exist;\n expect(sortBar).to.exist;\n expect(infiniteScroller).to.exist;\n });\n\n it('queries the search service when given a base query', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Results');\n });\n\n it('queries the search service with a metadata search', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html` <collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.searchType = SearchType.METADATA;\n await el.updateComplete;\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchType).to.equal(SearchType.METADATA);\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Results');\n });\n\n it('can change search type', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('queries the search service with a fulltext search', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html` <collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Results');\n });\n\n it('queries the search service with facets selected/negated', async () => {\n const searchService = new MockSearchService();\n const selectedFacets: SelectedFacets = {\n subject: {\n foo: {\n key: 'foo',\n count: 1,\n state: 'selected',\n },\n bar: {\n key: 'bar',\n count: 2,\n state: 'hidden',\n },\n },\n lending: {},\n mediatype: {},\n language: {\n en: {\n key: 'en',\n count: 1,\n state: 'selected',\n },\n },\n creator: {},\n collection: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchParams?.filters).to.deep.equal({\n subject: {\n foo: 'inc',\n bar: 'exc',\n },\n language: {\n en: 'inc',\n },\n });\n });\n\n it('fails gracefully if no search service provided', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n // This shouldn't throw an error\n expect(el.fetchPage(2)).to.exist;\n\n // Should continue showing the empty placeholder\n expect(el.shadowRoot?.querySelector('empty-placeholder')).to.exist;\n });\n\n it('restores search type from URL param', async () => {\n // Add a sin=TXT param to the URL\n const url = new URL(window.location.href);\n url.searchParams.append('sin', 'TXT');\n window.history.replaceState({}, '', url);\n\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n expect(el.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('applies loggedin flag to tile models if needed', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'loggedin';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n expect(cell.model?.loginRequired).to.be.true;\n });\n\n it('applies no-preview flag to tile models if needed', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'no-preview';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n expect(cell.model?.contentWarning).to.be.true;\n });\n\n it('both loggedin and no-preview flags can be set simultaneously', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'loggedin-no-preview';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n expect(cell.model?.loginRequired).to.be.true;\n expect(cell.model?.contentWarning).to.be.true;\n });\n\n it('joins full description array into a single string with line breaks', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n // This query receives an array description like ['line1', 'line2']\n el.baseQuery = 'multi-line-description';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n // Actual model description should be joined\n expect(cell.model?.description).to.equal('line1\\nline2');\n });\n\n it('can change search type', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .searchType=${SearchType.METADATA}\n ></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('trims queries of leading/trailing whitespace', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = ' collection:foo ';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n });\n\n it('shows error message when error response received', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = 'error';\n await el.updateComplete;\n await nextTick();\n\n const errorPlaceholder = el.shadowRoot?.querySelector(\n 'empty-placeholder'\n ) as EmptyPlaceholder;\n const errorDetails = errorPlaceholder?.shadowRoot?.querySelector(\n '.error-details'\n ) as HTMLParagraphElement;\n\n expect(errorDetails).to.exist;\n expect(errorDetails.textContent).to.contain('foo');\n });\n\n it('reports malformed response errors to Sentry', async () => {\n const sentrySpy = sinon.spy();\n (window as any).Sentry = { captureMessage: sentrySpy };\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = 'malformed';\n await el.updateComplete;\n\n expect(sentrySpy.callCount).to.be.greaterThanOrEqual(1);\n });\n\n it('queries for collection names after a fetch', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n >\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([\n 'foo',\n 'bar',\n 'baz',\n 'boop',\n ]);\n });\n\n it('keeps search results from fetch if no change to query or sort param', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'with-sort';\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n\n await el.fetchPage(2);\n\n // If there is no change to the query or sort param during the fetch, the results\n // should be read.\n expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);\n });\n\n it('discards obsolete search results if sort params changed before arrival', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'with-sort';\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n\n // We want to spy exclusively on the first set of results, not the second\n searchService.asyncResponse = false;\n searchService.resultsSpy = () => {};\n\n el.sortParam = { field: 'foo', direction: 'desc' };\n await el.updateComplete;\n await nextTick();\n\n // If the different sort param causes the results to be discarded,\n // the first results array should never be read.\n expect(resultsSpy.callCount).to.equal(0);\n });\n\n it('discards obsolete search results if sort param added before arrival', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'single-result';\n await el.updateComplete;\n\n // We want to spy exclusively on the first set of results, not the second\n searchService.asyncResponse = false;\n searchService.resultsSpy = () => {};\n\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n await nextTick();\n\n // If the different sort param causes the results to be discarded,\n // the first results array should never be read.\n expect(resultsSpy.callCount).to.equal(0);\n });\n\n it('discards obsolete search results if sort param cleared before arrival', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'with-sort';\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n\n // We want to spy exclusively on the first set of results, not the second\n searchService.asyncResponse = false;\n searchService.resultsSpy = () => {};\n\n el.sortParam = null;\n await el.updateComplete;\n await nextTick();\n\n // If the different sort param causes the results to be discarded,\n // the first results array should never be read.\n expect(resultsSpy.callCount).to.equal(0);\n });\n\n it('sets sort properties when user changes sort', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n expect(el.selectedSort).to.equal(SortField.relevance);\n\n el.baseQuery = 'foo';\n await el.updateComplete;\n\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\n const sortSelector = sortBar?.shadowRoot?.querySelector(\n '#desktop-sort-selector'\n );\n expect(sortSelector).to.exist;\n\n // Click the title sorter\n [...(sortSelector?.children as HTMLCollection & Iterable<any>)] // tsc doesn't know children is iterable\n .find(child => child.textContent?.trim() === 'Title')\n ?.querySelector('button')\n ?.click();\n\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal(SortField.title);\n });\n\n it('sets sort filter properties when user selects title filter', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-title';\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n el.selectedTitleFilter = 'X';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal(\n 'first-title AND firstTitle:X'\n );\n });\n\n it('sets sort filter properties when user selects creator filter', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-creator';\n el.selectedSort = 'creator' as SortField;\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'X';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal(\n 'first-creator AND firstCreator:X'\n );\n });\n\n it('sets sort filter properties simultaneous with facets and date range', async () => {\n const searchService = new MockSearchService();\n const selectedFacets: SelectedFacets = {\n collection: { foo: { key: 'foo', state: 'selected', count: 1 } },\n creator: {},\n language: {},\n lending: {},\n mediatype: {},\n subject: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-creator';\n el.selectedSort = 'creator' as SortField;\n el.selectedFacets = selectedFacets;\n el.minSelectedDate = '1950';\n el.maxSelectedDate = '1970';\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'X';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal(\n 'first-creator AND firstCreator:X'\n );\n expect(searchService.searchParams?.filters).to.deep.equal({\n collection: {\n foo: 'inc',\n },\n year: {\n '1950': 'gte',\n '1970': 'lte',\n },\n });\n });\n\n it('sets date range query when date picker selection changed', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'years'; // Includes year_histogram aggregation in response\n el.showHistogramDatePicker = true;\n await el.updateComplete;\n\n const facets = el.shadowRoot?.querySelector(\n 'collection-facets'\n ) as CollectionFacets;\n await facets?.updateComplete;\n\n // Wait for the date picker to be rendered (which may take until the next tick)\n await nextTick();\n\n const histogram = facets?.shadowRoot?.querySelector(\n 'histogram-date-range'\n ) as HistogramDateRange;\n expect(histogram).to.exist;\n\n // Enter a new min date into the date picker\n const minDateInput = histogram.shadowRoot?.querySelector(\n '#date-min'\n ) as HTMLInputElement;\n\n const pressEnterEvent = new KeyboardEvent('keyup', {\n key: 'Enter',\n });\n\n minDateInput.value = '1960';\n minDateInput.dispatchEvent(pressEnterEvent);\n\n // Wait for the histogram's update delay\n await aTimeout(histogram.updateDelay + 50);\n\n // Ensure that the histogram change propagated to the collection browser's\n // date query correctly.\n await el.updateComplete;\n expect(el.minSelectedDate).to.equal('1960');\n expect(el.maxSelectedDate).to.equal('2000');\n });\n\n it('scrolls to page', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n // Infinite scroller won't exist unless there's a base query.\n // First ensure that we don't throw errors when it doesn't exist.\n await el.goToPage(1);\n\n // And make sure it correctly calls scrollToCell when the\n // infinite scroller does exist.\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n const infiniteScroller = el.shadowRoot?.querySelector(\n 'infinite-scroller'\n ) as InfiniteScroller;\n expect(infiniteScroller).to.exist;\n\n const oldScrollToCell = infiniteScroller.scrollToCell;\n const spy = sinon.spy();\n infiniteScroller.scrollToCell = spy;\n\n await el.goToPage(1);\n\n expect(spy.callCount).to.equal(1);\n\n infiniteScroller.scrollToCell = oldScrollToCell;\n });\n\n it('shows mobile facets in mobile view', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .mobileBreakpoint=${9999}\n ></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n const contentContainer = el.shadowRoot?.querySelector(\n '#content-container'\n ) as HTMLElement;\n\n el.handleResize({\n target: contentContainer,\n contentRect: contentContainer.getBoundingClientRect(),\n borderBoxSize: [],\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n });\n await el.updateComplete;\n\n const mobileFacets = el.shadowRoot?.querySelector(\n '#mobile-filter-collapse'\n );\n expect(mobileFacets).to.exist;\n });\n\n it('refreshes when certain properties change - with some analytics event sampling', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .analyticsHandler=${mockAnalyticsHandler}\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n ></collection-browser>`\n );\n const infiniteScrollerRefreshSpy = sinon.spy();\n\n // Infinite scroller won't exist unless there's a base query\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n (infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;\n expect(infiniteScrollerRefreshSpy.called).to.be.false;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);\n\n // testing: `loggedIn`\n el.loggedIn = true;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.called).to.be.true;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);\n\n el.loggedIn = false;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);\n\n // testing: `displayMode`\n el.displayMode = 'list-compact';\n el.searchContext = 'beta-search';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);\n\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');\n expect(mockAnalyticsHandler.callAction).to.equal('displayMode');\n expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');\n\n el.displayMode = 'list-detail';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);\n\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');\n expect(mockAnalyticsHandler.callAction).to.equal('displayMode');\n expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');\n\n // testing: `baseNavigationUrl`\n el.baseNavigationUrl = 'https://funtestsite.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);\n\n // testing: `baseImageUrl`\n el.baseImageUrl = 'https://funtestsiteforimages.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(6);\n });\n\n it('query the search service for single result', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'single-result';\n await el.updateComplete;\n await nextTick();\n\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Result');\n });\n\n it('`searchContext` prop helps describe where component is being used', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n expect(el.searchContext).to.equal(analyticsCategories.default);\n\n el.searchContext = 'unicorn-search';\n await el.updateComplete;\n\n expect(el.searchContext).to.equal('unicorn-search');\n\n // property is reflected as attribute\n expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');\n });\n});\n"]}
1
+ {"version":3,"file":"collection-browser.test.js","sourceRoot":"","sources":["../../test/collection-browser.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { aTimeout, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport type { InfiniteScroller } from '@internetarchive/infinite-scroller';\nimport { FilterConstraint, SearchType } from '@internetarchive/search-service';\nimport type { HistogramDateRange } from '@internetarchive/histogram-date-range';\nimport type { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\nimport {\n getDefaultSelectedFacets,\n FacetBucket,\n SelectedFacets,\n SortField,\n} from '../src/models';\nimport { MockSearchService } from './mocks/mock-search-service';\nimport { MockCollectionNameCache } from './mocks/mock-collection-name-cache';\nimport { MockAnalyticsHandler } from './mocks/mock-analytics-handler';\nimport { analyticsCategories } from '../src/utils/analytics-events';\nimport type { TileDispatcher } from '../src/tiles/tile-dispatcher';\nimport type { CollectionFacets } from '../src/collection-facets';\nimport type { EmptyPlaceholder } from '../src/empty-placeholder';\n\n/**\n * Wait for the next tick of the event loop.\n *\n * This is necessary in some of the tests because certain collection browser\n * updates take more than one tick to render (e.g., date picker & query changes).\n * These delays are non-ideal and should eventually be investigated and fixed,\n * but they are minor enough that waiting for the next tick is a reasonable\n * testing solution for now.\n */\nconst nextTick = () => aTimeout(0);\n\ndescribe('Collection Browser', () => {\n beforeEach(async () => {\n // Apparently query params set by one test can bleed into other tests.\n // Since collection browser restores its state from certain query params, we need\n // to clear these before each test to ensure they run in isolation from one another.\n const url = new URL(window.location.href);\n const { searchParams } = url;\n searchParams.delete('sin');\n searchParams.delete('sort');\n searchParams.delete('query');\n searchParams.delete('page');\n searchParams.delete('and[]');\n searchParams.delete('not[]');\n window.history.replaceState({}, '', url);\n });\n\n it('clears selected facets when requested', async () => {\n const selectedFacets = getDefaultSelectedFacets();\n selectedFacets.creator.foo = { count: 1, key: 'foo', state: 'selected' };\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n el.clearFilters(); // By default, sort is not cleared\n\n expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());\n });\n\n it('clears existing filters but not sort by default', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n await el.updateComplete;\n el.clearFilters(); // By default, sort is not cleared\n\n expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());\n expect(el.selectedSort).to.equal('title');\n expect(el.sortDirection).to.equal('asc');\n expect(el.sortParam).to.deep.equal({\n field: 'titleSorter',\n direction: 'asc',\n });\n expect(el.selectedCreatorFilter).to.be.null;\n expect(el.selectedTitleFilter).to.be.null;\n });\n\n it('clears existing filters for facets & sort via option', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.selectedSort = 'title' as SortField;\n await el.updateComplete;\n el.clearFilters({ sort: true }); // Sort is reset too due to the option\n\n expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());\n expect(el.selectedSort).to.equal('relevance');\n expect(el.sortDirection).to.be.null;\n expect(el.sortParam).to.be.null;\n expect(el.selectedCreatorFilter).to.be.null;\n expect(el.selectedTitleFilter).to.be.null;\n });\n\n it('filterBy creator with analytics', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'betaSearchService';\n el.selectedSort = 'creator' as SortField;\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'A';\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');\n expect(mockAnalyticsHandler.callLabel).to.equal('start-A');\n\n el.clearFilters();\n await el.updateComplete;\n\n expect(el.selectedTitleFilter).to.be.null;\n expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');\n expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');\n });\n\n it('filterBy title with analytics', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'beta-search-service';\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n el.selectedTitleFilter = 'A';\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');\n expect(mockAnalyticsHandler.callLabel).to.equal('start-A');\n\n el.clearFilters();\n await el.updateComplete;\n\n expect(el.selectedTitleFilter).to.be.null;\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');\n expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');\n });\n\n it('selected facets with analytics - not negative facets', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const mediaTypeBucket = { count: 123, state: 'selected' } as FacetBucket;\n const mockedSelectedFacets: SelectedFacets = {\n subject: {},\n lending: {},\n mediatype: { data: mediaTypeBucket },\n language: {},\n creator: {},\n collection: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'search-service';\n el.selectedFacets = mockedSelectedFacets;\n await el.updateComplete;\n\n el.facetClickHandler(\n new CustomEvent('facetClick', {\n detail: { key: 'mediatype', state: 'selected', negative: false },\n })\n );\n expect(mockAnalyticsHandler.callCategory).to.equal('search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n\n el.facetClickHandler(\n new CustomEvent('facetClick', {\n detail: { key: 'mediatype', state: 'none', negative: false },\n })\n );\n expect(el.selectedFacets).to.equal(mockedSelectedFacets);\n expect(mockAnalyticsHandler.callCategory).to.equal('search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n });\n\n it('selected facets with analytics - negative facets', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const mediaTypeBucket = { count: 123, state: 'selected' } as FacetBucket;\n const mockedSelectedFacets: SelectedFacets = {\n subject: {},\n lending: {},\n mediatype: { data: mediaTypeBucket },\n language: {},\n creator: {},\n collection: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\n </collection-browser>`\n );\n\n el.searchContext = 'beta-search-service';\n el.selectedFacets = mockedSelectedFacets;\n await el.updateComplete;\n\n el.facetClickHandler(\n new CustomEvent('facetClick', {\n detail: { key: 'mediatype', state: 'hidden', negative: true },\n })\n );\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n\n el.facetClickHandler(\n new CustomEvent('facetClick', {\n detail: { key: 'mediatype', state: 'none', negative: true },\n })\n );\n expect(el.selectedFacets).to.equal(mockedSelectedFacets);\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\n expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\n });\n\n it('should render with a sort bar, facets, and infinite scroller', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'hello';\n await el.updateComplete;\n\n const facets = el.shadowRoot?.querySelector('collection-facets');\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n expect(facets).to.exist;\n expect(sortBar).to.exist;\n expect(infiniteScroller).to.exist;\n });\n\n it('queries the search service when given a base query', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Results');\n });\n\n it('queries the search service with a metadata search', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html` <collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.searchType = SearchType.METADATA;\n await el.updateComplete;\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchType).to.equal(SearchType.METADATA);\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Results');\n });\n\n it('can change search type', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('queries the search service with a fulltext search', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html` <collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Results');\n });\n\n it('queries the search service with facets selected/negated', async () => {\n const searchService = new MockSearchService();\n const selectedFacets: SelectedFacets = {\n subject: {\n foo: {\n key: 'foo',\n count: 1,\n state: 'selected',\n },\n bar: {\n key: 'bar',\n count: 2,\n state: 'hidden',\n },\n },\n lending: {},\n mediatype: {},\n language: {\n en: {\n key: 'en',\n count: 1,\n state: 'selected',\n },\n },\n creator: {},\n collection: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchParams?.filters).to.deep.equal({\n subject: {\n foo: 'inc',\n bar: 'exc',\n },\n language: {\n en: 'inc',\n },\n });\n });\n\n it('fails gracefully if no search service provided', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n // This shouldn't throw an error\n expect(el.fetchPage(2)).to.exist;\n\n // Should continue showing the empty placeholder\n expect(el.shadowRoot?.querySelector('empty-placeholder')).to.exist;\n });\n\n it('restores search type from URL param', async () => {\n // Add a sin=TXT param to the URL\n const url = new URL(window.location.href);\n url.searchParams.append('sin', 'TXT');\n window.history.replaceState({}, '', url);\n\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n expect(el.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('applies loggedin flag to tile models if needed', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'loggedin';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n expect(cell.model?.loginRequired).to.be.true;\n });\n\n it('applies no-preview flag to tile models if needed', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'no-preview';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n expect(cell.model?.contentWarning).to.be.true;\n });\n\n it('both loggedin and no-preview flags can be set simultaneously', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'loggedin-no-preview';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n expect(cell.model?.loginRequired).to.be.true;\n expect(cell.model?.contentWarning).to.be.true;\n });\n\n it('joins full description array into a single string with line breaks', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n // This query receives an array description like ['line1', 'line2']\n el.baseQuery = 'multi-line-description';\n await el.updateComplete;\n\n const cellTemplate = el.cellForIndex(0);\n expect(cellTemplate).to.exist;\n\n const cell = await fixture<TileDispatcher>(cellTemplate!);\n expect(cell).to.exist;\n\n // Actual model description should be joined\n expect(cell.model?.description).to.equal('line1\\nline2');\n });\n\n it('can change search type', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .searchType=${SearchType.METADATA}\n ></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('trims queries of leading/trailing whitespace', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = ' collection:foo ';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n });\n\n it('shows error message when error response received', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = 'error';\n await el.updateComplete;\n await nextTick();\n\n const errorPlaceholder = el.shadowRoot?.querySelector(\n 'empty-placeholder'\n ) as EmptyPlaceholder;\n const errorDetails = errorPlaceholder?.shadowRoot?.querySelector(\n '.error-details'\n ) as HTMLParagraphElement;\n\n expect(errorDetails).to.exist;\n expect(errorDetails.textContent).to.contain('foo');\n });\n\n it('reports malformed response errors to Sentry', async () => {\n const sentrySpy = sinon.spy();\n (window as any).Sentry = { captureMessage: sentrySpy };\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n ></collection-browser>`\n );\n\n el.baseQuery = 'malformed';\n await el.updateComplete;\n\n expect(sentrySpy.callCount).to.be.greaterThanOrEqual(1);\n });\n\n it('queries for collection names after a fetch', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n >\n </collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([\n 'foo',\n 'bar',\n 'baz',\n 'boop',\n ]);\n });\n\n it('queries for collection names after an aggregations fetch', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n >\n </collection-browser>`\n );\n\n el.baseQuery = 'collection-aggregations';\n await el.updateComplete;\n\n expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([\n 'foo',\n 'bar',\n ]);\n });\n\n it('adds collection names to cache when present on response', async () => {\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n >\n </collection-browser>`\n );\n\n el.baseQuery = 'collection-titles';\n await el.updateComplete;\n\n expect(collectionNameCache.knownTitlesAdded).to.deep.equal({\n foo: 'Foo Collection',\n bar: 'Bar Collection',\n baz: 'Baz Collection',\n boop: 'Boop Collection',\n });\n });\n\n it('keeps search results from fetch if no change to query or sort param', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'with-sort';\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n\n await el.fetchPage(2);\n\n // If there is no change to the query or sort param during the fetch, the results\n // should be read.\n expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);\n });\n\n it('discards obsolete search results if sort params changed before arrival', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'with-sort';\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n\n // We want to spy exclusively on the first set of results, not the second\n searchService.asyncResponse = false;\n searchService.resultsSpy = () => {};\n\n el.sortParam = { field: 'foo', direction: 'desc' };\n await el.updateComplete;\n await nextTick();\n\n // If the different sort param causes the results to be discarded,\n // the first results array should never be read.\n expect(resultsSpy.callCount).to.equal(0);\n });\n\n it('discards obsolete search results if sort param added before arrival', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'single-result';\n await el.updateComplete;\n\n // We want to spy exclusively on the first set of results, not the second\n searchService.asyncResponse = false;\n searchService.resultsSpy = () => {};\n\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n await nextTick();\n\n // If the different sort param causes the results to be discarded,\n // the first results array should never be read.\n expect(resultsSpy.callCount).to.equal(0);\n });\n\n it('discards obsolete search results if sort param cleared before arrival', async () => {\n const resultsSpy = sinon.spy();\n const searchService = new MockSearchService({\n asyncResponse: true,\n resultsSpy,\n });\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'with-sort';\n el.sortParam = { field: 'foo', direction: 'asc' };\n await el.updateComplete;\n\n // We want to spy exclusively on the first set of results, not the second\n searchService.asyncResponse = false;\n searchService.resultsSpy = () => {};\n\n el.sortParam = null;\n await el.updateComplete;\n await nextTick();\n\n // If the different sort param causes the results to be discarded,\n // the first results array should never be read.\n expect(resultsSpy.callCount).to.equal(0);\n });\n\n it('sets sort properties when user changes sort', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n expect(el.selectedSort).to.equal(SortField.relevance);\n\n el.baseQuery = 'foo';\n await el.updateComplete;\n\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\n const sortSelector = sortBar?.shadowRoot?.querySelector(\n '#desktop-sort-selector'\n );\n expect(sortSelector).to.exist;\n\n // Click the title sorter\n [...(sortSelector?.children as HTMLCollection & Iterable<any>)] // tsc doesn't know children is iterable\n .find(child => child.textContent?.trim() === 'Title')\n ?.querySelector('button')\n ?.click();\n\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal(SortField.title);\n });\n\n it('sets sort filter properties when user selects title filter', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-title';\n el.selectedSort = 'title' as SortField;\n el.sortDirection = 'asc';\n el.selectedTitleFilter = 'X';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('first-title');\n expect(searchService.searchParams?.filters?.firstTitle?.X).to.equal(\n FilterConstraint.INCLUDE\n );\n });\n\n it('sets sort filter properties when user selects creator filter', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-creator';\n el.selectedSort = 'creator' as SortField;\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'X';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('first-creator');\n expect(searchService.searchParams?.filters?.firstCreator?.X).to.equal(\n FilterConstraint.INCLUDE\n );\n });\n\n it('sets sort filter properties simultaneous with facets and date range', async () => {\n const searchService = new MockSearchService();\n const selectedFacets: SelectedFacets = {\n collection: { foo: { key: 'foo', state: 'selected', count: 1 } },\n creator: {},\n language: {},\n lending: {},\n mediatype: {},\n subject: {},\n year: {},\n };\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-creator';\n el.selectedSort = 'creator' as SortField;\n el.selectedFacets = selectedFacets;\n el.minSelectedDate = '1950';\n el.maxSelectedDate = '1970';\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'X';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('first-creator');\n expect(searchService.searchParams?.filters).to.deep.equal({\n collection: {\n foo: 'inc',\n },\n year: {\n '1950': 'gte',\n '1970': 'lte',\n },\n firstCreator: {\n X: 'inc',\n },\n });\n });\n\n it('resets letter filters when query changes', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'first-creator';\n el.selectedSort = 'creator' as SortField;\n el.sortDirection = 'asc';\n el.selectedCreatorFilter = 'X';\n await el.updateComplete;\n await nextTick();\n\n expect(searchService.searchParams?.query).to.equal('first-creator');\n expect(searchService.searchParams?.filters?.firstCreator?.X).to.equal(\n FilterConstraint.INCLUDE\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('collection:foo');\n expect(searchService.searchParams?.filters?.firstCreator).not.to.exist;\n });\n\n it('sets date range query when date picker selection changed', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'years'; // Includes year_histogram aggregation in response\n el.showHistogramDatePicker = true;\n await el.updateComplete;\n\n const facets = el.shadowRoot?.querySelector(\n 'collection-facets'\n ) as CollectionFacets;\n await facets?.updateComplete;\n\n // Wait for the date picker to be rendered (which may take until the next tick)\n await nextTick();\n\n const histogram = facets?.shadowRoot?.querySelector(\n 'histogram-date-range'\n ) as HistogramDateRange;\n expect(histogram).to.exist;\n\n // Enter a new min date into the date picker\n const minDateInput = histogram.shadowRoot?.querySelector(\n '#date-min'\n ) as HTMLInputElement;\n\n const pressEnterEvent = new KeyboardEvent('keyup', {\n key: 'Enter',\n });\n\n minDateInput.value = '1960';\n minDateInput.dispatchEvent(pressEnterEvent);\n\n // Wait for the histogram's update delay\n await aTimeout(histogram.updateDelay + 50);\n\n // Ensure that the histogram change propagated to the collection browser's\n // date query correctly.\n await el.updateComplete;\n expect(el.minSelectedDate).to.equal('1960');\n expect(el.maxSelectedDate).to.equal('2000');\n });\n\n it('scrolls to page', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n // Infinite scroller won't exist unless there's a base query.\n // First ensure that we don't throw errors when it doesn't exist.\n await el.goToPage(1);\n\n // And make sure it correctly calls scrollToCell when the\n // infinite scroller does exist.\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n const infiniteScroller = el.shadowRoot?.querySelector(\n 'infinite-scroller'\n ) as InfiniteScroller;\n expect(infiniteScroller).to.exist;\n\n const oldScrollToCell = infiniteScroller.scrollToCell;\n const spy = sinon.spy();\n infiniteScroller.scrollToCell = spy;\n\n await el.goToPage(1);\n\n expect(spy.callCount).to.equal(1);\n\n infiniteScroller.scrollToCell = oldScrollToCell;\n });\n\n it('shows mobile facets in mobile view', async () => {\n const searchService = new MockSearchService();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .searchService=${searchService}\n .mobileBreakpoint=${9999}\n ></collection-browser>`\n );\n\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n const contentContainer = el.shadowRoot?.querySelector(\n '#content-container'\n ) as HTMLElement;\n\n el.handleResize({\n target: contentContainer,\n contentRect: contentContainer.getBoundingClientRect(),\n borderBoxSize: [],\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n });\n await el.updateComplete;\n\n const mobileFacets = el.shadowRoot?.querySelector(\n '#mobile-filter-collapse'\n );\n expect(mobileFacets).to.exist;\n });\n\n it('refreshes when certain properties change - with some analytics event sampling', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n const searchService = new MockSearchService();\n const collectionNameCache = new MockCollectionNameCache();\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser\n .analyticsHandler=${mockAnalyticsHandler}\n .searchService=${searchService}\n .collectionNameCache=${collectionNameCache}\n ></collection-browser>`\n );\n const infiniteScrollerRefreshSpy = sinon.spy();\n\n // Infinite scroller won't exist unless there's a base query\n el.baseQuery = 'collection:foo';\n await el.updateComplete;\n\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\n (infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;\n expect(infiniteScrollerRefreshSpy.called).to.be.false;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);\n\n // testing: `loggedIn`\n el.loggedIn = true;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.called).to.be.true;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);\n\n el.loggedIn = false;\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);\n\n // testing: `displayMode`\n el.displayMode = 'list-compact';\n el.searchContext = 'beta-search';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);\n\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');\n expect(mockAnalyticsHandler.callAction).to.equal('displayMode');\n expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');\n\n el.displayMode = 'list-detail';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);\n\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');\n expect(mockAnalyticsHandler.callAction).to.equal('displayMode');\n expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');\n\n // testing: `baseNavigationUrl`\n el.baseNavigationUrl = 'https://funtestsite.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);\n\n // testing: `baseImageUrl`\n el.baseImageUrl = 'https://funtestsiteforimages.com';\n await el.updateComplete;\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(6);\n });\n\n it('query the search service for single result', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser .searchService=${searchService}>\n </collection-browser>`\n );\n\n el.baseQuery = 'single-result';\n await el.updateComplete;\n await nextTick();\n\n expect(\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\n ).to.contains('Result');\n });\n\n it('`searchContext` prop helps describe where component is being used', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\n\n expect(el.searchContext).to.equal(analyticsCategories.default);\n\n el.searchContext = 'unicorn-search';\n await el.updateComplete;\n\n expect(el.searchContext).to.equal('unicorn-search');\n\n // property is reflected as attribute\n expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');\n });\n});\n"]}
@@ -1,6 +1,8 @@
1
1
  import { expect, fixture } from '@open-wc/testing';
2
+ import sinon from 'sinon';
2
3
  import { html } from 'lit';
3
4
  import '../../src/collection-facets/facets-template';
5
+ import { getDefaultSelectedFacets } from '../../src/models';
4
6
  const facetGroup = {
5
7
  title: 'Media Type',
6
8
  key: 'mediatype',
@@ -71,5 +73,83 @@ describe('Render facets', () => {
71
73
  // check title attribute for 'movies' mediatype
72
74
  expect(selectedFacet === null || selectedFacet === void 0 ? void 0 : selectedFacet.getAttribute('title')).equal('Hide mediatype: movies');
73
75
  });
76
+ it('emits facetClick events for normal facets', async () => {
77
+ var _a, _b, _c, _d, _e, _f, _g;
78
+ const facetClickSpy = sinon.spy();
79
+ const mediatypeGroup = {
80
+ title: 'Media Type',
81
+ key: 'mediatype',
82
+ buckets: [
83
+ { displayText: 'audio', key: 'audio', count: 42, state: 'none' },
84
+ ],
85
+ };
86
+ const selectedFacets = getDefaultSelectedFacets();
87
+ const el = await fixture(html `<facets-template
88
+ .facetGroup=${mediatypeGroup}
89
+ .selectedFacets=${selectedFacets}
90
+ @facetClick=${facetClickSpy}
91
+ ></facets-template>`);
92
+ const checkbox = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-facet-checkbox');
93
+ expect(checkbox).to.exist;
94
+ // Select it
95
+ checkbox.click();
96
+ await el.updateComplete;
97
+ expect(facetClickSpy.callCount).to.equal(1);
98
+ const selectEvent = facetClickSpy
99
+ .args[0][0];
100
+ expect(selectEvent).to.exist;
101
+ expect((_b = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _b === void 0 ? void 0 : _b.key).to.equal('mediatype');
102
+ expect((_c = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _c === void 0 ? void 0 : _c.state).to.equal('selected');
103
+ expect((_d = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _d === void 0 ? void 0 : _d.negative).to.be.false;
104
+ // Unselect it
105
+ checkbox.click();
106
+ await el.updateComplete;
107
+ expect(facetClickSpy.callCount).to.equal(2);
108
+ const unselectEvent = facetClickSpy
109
+ .args[1][0];
110
+ expect(unselectEvent).to.exist;
111
+ expect((_e = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _e === void 0 ? void 0 : _e.key).to.equal('mediatype');
112
+ expect((_f = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _f === void 0 ? void 0 : _f.state).to.equal('none');
113
+ expect((_g = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _g === void 0 ? void 0 : _g.negative).to.be.false;
114
+ });
115
+ it('emits facetClick events for negative facets', async () => {
116
+ var _a, _b, _c, _d, _e, _f, _g;
117
+ const facetClickSpy = sinon.spy();
118
+ const mediatypeGroup = {
119
+ title: 'Media Type',
120
+ key: 'mediatype',
121
+ buckets: [
122
+ { displayText: 'audio', key: 'audio', count: 42, state: 'none' },
123
+ ],
124
+ };
125
+ const selectedFacets = getDefaultSelectedFacets();
126
+ const el = await fixture(html `<facets-template
127
+ .facetGroup=${mediatypeGroup}
128
+ .selectedFacets=${selectedFacets}
129
+ @facetClick=${facetClickSpy}
130
+ ></facets-template>`);
131
+ const checkbox = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.hide-facet-checkbox');
132
+ expect(checkbox).to.exist;
133
+ // Select it
134
+ checkbox.click();
135
+ await el.updateComplete;
136
+ expect(facetClickSpy.callCount).to.equal(1);
137
+ const selectEvent = facetClickSpy
138
+ .args[0][0];
139
+ expect(selectEvent).to.exist;
140
+ expect((_b = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _b === void 0 ? void 0 : _b.key).to.equal('mediatype');
141
+ expect((_c = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
142
+ expect((_d = selectEvent === null || selectEvent === void 0 ? void 0 : selectEvent.detail) === null || _d === void 0 ? void 0 : _d.negative).to.be.true;
143
+ // Unselect it
144
+ checkbox.click();
145
+ await el.updateComplete;
146
+ expect(facetClickSpy.callCount).to.equal(2);
147
+ const unselectEvent = facetClickSpy
148
+ .args[1][0];
149
+ expect(unselectEvent).to.exist;
150
+ expect((_e = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _e === void 0 ? void 0 : _e.key).to.equal('mediatype');
151
+ expect((_f = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _f === void 0 ? void 0 : _f.state).to.equal('none');
152
+ expect((_g = unselectEvent === null || unselectEvent === void 0 ? void 0 : unselectEvent.detail) === null || _g === void 0 ? void 0 : _g.negative).to.be.true;
153
+ });
74
154
  });
75
155
  //# sourceMappingURL=facets-template.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"facets-template.test.js","sourceRoot":"","sources":["../../../test/collection-facets/facets-template.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { FacetsTemplate } from '../../src/collection-facets/facets-template';\nimport '../../src/collection-facets/facets-template';\n\nconst facetGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },\n { displayText: 'movies', key: 'movies', count: 901, state: 'none' },\n { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },\n { displayText: 'data', key: 'data', count: 230, state: 'none' },\n { displayText: 'web', key: 'web', count: 453, state: 'none' },\n ],\n};\n\ndescribe('Render facets', () => {\n it('should render more facets template', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facet-row')).to.exist;\n });\n\n it('facets render on page', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'page'}\n ></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-on-page')).to.exist;\n });\n\n it('facets render on modal', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'modal'}\n ></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-on-modal')).to.exist;\n });\n\n it('find facet-title and facet-count for particular facet group', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n const facetInfo = el.shadowRoot?.querySelector('.facet-info-display');\n expect(facetInfo?.querySelector('.facet-title')?.textContent).to.equal(\n 'audio'\n );\n expect(\n facetInfo?.querySelector('.facet-count')?.textContent?.trim()\n ).to.equal('1,001');\n });\n\n it('find the hidden facet item', async () => {\n const selectedFacets = { ...facetGroup };\n selectedFacets.buckets[2].state = 'hidden'; // hide 'texts' mediatype\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .selectedFacets=${selectedFacets}\n ></facets-template>`\n );\n await el.updateComplete;\n\n const hiddenFacet = el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];\n\n // check title attribute for 'texts' mediatype\n expect(hiddenFacet?.getAttribute('title')).equal('Unhide mediatype: texts');\n });\n\n it('find the selected facet item', async () => {\n const selectedFacets = { ...facetGroup };\n selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .selectedFacets=${selectedFacets}\n ></facets-template>`\n );\n await el.updateComplete;\n\n const selectedFacet =\n el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];\n\n // check title attribute for 'movies' mediatype\n expect(selectedFacet?.getAttribute('title')).equal(\n 'Hide mediatype: movies'\n );\n });\n});\n"]}
1
+ {"version":3,"file":"facets-template.test.js","sourceRoot":"","sources":["../../../test/collection-facets/facets-template.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport type { FacetsTemplate } from '../../src/collection-facets/facets-template';\nimport '../../src/collection-facets/facets-template';\nimport { getDefaultSelectedFacets, FacetEventDetails } from '../../src/models';\n\nconst facetGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },\n { displayText: 'movies', key: 'movies', count: 901, state: 'none' },\n { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },\n { displayText: 'data', key: 'data', count: 230, state: 'none' },\n { displayText: 'web', key: 'web', count: 453, state: 'none' },\n ],\n};\n\ndescribe('Render facets', () => {\n it('should render more facets template', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facet-row')).to.exist;\n });\n\n it('facets render on page', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'page'}\n ></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-on-page')).to.exist;\n });\n\n it('facets render on modal', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .renderOn=${'modal'}\n ></facets-template>`\n );\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-on-modal')).to.exist;\n });\n\n it('find facet-title and facet-count for particular facet group', async () => {\n const el = await fixture<FacetsTemplate>(\n html`<facets-template .facetGroup=${facetGroup}></facets-template>`\n );\n await el.updateComplete;\n\n const facetInfo = el.shadowRoot?.querySelector('.facet-info-display');\n expect(facetInfo?.querySelector('.facet-title')?.textContent).to.equal(\n 'audio'\n );\n expect(\n facetInfo?.querySelector('.facet-count')?.textContent?.trim()\n ).to.equal('1,001');\n });\n\n it('find the hidden facet item', async () => {\n const selectedFacets = { ...facetGroup };\n selectedFacets.buckets[2].state = 'hidden'; // hide 'texts' mediatype\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .selectedFacets=${selectedFacets}\n ></facets-template>`\n );\n await el.updateComplete;\n\n const hiddenFacet = el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];\n\n // check title attribute for 'texts' mediatype\n expect(hiddenFacet?.getAttribute('title')).equal('Unhide mediatype: texts');\n });\n\n it('find the selected facet item', async () => {\n const selectedFacets = { ...facetGroup };\n selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype\n\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${facetGroup}\n .selectedFacets=${selectedFacets}\n ></facets-template>`\n );\n await el.updateComplete;\n\n const selectedFacet =\n el.shadowRoot?.querySelectorAll('.hide-facet-icon')[0];\n\n // check title attribute for 'movies' mediatype\n expect(selectedFacet?.getAttribute('title')).equal(\n 'Hide mediatype: movies'\n );\n });\n\n it('emits facetClick events for normal facets', async () => {\n const facetClickSpy = sinon.spy();\n const mediatypeGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 42, state: 'none' },\n ],\n };\n const selectedFacets = getDefaultSelectedFacets();\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${mediatypeGroup}\n .selectedFacets=${selectedFacets}\n @facetClick=${facetClickSpy}\n ></facets-template>`\n );\n\n const checkbox = el.shadowRoot?.querySelector(\n '.select-facet-checkbox'\n ) as HTMLInputElement;\n expect(checkbox).to.exist;\n\n // Select it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(1);\n\n const selectEvent = facetClickSpy\n .args[0][0] as CustomEvent<FacetEventDetails>;\n expect(selectEvent).to.exist;\n expect(selectEvent?.detail?.key).to.equal('mediatype');\n expect(selectEvent?.detail?.state).to.equal('selected');\n expect(selectEvent?.detail?.negative).to.be.false;\n\n // Unselect it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(2);\n\n const unselectEvent = facetClickSpy\n .args[1][0] as CustomEvent<FacetEventDetails>;\n expect(unselectEvent).to.exist;\n expect(unselectEvent?.detail?.key).to.equal('mediatype');\n expect(unselectEvent?.detail?.state).to.equal('none');\n expect(unselectEvent?.detail?.negative).to.be.false;\n });\n\n it('emits facetClick events for negative facets', async () => {\n const facetClickSpy = sinon.spy();\n const mediatypeGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 42, state: 'none' },\n ],\n };\n const selectedFacets = getDefaultSelectedFacets();\n const el = await fixture<FacetsTemplate>(\n html`<facets-template\n .facetGroup=${mediatypeGroup}\n .selectedFacets=${selectedFacets}\n @facetClick=${facetClickSpy}\n ></facets-template>`\n );\n\n const checkbox = el.shadowRoot?.querySelector(\n '.hide-facet-checkbox'\n ) as HTMLInputElement;\n expect(checkbox).to.exist;\n\n // Select it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(1);\n\n const selectEvent = facetClickSpy\n .args[0][0] as CustomEvent<FacetEventDetails>;\n expect(selectEvent).to.exist;\n expect(selectEvent?.detail?.key).to.equal('mediatype');\n expect(selectEvent?.detail?.state).to.equal('hidden');\n expect(selectEvent?.detail?.negative).to.be.true;\n\n // Unselect it\n checkbox.click();\n await el.updateComplete;\n expect(facetClickSpy.callCount).to.equal(2);\n\n const unselectEvent = facetClickSpy\n .args[1][0] as CustomEvent<FacetEventDetails>;\n expect(unselectEvent).to.exist;\n expect(unselectEvent?.detail?.key).to.equal('mediatype');\n expect(unselectEvent?.detail?.state).to.equal('none');\n expect(unselectEvent?.detail?.negative).to.be.true;\n });\n});\n"]}
@@ -2,6 +2,8 @@ import type { CollectionNameCacheInterface } from '@internetarchive/collection-n
2
2
  export declare class MockCollectionNameCache implements CollectionNameCacheInterface {
3
3
  collectionNamesRequested: string[];
4
4
  preloadIdentifiersRequested: string[];
5
+ knownTitlesAdded: Record<string, string>;
5
6
  collectionNameFor(identifier: string): Promise<string | null>;
6
7
  preloadIdentifiers(identifiers: string[]): Promise<void>;
8
+ addKnownTitles(identifierTitleMap: Record<string, string>): Promise<void>;
7
9
  }
@@ -2,6 +2,7 @@ export class MockCollectionNameCache {
2
2
  constructor() {
3
3
  this.collectionNamesRequested = [];
4
4
  this.preloadIdentifiersRequested = [];
5
+ this.knownTitlesAdded = {};
5
6
  }
6
7
  async collectionNameFor(identifier) {
7
8
  this.collectionNamesRequested.push(identifier);
@@ -10,5 +11,8 @@ export class MockCollectionNameCache {
10
11
  async preloadIdentifiers(identifiers) {
11
12
  this.preloadIdentifiersRequested = identifiers;
12
13
  }
14
+ async addKnownTitles(identifierTitleMap) {
15
+ this.knownTitlesAdded = identifierTitleMap;
16
+ }
13
17
  }
14
18
  //# sourceMappingURL=mock-collection-name-cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-collection-name-cache.js","sourceRoot":"","sources":["../../../test/mocks/mock-collection-name-cache.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IAApC;QACE,6BAAwB,GAAa,EAAE,CAAC;QAExC,gCAA2B,GAAa,EAAE,CAAC;IAU7C,CAAC;IARC,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,GAAG,UAAU,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,WAAqB;QAC5C,IAAI,CAAC,2BAA2B,GAAG,WAAW,CAAC;IACjD,CAAC;CACF","sourcesContent":["import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\n\nexport class MockCollectionNameCache implements CollectionNameCacheInterface {\n collectionNamesRequested: string[] = [];\n\n preloadIdentifiersRequested: string[] = [];\n\n async collectionNameFor(identifier: string): Promise<string | null> {\n this.collectionNamesRequested.push(identifier);\n return `${identifier}-name`;\n }\n\n async preloadIdentifiers(identifiers: string[]): Promise<void> {\n this.preloadIdentifiersRequested = identifiers;\n }\n}\n"]}
1
+ {"version":3,"file":"mock-collection-name-cache.js","sourceRoot":"","sources":["../../../test/mocks/mock-collection-name-cache.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IAApC;QACE,6BAAwB,GAAa,EAAE,CAAC;QAExC,gCAA2B,GAAa,EAAE,CAAC;QAE3C,qBAAgB,GAA2B,EAAE,CAAC;IAgBhD,CAAC;IAdC,KAAK,CAAC,iBAAiB,CAAC,UAAkB;QACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,GAAG,UAAU,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,WAAqB;QAC5C,IAAI,CAAC,2BAA2B,GAAG,WAAW,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,kBAA0C;QAE1C,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;IAC7C,CAAC;CACF","sourcesContent":["import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';\n\nexport class MockCollectionNameCache implements CollectionNameCacheInterface {\n collectionNamesRequested: string[] = [];\n\n preloadIdentifiersRequested: string[] = [];\n\n knownTitlesAdded: Record<string, string> = {};\n\n async collectionNameFor(identifier: string): Promise<string | null> {\n this.collectionNamesRequested.push(identifier);\n return `${identifier}-name`;\n }\n\n async preloadIdentifiers(identifiers: string[]): Promise<void> {\n this.preloadIdentifiersRequested = identifiers;\n }\n\n async addKnownTitles(\n identifierTitleMap: Record<string, string>\n ): Promise<void> {\n this.knownTitlesAdded = identifierTitleMap;\n }\n}\n"]}
@@ -7,6 +7,8 @@ export declare const getMockSuccessNoPreviewResult: () => Result<SearchResponse,
7
7
  export declare const getMockSuccessLoggedInAndNoPreviewResult: () => Result<SearchResponse, SearchServiceError>;
8
8
  export declare const getMockSuccessFirstTitleResult: () => Result<SearchResponse, SearchServiceError>;
9
9
  export declare const getMockSuccessFirstCreatorResult: () => Result<SearchResponse, SearchServiceError>;
10
+ export declare const getMockSuccessWithCollectionTitles: () => Result<SearchResponse, SearchServiceError>;
11
+ export declare const getMockSuccessWithCollectionAggregations: () => Result<SearchResponse, SearchServiceError>;
10
12
  export declare const getMockSuccessSingleResultWithSort: (resultsSpy: Function) => Result<SearchResponse, SearchServiceError>;
11
13
  export declare const getMockSuccessMultipleResults: () => Result<SearchResponse, SearchServiceError>;
12
14
  export declare const getMockSuccessMultiLineDescription: () => Result<SearchResponse, SearchServiceError>;
@@ -237,6 +237,87 @@ export const getMockSuccessFirstCreatorResult = () => ({
237
237
  },
238
238
  },
239
239
  });
240
+ export const getMockSuccessWithCollectionTitles = () => ({
241
+ success: {
242
+ request: {
243
+ clientParameters: {
244
+ user_query: 'collection:foo',
245
+ sort: [],
246
+ },
247
+ finalizedParameters: {
248
+ user_query: 'collection:foo',
249
+ sort: [],
250
+ },
251
+ },
252
+ rawResponse: {},
253
+ response: {
254
+ totalResults: 2,
255
+ returnedCount: 2,
256
+ results: [
257
+ new ItemHit({
258
+ fields: {
259
+ identifier: 'foo',
260
+ collection: ['foo', 'bar'],
261
+ },
262
+ }),
263
+ new ItemHit({
264
+ fields: {
265
+ identifier: 'bar',
266
+ collection: ['baz', 'boop'],
267
+ },
268
+ }),
269
+ ],
270
+ collectionTitles: {
271
+ foo: 'Foo Collection',
272
+ bar: 'Bar Collection',
273
+ baz: 'Baz Collection',
274
+ boop: 'Boop Collection',
275
+ },
276
+ },
277
+ responseHeader: {
278
+ succeeded: true,
279
+ query_time: 0,
280
+ },
281
+ },
282
+ });
283
+ export const getMockSuccessWithCollectionAggregations = () => ({
284
+ success: {
285
+ request: {
286
+ clientParameters: {
287
+ user_query: 'collection:foo',
288
+ sort: [],
289
+ },
290
+ finalizedParameters: {
291
+ user_query: 'collection:foo',
292
+ sort: [],
293
+ },
294
+ },
295
+ rawResponse: {},
296
+ response: {
297
+ totalResults: 0,
298
+ returnedCount: 0,
299
+ results: [],
300
+ aggregations: {
301
+ collection: new Aggregation({
302
+ buckets: [
303
+ {
304
+ key: 'foo',
305
+ doc_count: 10,
306
+ },
307
+ {
308
+ key: 'bar',
309
+ doc_count: 10,
310
+ },
311
+ ],
312
+ }),
313
+ },
314
+ },
315
+ responseHeader: {
316
+ succeeded: true,
317
+ query_time: 0,
318
+ },
319
+ },
320
+ });
240
321
  export const getMockSuccessSingleResultWithSort = (resultsSpy) => ({
241
322
  success: {
242
323
  request: {