@internetarchive/collection-browser 0.3.3 → 0.3.5-alpha.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.
Files changed (224) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +26 -26
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/LICENSE +661 -661
  8. package/README.md +83 -83
  9. package/dist/index.d.ts +9 -9
  10. package/dist/index.js +9 -9
  11. package/dist/src/app-root.d.ts +43 -43
  12. package/dist/src/app-root.js +233 -233
  13. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  14. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  15. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  16. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  17. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  18. package/dist/src/assets/img/icons/chevron.js +2 -2
  19. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  20. package/dist/src/assets/img/icons/empty-query.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  28. package/dist/src/assets/img/icons/login-required.js +2 -2
  29. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  30. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  55. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  56. package/dist/src/assets/img/icons/null-result.js +2 -2
  57. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  58. package/dist/src/assets/img/icons/restricted.js +2 -2
  59. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  60. package/dist/src/assets/img/icons/reviews.js +2 -2
  61. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  62. package/dist/src/assets/img/icons/upload.js +2 -2
  63. package/dist/src/assets/img/icons/views.d.ts +1 -1
  64. package/dist/src/assets/img/icons/views.js +2 -2
  65. package/dist/src/circular-activity-indicator.d.ts +5 -5
  66. package/dist/src/circular-activity-indicator.js +17 -17
  67. package/dist/src/collection-browser.d.ts +245 -247
  68. package/dist/src/collection-browser.js +1359 -1396
  69. package/dist/src/collection-browser.js.map +1 -1
  70. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -0
  71. package/dist/src/collection-facets/facet-tombstone-row.js +43 -0
  72. package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -0
  73. package/dist/src/collection-facets/facets-template.d.ts +16 -16
  74. package/dist/src/collection-facets/facets-template.js +125 -125
  75. package/dist/src/collection-facets/more-facets-content.d.ts +76 -76
  76. package/dist/src/collection-facets/more-facets-content.js +353 -349
  77. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  78. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  79. package/dist/src/collection-facets/more-facets-pagination.js +192 -192
  80. package/dist/src/collection-facets.d.ts +77 -75
  81. package/dist/src/collection-facets.js +551 -518
  82. package/dist/src/collection-facets.js.map +1 -1
  83. package/dist/src/empty-placeholder.d.ts +11 -11
  84. package/dist/src/empty-placeholder.js +42 -42
  85. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  86. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  87. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  88. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  89. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  90. package/dist/src/mediatype/mediatype-config.js +85 -85
  91. package/dist/src/models.d.ts +102 -97
  92. package/dist/src/models.js +117 -100
  93. package/dist/src/models.js.map +1 -1
  94. package/dist/src/restoration-state-handler.d.ts +45 -45
  95. package/dist/src/restoration-state-handler.js +220 -220
  96. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -9
  97. package/dist/src/sort-filter-bar/alpha-bar.js +41 -41
  98. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  99. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  100. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  101. package/dist/src/sort-filter-bar/img/list.js +2 -2
  102. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  103. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  104. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  105. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  106. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +107 -107
  107. package/dist/src/sort-filter-bar/sort-filter-bar.js +423 -423
  108. package/dist/src/styles/item-image-styles.d.ts +8 -8
  109. package/dist/src/styles/item-image-styles.js +10 -9
  110. package/dist/src/styles/item-image-styles.js.map +1 -1
  111. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  112. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  113. package/dist/src/tiles/grid/account-tile.d.ts +8 -8
  114. package/dist/src/tiles/grid/account-tile.js +20 -20
  115. package/dist/src/tiles/grid/collection-tile.d.ts +7 -7
  116. package/dist/src/tiles/grid/collection-tile.js +23 -23
  117. package/dist/src/tiles/grid/item-tile.d.ts +24 -24
  118. package/dist/src/tiles/grid/item-tile.js +87 -87
  119. package/dist/src/tiles/grid/tile-stats.d.ts +10 -10
  120. package/dist/src/tiles/grid/tile-stats.js +35 -35
  121. package/dist/src/tiles/image-block.d.ts +17 -17
  122. package/dist/src/tiles/image-block.js +69 -69
  123. package/dist/src/tiles/item-image.d.ts +31 -31
  124. package/dist/src/tiles/item-image.js +103 -103
  125. package/dist/src/tiles/list/account-label.d.ts +1 -1
  126. package/dist/src/tiles/list/account-label.js +6 -6
  127. package/dist/src/tiles/list/date-label.d.ts +1 -1
  128. package/dist/src/tiles/list/date-label.js +12 -12
  129. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
  130. package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
  131. package/dist/src/tiles/list/tile-list-compact.d.ts +20 -20
  132. package/dist/src/tiles/list/tile-list-compact.js +87 -87
  133. package/dist/src/tiles/list/tile-list.d.ts +50 -50
  134. package/dist/src/tiles/list/tile-list.js +269 -264
  135. package/dist/src/tiles/list/tile-list.js.map +1 -1
  136. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  137. package/dist/src/tiles/mediatype-icon.js +47 -47
  138. package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -7
  139. package/dist/src/tiles/overlay/icon-overlay.js +30 -30
  140. package/dist/src/tiles/overlay/text-overlay.d.ts +8 -8
  141. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  142. package/dist/src/tiles/text-snippet-block.d.ts +29 -29
  143. package/dist/src/tiles/text-snippet-block.js +81 -81
  144. package/dist/src/tiles/tile-dispatcher.d.ts +36 -36
  145. package/dist/src/tiles/tile-dispatcher.js +128 -128
  146. package/dist/src/utils/analytics-events.d.ts +22 -22
  147. package/dist/src/utils/analytics-events.js +24 -24
  148. package/dist/src/utils/format-count.d.ts +7 -7
  149. package/dist/src/utils/format-count.js +76 -76
  150. package/dist/src/utils/format-date.d.ts +2 -2
  151. package/dist/src/utils/format-date.js +23 -23
  152. package/dist/test/collection-browser.test.d.ts +1 -1
  153. package/dist/test/collection-browser.test.js +415 -359
  154. package/dist/test/collection-browser.test.js.map +1 -1
  155. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  156. package/dist/test/collection-facets/facets-template.test.js +62 -62
  157. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  158. package/dist/test/collection-facets/more-facets-content.test.js +114 -114
  159. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  160. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  161. package/dist/test/collection-facets.test.d.ts +2 -2
  162. package/dist/test/collection-facets.test.js +498 -469
  163. package/dist/test/collection-facets.test.js.map +1 -1
  164. package/dist/test/empty-placeholder.test.d.ts +1 -1
  165. package/dist/test/empty-placeholder.test.js +33 -33
  166. package/dist/test/icon-overlay.test.d.ts +1 -1
  167. package/dist/test/icon-overlay.test.js +24 -24
  168. package/dist/test/image-block.test.d.ts +1 -1
  169. package/dist/test/image-block.test.js +48 -48
  170. package/dist/test/item-image.test.d.ts +1 -1
  171. package/dist/test/item-image.test.js +56 -56
  172. package/dist/test/mediatype-config.test.d.ts +1 -1
  173. package/dist/test/mediatype-config.test.js +16 -16
  174. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  175. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  176. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -7
  177. package/dist/test/mocks/mock-collection-name-cache.js +13 -13
  178. package/dist/test/mocks/mock-search-responses.d.ts +8 -5
  179. package/dist/test/mocks/mock-search-responses.js +198 -103
  180. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  181. package/dist/test/mocks/mock-search-service.d.ts +13 -13
  182. package/dist/test/mocks/mock-search-service.js +32 -25
  183. package/dist/test/mocks/mock-search-service.js.map +1 -1
  184. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  185. package/dist/test/restoration-state-handler.test.js +117 -117
  186. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  187. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +113 -113
  188. package/dist/test/text-overlay.test.d.ts +1 -1
  189. package/dist/test/text-overlay.test.js +41 -41
  190. package/dist/test/text-snippet-block.test.d.ts +1 -1
  191. package/dist/test/text-snippet-block.test.js +57 -57
  192. package/dist/test/tile-stats.test.d.ts +1 -1
  193. package/dist/test/tile-stats.test.js +33 -33
  194. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  195. package/dist/test/tiles/grid/item-tile.test.js +107 -107
  196. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  197. package/dist/test/tiles/list/tile-list-compact.test.js +26 -26
  198. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  199. package/dist/test/tiles/list/tile-list.test.js +53 -36
  200. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  201. package/dist/test/utils/format-count.test.d.ts +1 -1
  202. package/dist/test/utils/format-count.test.js +23 -23
  203. package/dist/test/utils/format-date.test.d.ts +1 -1
  204. package/dist/test/utils/format-date.test.js +17 -17
  205. package/index.html +24 -24
  206. package/local.archive.org.cert +86 -86
  207. package/local.archive.org.key +27 -27
  208. package/package.json +115 -115
  209. package/renovate.json +6 -6
  210. package/src/collection-browser.ts +1488 -1523
  211. package/src/collection-facets/facet-tombstone-row.ts +40 -0
  212. package/src/collection-facets/more-facets-content.ts +8 -4
  213. package/src/collection-facets.ts +635 -597
  214. package/src/models.ts +18 -0
  215. package/src/styles/item-image-styles.ts +1 -0
  216. package/src/tiles/list/tile-list.ts +14 -10
  217. package/test/collection-browser.test.ts +599 -513
  218. package/test/collection-facets.test.ts +39 -0
  219. package/test/mocks/mock-search-responses.ts +226 -119
  220. package/test/mocks/mock-search-service.ts +61 -53
  221. package/test/tiles/list/tile-list.test.ts +21 -0
  222. package/tsconfig.json +21 -21
  223. package/web-dev-server.config.mjs +30 -30
  224. package/web-test-runner.config.mjs +41 -41
@@ -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 { 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 { CollectionBrowser } from '../src/collection-browser';\nimport '../src/collection-browser';\nimport {\n defaultSelectedFacets,\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';\n\ndescribe('Collection Browser', () => {\n it('clear existing filter for facets & sort-bar', 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();\n\n expect(el.selectedFacets).to.equal(defaultSelectedFacets);\n expect(el.selectedSort).to.equal('relevance');\n expect(el.sortDirection).to.null;\n expect(el.sortParam).to.null;\n expect(el.selectedCreatorFilter).to.null;\n expect(el.selectedTitleFilter).to.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.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.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.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.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 el = await fixture<CollectionBrowser>(\n html`<collection-browser></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\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\n .searchService=${searchService}\n .searchType=${SearchType.METADATA}\n >\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 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('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\n .searchService=${searchService}\n .searchType=${SearchType.FULLTEXT}\n >\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 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('can search on demand if only search type has changed', 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 await el.updateComplete;\n\n el.searchType = SearchType.FULLTEXT;\n await el.updateComplete;\n\n // Haven't performed the search yet\n expect(searchService.searchType).to.equal(SearchType.METADATA);\n\n el.requestSearch();\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\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 const fetchPromise = el.fetchPage(2);\n el.sortParam = { field: 'foo', direction: 'desc' };\n await fetchPromise;\n\n // If the different sort param causes the results to be discarded,\n // the 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 const fetchPromise = el.fetchPage(2);\n el.sortParam = { field: 'foo', direction: 'asc' };\n await fetchPromise;\n\n // If the different sort param causes the results to be discarded,\n // the 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 await el.updateComplete;\n\n const fetchPromise = el.fetchPage(2);\n el.sortParam = null;\n await fetchPromise;\n\n // If the different sort param causes the results to be discarded,\n // the 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 el = await fixture<CollectionBrowser>(\n html`<collection-browser></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('a[href]')\n ?.click();\n\n await el.updateComplete;\n\n expect(el.selectedSort).to.equal(SortField.title);\n });\n\n it('scrolls to page', async () => {\n const el = await fixture<CollectionBrowser>(\n html`<collection-browser></collection-browser>`\n );\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 el.goToPage(1);\n\n // Give it a second to scroll\n await new Promise(res => {\n setTimeout(res, 1000);\n });\n\n expect(spy.callCount).to.equal(1);\n\n infiniteScroller.scrollToCell = oldScrollToCell;\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 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\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 */\r\nimport { expect, fixture } from '@open-wc/testing';\r\nimport { html } from 'lit';\r\nimport sinon from 'sinon';\r\nimport type { InfiniteScroller } from '@internetarchive/infinite-scroller';\r\nimport { SearchType } from '@internetarchive/search-service';\r\nimport type { CollectionBrowser } from '../src/collection-browser';\r\nimport '../src/collection-browser';\r\nimport {\r\n defaultSelectedFacets,\r\n FacetBucket,\r\n SelectedFacets,\r\n SortField,\r\n} from '../src/models';\r\nimport { MockSearchService } from './mocks/mock-search-service';\r\nimport { MockCollectionNameCache } from './mocks/mock-collection-name-cache';\r\nimport { MockAnalyticsHandler } from './mocks/mock-analytics-handler';\r\nimport { analyticsCategories } from '../src/utils/analytics-events';\r\nimport type { TileDispatcher } from '../src/tiles/tile-dispatcher';\r\n\r\ndescribe('Collection Browser', () => {\r\n it('clear existing filter for facets & sort-bar', async () => {\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser></collection-browser>`\r\n );\r\n\r\n el.selectedSort = 'title' as SortField;\r\n await el.updateComplete;\r\n el.clearFilters();\r\n\r\n expect(el.selectedFacets).to.equal(defaultSelectedFacets);\r\n expect(el.selectedSort).to.equal('relevance');\r\n expect(el.sortDirection).to.null;\r\n expect(el.sortParam).to.null;\r\n expect(el.selectedCreatorFilter).to.null;\r\n expect(el.selectedTitleFilter).to.null;\r\n });\r\n\r\n it('filterBy creator with analytics', async () => {\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\r\n </collection-browser>`\r\n );\r\n\r\n el.searchContext = 'betaSearchService';\r\n el.selectedCreatorFilter = 'A';\r\n await el.updateComplete;\r\n\r\n expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');\r\n expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('start-A');\r\n\r\n el.clearFilters();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedTitleFilter).to.null;\r\n expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');\r\n expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');\r\n });\r\n\r\n it('filterBy title with analytics', async () => {\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\r\n </collection-browser>`\r\n );\r\n\r\n el.searchContext = 'beta-search-service';\r\n el.selectedSort = 'title' as SortField;\r\n el.selectedTitleFilter = 'A';\r\n await el.updateComplete;\r\n\r\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\r\n expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('start-A');\r\n\r\n el.clearFilters();\r\n await el.updateComplete;\r\n\r\n expect(el.selectedTitleFilter).to.null;\r\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\r\n expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');\r\n });\r\n\r\n it('selected facets with analytics - not negative facets', async () => {\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n const mediaTypeBucket = { count: 123, state: 'selected' } as FacetBucket;\r\n const mockedSelectedFacets: SelectedFacets = {\r\n subject: {},\r\n lending: {},\r\n mediatype: { data: mediaTypeBucket },\r\n language: {},\r\n creator: {},\r\n collection: {},\r\n year: {},\r\n };\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\r\n </collection-browser>`\r\n );\r\n\r\n el.searchContext = 'search-service';\r\n el.selectedFacets = mockedSelectedFacets;\r\n await el.updateComplete;\r\n\r\n el.facetClickHandler('mediatype', true, false);\r\n expect(mockAnalyticsHandler.callCategory).to.equal('search-service');\r\n expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\r\n\r\n el.facetClickHandler('mediatype', false, false);\r\n expect(el.selectedFacets).to.equal(mockedSelectedFacets);\r\n expect(mockAnalyticsHandler.callCategory).to.equal('search-service');\r\n expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\r\n });\r\n\r\n it('selected facets with analytics - negative facets', async () => {\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n const mediaTypeBucket = { count: 123, state: 'selected' } as FacetBucket;\r\n const mockedSelectedFacets: SelectedFacets = {\r\n subject: {},\r\n lending: {},\r\n mediatype: { data: mediaTypeBucket },\r\n language: {},\r\n creator: {},\r\n collection: {},\r\n year: {},\r\n };\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .analyticsHandler=${mockAnalyticsHandler}>\r\n </collection-browser>`\r\n );\r\n\r\n el.searchContext = 'beta-search-service';\r\n el.selectedFacets = mockedSelectedFacets;\r\n await el.updateComplete;\r\n\r\n el.facetClickHandler('mediatype', true, true);\r\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\r\n expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\r\n\r\n el.facetClickHandler('mediatype', false, true);\r\n expect(el.selectedFacets).to.equal(mockedSelectedFacets);\r\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');\r\n expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');\r\n });\r\n\r\n it('should render with a sort bar, facets, and infinite scroller', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'hello';\r\n await el.updateComplete;\r\n\r\n const facets = el.shadowRoot?.querySelector('collection-facets');\r\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\r\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\r\n expect(facets).to.exist;\r\n expect(sortBar).to.exist;\r\n expect(infiniteScroller).to.exist;\r\n });\r\n\r\n it('queries the search service when given a base query', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'collection:foo';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.equal('collection:foo');\r\n expect(\r\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\r\n ).to.contains('Results');\r\n });\r\n\r\n it('queries the search service with a metadata search', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html` <collection-browser\r\n .searchService=${searchService}\r\n .searchType=${SearchType.METADATA}\r\n >\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'collection:foo';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.equal('collection:foo');\r\n expect(searchService.searchType).to.equal(SearchType.METADATA);\r\n expect(\r\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\r\n ).to.contains('Results');\r\n });\r\n\r\n it('queries the search service with a fulltext search', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html` <collection-browser\r\n .searchService=${searchService}\r\n .searchType=${SearchType.FULLTEXT}\r\n >\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'collection:foo';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.equal('collection:foo');\r\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\r\n expect(\r\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\r\n ).to.contains('Results');\r\n });\r\n\r\n it('fails gracefully if no search service provided', async () => {\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser></collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'collection:foo';\r\n await el.updateComplete;\r\n\r\n // This shouldn't throw an error\r\n expect(el.fetchPage(2)).to.exist;\r\n\r\n // Should continue showing the empty placeholder\r\n expect(el.shadowRoot?.querySelector('empty-placeholder')).to.exist;\r\n });\r\n\r\n it('applies loggedin flag to tile models if needed', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'loggedin';\r\n await el.updateComplete;\r\n\r\n const cellTemplate = el.cellForIndex(0);\r\n expect(cellTemplate).to.exist;\r\n\r\n const cell = await fixture<TileDispatcher>(cellTemplate!);\r\n expect(cell).to.exist;\r\n\r\n expect(cell.model?.loginRequired).to.be.true;\r\n });\r\n\r\n it('applies no-preview flag to tile models if needed', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'no-preview';\r\n await el.updateComplete;\r\n\r\n const cellTemplate = el.cellForIndex(0);\r\n expect(cellTemplate).to.exist;\r\n\r\n const cell = await fixture<TileDispatcher>(cellTemplate!);\r\n expect(cell).to.exist;\r\n\r\n expect(cell.model?.contentWarning).to.be.true;\r\n });\r\n\r\n it('both loggedin and no-preview flags can be set simultaneously', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'loggedin-no-preview';\r\n await el.updateComplete;\r\n\r\n const cellTemplate = el.cellForIndex(0);\r\n expect(cellTemplate).to.exist;\r\n\r\n const cell = await fixture<TileDispatcher>(cellTemplate!);\r\n expect(cell).to.exist;\r\n\r\n expect(cell.model?.loginRequired).to.be.true;\r\n expect(cell.model?.contentWarning).to.be.true;\r\n });\r\n\r\n it('can search on demand if only search type has changed', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser\r\n .searchService=${searchService}\r\n .searchType=${SearchType.METADATA}\r\n ></collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'collection:foo';\r\n await el.updateComplete;\r\n\r\n el.searchType = SearchType.FULLTEXT;\r\n await el.updateComplete;\r\n\r\n // Haven't performed the search yet\r\n expect(searchService.searchType).to.equal(SearchType.METADATA);\r\n\r\n el.requestSearch();\r\n expect(searchService.searchType).to.equal(SearchType.FULLTEXT);\r\n });\r\n\r\n it('queries for collection names after a fetch', async () => {\r\n const searchService = new MockSearchService();\r\n const collectionNameCache = new MockCollectionNameCache();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser\r\n .searchService=${searchService}\r\n .collectionNameCache=${collectionNameCache}\r\n >\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'collection:foo';\r\n await el.updateComplete;\r\n\r\n expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([\r\n 'foo',\r\n 'bar',\r\n 'baz',\r\n 'boop',\r\n ]);\r\n });\r\n\r\n it('keeps search results from fetch if no change to query or sort param', async () => {\r\n const resultsSpy = sinon.spy();\r\n const searchService = new MockSearchService({\r\n asyncResponse: true,\r\n resultsSpy,\r\n });\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'with-sort';\r\n el.sortParam = { field: 'foo', direction: 'asc' };\r\n await el.updateComplete;\r\n\r\n await el.fetchPage(2);\r\n\r\n // If there is no change to the query or sort param during the fetch, the results\r\n // should be read.\r\n expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);\r\n });\r\n\r\n it('discards obsolete search results if sort params changed before arrival', async () => {\r\n const resultsSpy = sinon.spy();\r\n const searchService = new MockSearchService({\r\n asyncResponse: true,\r\n resultsSpy,\r\n });\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'with-sort';\r\n el.sortParam = { field: 'foo', direction: 'asc' };\r\n await el.updateComplete;\r\n\r\n const fetchPromise = el.fetchPage(2);\r\n el.sortParam = { field: 'foo', direction: 'desc' };\r\n await fetchPromise;\r\n\r\n // If the different sort param causes the results to be discarded,\r\n // the results array should never be read.\r\n expect(resultsSpy.callCount).to.equal(0);\r\n });\r\n\r\n it('discards obsolete search results if sort param added before arrival', async () => {\r\n const resultsSpy = sinon.spy();\r\n const searchService = new MockSearchService({\r\n asyncResponse: true,\r\n resultsSpy,\r\n });\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'single-result';\r\n await el.updateComplete;\r\n\r\n const fetchPromise = el.fetchPage(2);\r\n el.sortParam = { field: 'foo', direction: 'asc' };\r\n await fetchPromise;\r\n\r\n // If the different sort param causes the results to be discarded,\r\n // the results array should never be read.\r\n expect(resultsSpy.callCount).to.equal(0);\r\n });\r\n\r\n it('discards obsolete search results if sort param cleared before arrival', async () => {\r\n const resultsSpy = sinon.spy();\r\n const searchService = new MockSearchService({\r\n asyncResponse: true,\r\n resultsSpy,\r\n });\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'with-sort';\r\n await el.updateComplete;\r\n\r\n const fetchPromise = el.fetchPage(2);\r\n el.sortParam = null;\r\n await fetchPromise;\r\n\r\n // If the different sort param causes the results to be discarded,\r\n // the results array should never be read.\r\n expect(resultsSpy.callCount).to.equal(0);\r\n });\r\n\r\n it('sets sort properties when user changes sort', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n expect(el.selectedSort).to.equal(SortField.relevance);\r\n\r\n el.baseQuery = 'foo';\r\n await el.updateComplete;\r\n\r\n const sortBar = el.shadowRoot?.querySelector('sort-filter-bar');\r\n const sortSelector = sortBar?.shadowRoot?.querySelector(\r\n '#desktop-sort-selector'\r\n );\r\n expect(sortSelector).to.exist;\r\n\r\n // Click the title sorter\r\n [...(sortSelector?.children as HTMLCollection & Iterable<any>)] // tsc doesn't know children is iterable\r\n .find(child => child.textContent?.trim() === 'Title')\r\n ?.querySelector('a[href]')\r\n ?.click();\r\n\r\n await el.updateComplete;\r\n\r\n expect(el.selectedSort).to.equal(SortField.title);\r\n });\r\n\r\n it('scrolls to page', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n const infiniteScroller = el.shadowRoot?.querySelector(\r\n 'infinite-scroller'\r\n ) as InfiniteScroller;\r\n expect(infiniteScroller).to.exist;\r\n\r\n const oldScrollToCell = infiniteScroller.scrollToCell;\r\n const spy = sinon.spy();\r\n infiniteScroller.scrollToCell = spy;\r\n\r\n el.goToPage(1);\r\n\r\n // Give it a second to scroll\r\n await new Promise(res => {\r\n setTimeout(res, 1000);\r\n });\r\n\r\n expect(spy.callCount).to.equal(1);\r\n\r\n infiniteScroller.scrollToCell = oldScrollToCell;\r\n });\r\n\r\n it('refreshes when certain properties change - with some analytics event sampling', async () => {\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n const searchService = new MockSearchService();\r\n const collectionNameCache = new MockCollectionNameCache();\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser\r\n .analyticsHandler=${mockAnalyticsHandler}\r\n .searchService=${searchService}\r\n .collectionNameCache=${collectionNameCache}\r\n ></collection-browser>`\r\n );\r\n const infiniteScrollerRefreshSpy = sinon.spy();\r\n\r\n const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');\r\n (infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;\r\n expect(infiniteScrollerRefreshSpy.called).to.be.false;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);\r\n\r\n // testing: `loggedIn`\r\n el.loggedIn = true;\r\n await el.updateComplete;\r\n expect(infiniteScrollerRefreshSpy.called).to.be.true;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);\r\n\r\n el.loggedIn = false;\r\n await el.updateComplete;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);\r\n\r\n // testing: `displayMode`\r\n el.displayMode = 'list-compact';\r\n el.searchContext = 'beta-search';\r\n await el.updateComplete;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);\r\n\r\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');\r\n expect(mockAnalyticsHandler.callAction).to.equal('displayMode');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');\r\n\r\n el.displayMode = 'list-detail';\r\n await el.updateComplete;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);\r\n\r\n expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');\r\n expect(mockAnalyticsHandler.callAction).to.equal('displayMode');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');\r\n\r\n // testing: `baseNavigationUrl`\r\n el.baseNavigationUrl = 'https://funtestsite.com';\r\n await el.updateComplete;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);\r\n\r\n // testing: `baseImageUrl`\r\n el.baseImageUrl = 'https://funtestsiteforimages.com';\r\n await el.updateComplete;\r\n expect(infiniteScrollerRefreshSpy.callCount).to.equal(6);\r\n });\r\n\r\n it('query the search service for single result', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser .searchService=${searchService}>\r\n </collection-browser>`\r\n );\r\n\r\n el.baseQuery = 'single-result';\r\n await el.updateComplete;\r\n\r\n expect(\r\n el.shadowRoot?.querySelector('#big-results-label')?.textContent\r\n ).to.contains('Result');\r\n });\r\n\r\n it('`searchContext` prop helps describe where component is being used', async () => {\r\n const el = await fixture<CollectionBrowser>(\r\n html`<collection-browser></collection-browser>`\r\n );\r\n\r\n expect(el.searchContext).to.equal(analyticsCategories.default);\r\n\r\n el.searchContext = 'unicorn-search';\r\n await el.updateComplete;\r\n\r\n expect(el.searchContext).to.equal('unicorn-search');\r\n\r\n // property is reflected as attribute\r\n expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');\r\n });\r\n});\r\n"]}
@@ -1 +1 @@
1
- import '../../src/collection-facets/facets-template';
1
+ import '../../src/collection-facets/facets-template';
@@ -1,75 +1,75 @@
1
- import { expect, fixture } from '@open-wc/testing';
2
- import { html } from 'lit';
3
- import '../../src/collection-facets/facets-template';
4
- const facetGroup = {
5
- title: 'Media Type',
6
- key: 'mediatype',
7
- buckets: [
8
- { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },
9
- { displayText: 'movies', key: 'movies', count: 901, state: 'none' },
10
- { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },
11
- { displayText: 'data', key: 'data', count: 230, state: 'none' },
12
- { displayText: 'web', key: 'web', count: 453, state: 'none' },
13
- ],
14
- };
15
- describe('Render facets', () => {
16
- it('should render more facets template', async () => {
17
- var _a;
18
- const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
19
- await el.updateComplete;
20
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-row')).to.exist;
21
- });
22
- it('facets render on page', async () => {
23
- var _a;
1
+ import { expect, fixture } from '@open-wc/testing';
2
+ import { html } from 'lit';
3
+ import '../../src/collection-facets/facets-template';
4
+ const facetGroup = {
5
+ title: 'Media Type',
6
+ key: 'mediatype',
7
+ buckets: [
8
+ { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },
9
+ { displayText: 'movies', key: 'movies', count: 901, state: 'none' },
10
+ { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },
11
+ { displayText: 'data', key: 'data', count: 230, state: 'none' },
12
+ { displayText: 'web', key: 'web', count: 453, state: 'none' },
13
+ ],
14
+ };
15
+ describe('Render facets', () => {
16
+ it('should render more facets template', async () => {
17
+ var _a;
18
+ const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
19
+ await el.updateComplete;
20
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-row')).to.exist;
21
+ });
22
+ it('facets render on page', async () => {
23
+ var _a;
24
24
  const el = await fixture(html `<facets-template
25
25
  .facetGroup=${facetGroup}
26
26
  .renderOn=${'page'}
27
- ></facets-template>`);
28
- await el.updateComplete;
29
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-on-page')).to.exist;
30
- });
31
- it('facets render on modal', async () => {
32
- var _a;
27
+ ></facets-template>`);
28
+ await el.updateComplete;
29
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-on-page')).to.exist;
30
+ });
31
+ it('facets render on modal', async () => {
32
+ var _a;
33
33
  const el = await fixture(html `<facets-template
34
34
  .facetGroup=${facetGroup}
35
35
  .renderOn=${'modal'}
36
- ></facets-template>`);
37
- await el.updateComplete;
38
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-on-modal')).to.exist;
39
- });
40
- it('find facet-title and facet-count for perticular facet group', async () => {
41
- var _a, _b, _c;
42
- const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
43
- await el.updateComplete;
44
- const facetInfo = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-info-display');
45
- expect((_b = facetInfo === null || facetInfo === void 0 ? void 0 : facetInfo.querySelector('.facet-title')) === null || _b === void 0 ? void 0 : _b.textContent).equal('audio');
46
- expect((_c = facetInfo === null || facetInfo === void 0 ? void 0 : facetInfo.querySelector('.facet-count')) === null || _c === void 0 ? void 0 : _c.textContent).equal('1001');
47
- });
48
- it('find the hidden facet item', async () => {
49
- var _a;
50
- const selectedFacets = { ...facetGroup };
51
- selectedFacets.buckets[2].state = 'hidden'; // hide 'texts' mediatype
36
+ ></facets-template>`);
37
+ await el.updateComplete;
38
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-on-modal')).to.exist;
39
+ });
40
+ it('find facet-title and facet-count for perticular facet group', async () => {
41
+ var _a, _b, _c;
42
+ const el = await fixture(html `<facets-template .facetGroup=${facetGroup}></facets-template>`);
43
+ await el.updateComplete;
44
+ const facetInfo = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facet-info-display');
45
+ expect((_b = facetInfo === null || facetInfo === void 0 ? void 0 : facetInfo.querySelector('.facet-title')) === null || _b === void 0 ? void 0 : _b.textContent).equal('audio');
46
+ expect((_c = facetInfo === null || facetInfo === void 0 ? void 0 : facetInfo.querySelector('.facet-count')) === null || _c === void 0 ? void 0 : _c.textContent).equal('1001');
47
+ });
48
+ it('find the hidden facet item', async () => {
49
+ var _a;
50
+ const selectedFacets = { ...facetGroup };
51
+ selectedFacets.buckets[2].state = 'hidden'; // hide 'texts' mediatype
52
52
  const el = await fixture(html `<facets-template
53
53
  .facetGroup=${facetGroup}
54
54
  .selectedFacets=${selectedFacets}
55
- ></facets-template>`);
56
- await el.updateComplete;
57
- const hiddenFacet = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.hide-facet-icon')[0];
58
- // check title attribute for 'texts' mediatype
59
- expect(hiddenFacet === null || hiddenFacet === void 0 ? void 0 : hiddenFacet.getAttribute('title')).equal('Unhide mediatype: texts');
60
- });
61
- it('find the selected facet item', async () => {
62
- var _a;
63
- const selectedFacets = { ...facetGroup };
64
- selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype
55
+ ></facets-template>`);
56
+ await el.updateComplete;
57
+ const hiddenFacet = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.hide-facet-icon')[0];
58
+ // check title attribute for 'texts' mediatype
59
+ expect(hiddenFacet === null || hiddenFacet === void 0 ? void 0 : hiddenFacet.getAttribute('title')).equal('Unhide mediatype: texts');
60
+ });
61
+ it('find the selected facet item', async () => {
62
+ var _a;
63
+ const selectedFacets = { ...facetGroup };
64
+ selectedFacets.buckets[1].state = 'selected'; // select 'movies' mediatype
65
65
  const el = await fixture(html `<facets-template
66
66
  .facetGroup=${facetGroup}
67
67
  .selectedFacets=${selectedFacets}
68
- ></facets-template>`);
69
- await el.updateComplete;
70
- const selectedFacet = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.hide-facet-icon')[0];
71
- // check title attribute for 'movies' mediatype
72
- expect(selectedFacet === null || selectedFacet === void 0 ? void 0 : selectedFacet.getAttribute('title')).equal('Hide mediatype: movies');
73
- });
74
- });
68
+ ></facets-template>`);
69
+ await el.updateComplete;
70
+ const selectedFacet = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.hide-facet-icon')[0];
71
+ // check title attribute for 'movies' mediatype
72
+ expect(selectedFacet === null || selectedFacet === void 0 ? void 0 : selectedFacet.getAttribute('title')).equal('Hide mediatype: movies');
73
+ });
74
+ });
75
75
  //# sourceMappingURL=facets-template.test.js.map
@@ -1 +1 @@
1
- import '../../src/collection-facets/more-facets-content';
1
+ import '../../src/collection-facets/more-facets-content';
@@ -1,130 +1,130 @@
1
- /* eslint-disable import/no-duplicates */
2
- import { expect, fixture } from '@open-wc/testing';
3
- import { html } from 'lit';
4
- import { Aggregation } from '@internetarchive/search-service';
5
- import '../../src/collection-facets/more-facets-content';
6
- import { MockSearchService } from '../mocks/mock-search-service';
7
- import { MockAnalyticsHandler } from '../mocks/mock-analytics-handler';
8
- const selectedFacetsGroup = {
9
- title: 'Media Type',
10
- key: 'mediatype',
11
- buckets: [
12
- { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },
13
- { displayText: 'movies', key: 'movies', count: 901, state: 'none' },
14
- { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },
15
- { displayText: 'data', key: 'data', count: 230, state: 'none' },
16
- { displayText: 'web', key: 'web', count: 453, state: 'none' },
17
- ],
18
- };
19
- const aggregations = {
20
- collection: new Aggregation({
21
- buckets: [
22
- {
23
- key: 'foo',
24
- doc_count: 5,
25
- },
26
- ],
27
- }),
28
- };
29
- describe('More facets content', () => {
30
- it('should render more facets template', async () => {
31
- var _a;
32
- const el = await fixture(html `<more-facets-content></more-facets-content>`);
33
- el.facetsLoading = false;
34
- await el.updateComplete;
35
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-content')).to.exist;
36
- });
37
- it('should render more facets loader template', async () => {
38
- var _a;
39
- const el = await fixture(html `<more-facets-content></more-facets-content>`);
40
- el.facetsLoading = true;
41
- await el.updateComplete;
42
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-loader')).to.exist;
43
- });
44
- it('should render pagination for more facets', async () => {
45
- var _a;
46
- const searchService = new MockSearchService();
1
+ /* eslint-disable import/no-duplicates */
2
+ import { expect, fixture } from '@open-wc/testing';
3
+ import { html } from 'lit';
4
+ import { Aggregation } from '@internetarchive/search-service';
5
+ import '../../src/collection-facets/more-facets-content';
6
+ import { MockSearchService } from '../mocks/mock-search-service';
7
+ import { MockAnalyticsHandler } from '../mocks/mock-analytics-handler';
8
+ const selectedFacetsGroup = {
9
+ title: 'Media Type',
10
+ key: 'mediatype',
11
+ buckets: [
12
+ { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },
13
+ { displayText: 'movies', key: 'movies', count: 901, state: 'none' },
14
+ { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },
15
+ { displayText: 'data', key: 'data', count: 230, state: 'none' },
16
+ { displayText: 'web', key: 'web', count: 453, state: 'none' },
17
+ ],
18
+ };
19
+ const aggregations = {
20
+ collection: new Aggregation({
21
+ buckets: [
22
+ {
23
+ key: 'foo',
24
+ doc_count: 5,
25
+ },
26
+ ],
27
+ }),
28
+ };
29
+ describe('More facets content', () => {
30
+ it('should render more facets template', async () => {
31
+ var _a;
32
+ const el = await fixture(html `<more-facets-content></more-facets-content>`);
33
+ el.facetsLoading = false;
34
+ await el.updateComplete;
35
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-content')).to.exist;
36
+ });
37
+ it('should render more facets loader template', async () => {
38
+ var _a;
39
+ const el = await fixture(html `<more-facets-content></more-facets-content>`);
40
+ el.facetsLoading = true;
41
+ await el.updateComplete;
42
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-loader')).to.exist;
43
+ });
44
+ it('should render pagination for more facets', async () => {
45
+ var _a;
46
+ const searchService = new MockSearchService();
47
47
  const el = await fixture(html `<more-facets-content
48
48
  .searchService=${searchService}
49
- ></more-facets-content>`);
50
- el.facetKey = 'mediatype';
51
- el.facetsLoading = false;
52
- el.paginationSize = 6;
53
- await el.updateComplete;
54
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('more-facets-pagination')).to.exist;
55
- });
56
- it('query for more facets content using search service', async () => {
57
- var _a;
58
- const searchService = new MockSearchService();
49
+ ></more-facets-content>`);
50
+ el.facetKey = 'mediatype';
51
+ el.facetsLoading = false;
52
+ el.paginationSize = 6;
53
+ await el.updateComplete;
54
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('more-facets-pagination')).to.exist;
55
+ });
56
+ it('query for more facets content using search service', async () => {
57
+ var _a;
58
+ const searchService = new MockSearchService();
59
59
  const el = await fixture(html `<more-facets-content
60
60
  .searchService=${searchService}
61
- ></more-facets-content>`);
62
- el.facetKey = 'collection';
63
- el.fullQuery = 'title:hello';
64
- await el.updateComplete;
65
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('title:hello');
66
- });
67
- it('filter raw selectedFacets object', async () => {
68
- var _a;
69
- const searchService = new MockSearchService();
61
+ ></more-facets-content>`);
62
+ el.facetKey = 'collection';
63
+ el.fullQuery = 'title:hello';
64
+ await el.updateComplete;
65
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('title:hello');
66
+ });
67
+ it('filter raw selectedFacets object', async () => {
68
+ var _a;
69
+ const searchService = new MockSearchService();
70
70
  const el = await fixture(html `<more-facets-content
71
71
  .searchService=${searchService}
72
72
  .selectedFacets=${selectedFacetsGroup}
73
- ></more-facets-content>`);
74
- el.facetKey = 'collection';
75
- el.fullQuery = 'title:hello';
76
- await el.updateComplete;
77
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('title:hello');
78
- });
79
- it('combine selectedFacets and aggregationFacets and render on modal', async () => {
80
- var _a;
81
- const searchService = new MockSearchService();
73
+ ></more-facets-content>`);
74
+ el.facetKey = 'collection';
75
+ el.fullQuery = 'title:hello';
76
+ await el.updateComplete;
77
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('title:hello');
78
+ });
79
+ it('combine selectedFacets and aggregationFacets and render on modal', async () => {
80
+ var _a;
81
+ const searchService = new MockSearchService();
82
82
  const el = await fixture(html `<more-facets-content
83
83
  .searchService=${searchService}
84
84
  .selectedFacets=${selectedFacetsGroup}
85
85
  .aggregations=${aggregations}
86
- ></more-facets-content>`);
87
- await el.updateComplete;
88
- expect(el.facetGroupTitle).to.equal('Collection');
89
- const facetGroup = (_a = el.facetGroup) === null || _a === void 0 ? void 0 : _a.shift();
90
- expect(facetGroup === null || facetGroup === void 0 ? void 0 : facetGroup.key).to.equal('collection');
91
- expect(facetGroup === null || facetGroup === void 0 ? void 0 : facetGroup.title).to.equal('Collection');
92
- const bucket = facetGroup === null || facetGroup === void 0 ? void 0 : facetGroup.buckets[0];
93
- expect(bucket === null || bucket === void 0 ? void 0 : bucket.key).to.equal('foo');
94
- expect(bucket === null || bucket === void 0 ? void 0 : bucket.count).to.equal(5);
95
- });
96
- it('cancel button clicked event', async () => {
97
- var _a;
98
- const mockAnalyticsHandler = new MockAnalyticsHandler();
86
+ ></more-facets-content>`);
87
+ await el.updateComplete;
88
+ expect(el.facetGroupTitle).to.equal('Collection');
89
+ const facetGroup = (_a = el.facetGroup) === null || _a === void 0 ? void 0 : _a.shift();
90
+ expect(facetGroup === null || facetGroup === void 0 ? void 0 : facetGroup.key).to.equal('collection');
91
+ expect(facetGroup === null || facetGroup === void 0 ? void 0 : facetGroup.title).to.equal('Collection');
92
+ const bucket = facetGroup === null || facetGroup === void 0 ? void 0 : facetGroup.buckets[0];
93
+ expect(bucket === null || bucket === void 0 ? void 0 : bucket.key).to.equal('foo');
94
+ expect(bucket === null || bucket === void 0 ? void 0 : bucket.count).to.equal(5);
95
+ });
96
+ it('cancel button clicked event', async () => {
97
+ var _a;
98
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
99
99
  const el = await fixture(html `<more-facets-content
100
100
  .analyticsHandler=${mockAnalyticsHandler}
101
- ></more-facets-content>`);
102
- el.facetsLoading = false;
103
- el.paginationSize = 5;
104
- await el.updateComplete;
105
- // select cancel button
106
- const cancelButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.footer > .btn-cancel');
107
- cancelButton === null || cancelButton === void 0 ? void 0 : cancelButton.click();
108
- expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
109
- expect(mockAnalyticsHandler.callAction).to.equal('closeMoreFacetsModal');
110
- expect(mockAnalyticsHandler.callLabel).to.equal('undefined');
111
- });
112
- it('facet apply button clicked event', async () => {
113
- var _a;
114
- const mockAnalyticsHandler = new MockAnalyticsHandler();
101
+ ></more-facets-content>`);
102
+ el.facetsLoading = false;
103
+ el.paginationSize = 5;
104
+ await el.updateComplete;
105
+ // select cancel button
106
+ const cancelButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.footer > .btn-cancel');
107
+ cancelButton === null || cancelButton === void 0 ? void 0 : cancelButton.click();
108
+ expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
109
+ expect(mockAnalyticsHandler.callAction).to.equal('closeMoreFacetsModal');
110
+ expect(mockAnalyticsHandler.callLabel).to.equal('undefined');
111
+ });
112
+ it('facet apply button clicked event', async () => {
113
+ var _a;
114
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
115
115
  const el = await fixture(html `<more-facets-content
116
116
  .analyticsHandler=${mockAnalyticsHandler}
117
- ></more-facets-content>`);
118
- el.facetsLoading = false;
119
- el.paginationSize = 5;
120
- el.facetKey = 'collection';
121
- await el.updateComplete;
122
- // select submit button
123
- const submitButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.footer > .btn-submit');
124
- submitButton === null || submitButton === void 0 ? void 0 : submitButton.click();
125
- expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
126
- expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');
127
- expect(mockAnalyticsHandler.callLabel).to.equal('collection');
128
- });
129
- });
117
+ ></more-facets-content>`);
118
+ el.facetsLoading = false;
119
+ el.paginationSize = 5;
120
+ el.facetKey = 'collection';
121
+ await el.updateComplete;
122
+ // select submit button
123
+ const submitButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.footer > .btn-submit');
124
+ submitButton === null || submitButton === void 0 ? void 0 : submitButton.click();
125
+ expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
126
+ expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');
127
+ expect(mockAnalyticsHandler.callLabel).to.equal('collection');
128
+ });
129
+ });
130
130
  //# sourceMappingURL=more-facets-content.test.js.map
@@ -1 +1 @@
1
- import '../../src/collection-facets/more-facets-pagination';
1
+ import '../../src/collection-facets/more-facets-pagination';