@internetarchive/collection-browser 0.3.8 → 0.3.9

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 (204) 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 +48 -48
  12. package/dist/src/app-root.js +258 -258
  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 +278 -278
  68. package/dist/src/collection-browser.js +1105 -1105
  69. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  70. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  71. package/dist/src/collection-facets/facets-template.d.ts +16 -16
  72. package/dist/src/collection-facets/facets-template.js +125 -125
  73. package/dist/src/collection-facets/more-facets-content.d.ts +76 -76
  74. package/dist/src/collection-facets/more-facets-content.js +353 -353
  75. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  76. package/dist/src/collection-facets/more-facets-pagination.js +192 -192
  77. package/dist/src/collection-facets.d.ts +77 -77
  78. package/dist/src/collection-facets.js +388 -388
  79. package/dist/src/empty-placeholder.d.ts +11 -11
  80. package/dist/src/empty-placeholder.js +42 -42
  81. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  82. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  83. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  84. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  85. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  86. package/dist/src/mediatype/mediatype-config.js +85 -85
  87. package/dist/src/models.d.ts +103 -103
  88. package/dist/src/models.js +117 -117
  89. package/dist/src/restoration-state-handler.d.ts +46 -46
  90. package/dist/src/restoration-state-handler.js +230 -230
  91. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -9
  92. package/dist/src/sort-filter-bar/alpha-bar.js +41 -41
  93. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  94. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  95. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  96. package/dist/src/sort-filter-bar/img/list.js +2 -2
  97. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  98. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  99. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  100. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  101. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +107 -107
  102. package/dist/src/sort-filter-bar/sort-filter-bar.js +423 -423
  103. package/dist/src/styles/item-image-styles.d.ts +8 -8
  104. package/dist/src/styles/item-image-styles.js +9 -9
  105. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  106. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  107. package/dist/src/tiles/grid/account-tile.d.ts +8 -8
  108. package/dist/src/tiles/grid/account-tile.js +20 -20
  109. package/dist/src/tiles/grid/collection-tile.d.ts +7 -7
  110. package/dist/src/tiles/grid/collection-tile.js +23 -23
  111. package/dist/src/tiles/grid/item-tile.d.ts +24 -24
  112. package/dist/src/tiles/grid/item-tile.js +87 -87
  113. package/dist/src/tiles/grid/tile-stats.d.ts +10 -10
  114. package/dist/src/tiles/grid/tile-stats.js +40 -40
  115. package/dist/src/tiles/image-block.d.ts +17 -17
  116. package/dist/src/tiles/image-block.js +69 -69
  117. package/dist/src/tiles/item-image.d.ts +31 -31
  118. package/dist/src/tiles/item-image.js +103 -103
  119. package/dist/src/tiles/list/account-label.d.ts +1 -1
  120. package/dist/src/tiles/list/account-label.js +6 -6
  121. package/dist/src/tiles/list/date-label.d.ts +1 -1
  122. package/dist/src/tiles/list/date-label.js +12 -12
  123. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
  124. package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
  125. package/dist/src/tiles/list/tile-list-compact.d.ts +21 -21
  126. package/dist/src/tiles/list/tile-list-compact.js +93 -93
  127. package/dist/src/tiles/list/tile-list.d.ts +50 -50
  128. package/dist/src/tiles/list/tile-list.js +280 -275
  129. package/dist/src/tiles/list/tile-list.js.map +1 -1
  130. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  131. package/dist/src/tiles/mediatype-icon.js +47 -47
  132. package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -7
  133. package/dist/src/tiles/overlay/icon-overlay.js +30 -30
  134. package/dist/src/tiles/overlay/text-overlay.d.ts +8 -8
  135. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  136. package/dist/src/tiles/text-snippet-block.d.ts +29 -29
  137. package/dist/src/tiles/text-snippet-block.js +81 -81
  138. package/dist/src/tiles/tile-dispatcher.d.ts +36 -36
  139. package/dist/src/tiles/tile-dispatcher.js +128 -128
  140. package/dist/src/utils/analytics-events.d.ts +22 -22
  141. package/dist/src/utils/analytics-events.js +24 -24
  142. package/dist/src/utils/format-count.d.ts +7 -7
  143. package/dist/src/utils/format-count.js +76 -76
  144. package/dist/src/utils/format-date.d.ts +2 -2
  145. package/dist/src/utils/format-date.js +23 -23
  146. package/dist/test/collection-browser.test.d.ts +1 -1
  147. package/dist/test/collection-browser.test.js +575 -575
  148. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  149. package/dist/test/collection-facets/facets-template.test.js +62 -62
  150. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  151. package/dist/test/collection-facets/more-facets-content.test.js +114 -114
  152. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  153. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  154. package/dist/test/collection-facets.test.d.ts +2 -2
  155. package/dist/test/collection-facets.test.js +544 -544
  156. package/dist/test/empty-placeholder.test.d.ts +1 -1
  157. package/dist/test/empty-placeholder.test.js +33 -33
  158. package/dist/test/icon-overlay.test.d.ts +1 -1
  159. package/dist/test/icon-overlay.test.js +24 -24
  160. package/dist/test/image-block.test.d.ts +1 -1
  161. package/dist/test/image-block.test.js +48 -48
  162. package/dist/test/item-image.test.d.ts +1 -1
  163. package/dist/test/item-image.test.js +56 -56
  164. package/dist/test/mediatype-config.test.d.ts +1 -1
  165. package/dist/test/mediatype-config.test.js +16 -16
  166. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  167. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  168. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -7
  169. package/dist/test/mocks/mock-collection-name-cache.js +13 -13
  170. package/dist/test/mocks/mock-search-responses.d.ts +10 -10
  171. package/dist/test/mocks/mock-search-responses.js +271 -271
  172. package/dist/test/mocks/mock-search-service.d.ts +13 -13
  173. package/dist/test/mocks/mock-search-service.js +36 -36
  174. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  175. package/dist/test/restoration-state-handler.test.js +126 -126
  176. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  177. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +113 -113
  178. package/dist/test/text-overlay.test.d.ts +1 -1
  179. package/dist/test/text-overlay.test.js +41 -41
  180. package/dist/test/text-snippet-block.test.d.ts +1 -1
  181. package/dist/test/text-snippet-block.test.js +57 -57
  182. package/dist/test/tile-stats.test.d.ts +1 -1
  183. package/dist/test/tile-stats.test.js +33 -33
  184. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  185. package/dist/test/tiles/grid/item-tile.test.js +107 -107
  186. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  187. package/dist/test/tiles/list/tile-list-compact.test.js +92 -92
  188. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  189. package/dist/test/tiles/list/tile-list.test.js +136 -92
  190. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  191. package/dist/test/utils/format-count.test.d.ts +1 -1
  192. package/dist/test/utils/format-count.test.js +23 -23
  193. package/dist/test/utils/format-date.test.d.ts +1 -1
  194. package/dist/test/utils/format-date.test.js +17 -17
  195. package/index.html +24 -24
  196. package/local.archive.org.cert +86 -86
  197. package/local.archive.org.key +27 -27
  198. package/package.json +1 -1
  199. package/renovate.json +6 -6
  200. package/src/tiles/list/tile-list.ts +12 -5
  201. package/test/tiles/list/tile-list.test.ts +51 -0
  202. package/tsconfig.json +21 -21
  203. package/web-dev-server.config.mjs +30 -30
  204. package/web-test-runner.config.mjs +41 -41
@@ -1,621 +1,621 @@
1
- /* eslint-disable import/no-duplicates */
2
- import { expect, fixture } from '@open-wc/testing';
3
- import { html } from 'lit';
4
- import sinon from 'sinon';
5
- import { SearchType } from '@internetarchive/search-service';
6
- import '../src/collection-browser';
7
- import { defaultSelectedFacets, SortField, } from '../src/models';
8
- import { MockSearchService } from './mocks/mock-search-service';
9
- import { MockCollectionNameCache } from './mocks/mock-collection-name-cache';
10
- import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
11
- import { analyticsCategories } from '../src/utils/analytics-events';
12
- describe('Collection Browser', () => {
13
- beforeEach(async () => {
14
- // Apparently query params set by one test can bleed into other tests.
15
- // Since collection browser restores its state from certain query params, we need
16
- // to clear these before each test to ensure they run in isolation from one another.
17
- const url = new URL(window.location.href);
18
- const { searchParams } = url;
19
- searchParams.delete('sin');
20
- searchParams.delete('sort');
21
- searchParams.delete('query');
22
- searchParams.delete('page');
23
- searchParams.delete('and[]');
24
- searchParams.delete('not[]');
25
- window.history.replaceState({}, '', url);
26
- });
27
- it('clear existing filter for facets & sort-bar', async () => {
28
- const el = await fixture(html `<collection-browser></collection-browser>`);
29
- el.selectedSort = 'title';
30
- await el.updateComplete;
31
- el.clearFilters();
32
- expect(el.selectedFacets).to.equal(defaultSelectedFacets);
33
- expect(el.selectedSort).to.equal('relevance');
34
- expect(el.sortDirection).to.null;
35
- expect(el.sortParam).to.null;
36
- expect(el.selectedCreatorFilter).to.null;
37
- expect(el.selectedTitleFilter).to.null;
38
- });
39
- it('filterBy creator with analytics', async () => {
40
- const mockAnalyticsHandler = new MockAnalyticsHandler();
1
+ /* eslint-disable import/no-duplicates */
2
+ import { expect, fixture } from '@open-wc/testing';
3
+ import { html } from 'lit';
4
+ import sinon from 'sinon';
5
+ import { SearchType } from '@internetarchive/search-service';
6
+ import '../src/collection-browser';
7
+ import { defaultSelectedFacets, SortField, } from '../src/models';
8
+ import { MockSearchService } from './mocks/mock-search-service';
9
+ import { MockCollectionNameCache } from './mocks/mock-collection-name-cache';
10
+ import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
11
+ import { analyticsCategories } from '../src/utils/analytics-events';
12
+ describe('Collection Browser', () => {
13
+ beforeEach(async () => {
14
+ // Apparently query params set by one test can bleed into other tests.
15
+ // Since collection browser restores its state from certain query params, we need
16
+ // to clear these before each test to ensure they run in isolation from one another.
17
+ const url = new URL(window.location.href);
18
+ const { searchParams } = url;
19
+ searchParams.delete('sin');
20
+ searchParams.delete('sort');
21
+ searchParams.delete('query');
22
+ searchParams.delete('page');
23
+ searchParams.delete('and[]');
24
+ searchParams.delete('not[]');
25
+ window.history.replaceState({}, '', url);
26
+ });
27
+ it('clear existing filter for facets & sort-bar', async () => {
28
+ const el = await fixture(html `<collection-browser></collection-browser>`);
29
+ el.selectedSort = 'title';
30
+ await el.updateComplete;
31
+ el.clearFilters();
32
+ expect(el.selectedFacets).to.equal(defaultSelectedFacets);
33
+ expect(el.selectedSort).to.equal('relevance');
34
+ expect(el.sortDirection).to.null;
35
+ expect(el.sortParam).to.null;
36
+ expect(el.selectedCreatorFilter).to.null;
37
+ expect(el.selectedTitleFilter).to.null;
38
+ });
39
+ it('filterBy creator with analytics', async () => {
40
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
41
41
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
42
- </collection-browser>`);
43
- el.searchContext = 'betaSearchService';
44
- el.selectedCreatorFilter = 'A';
45
- await el.updateComplete;
46
- expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
47
- expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
48
- expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
49
- el.clearFilters();
50
- await el.updateComplete;
51
- expect(el.selectedTitleFilter).to.null;
52
- expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
53
- expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
54
- expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
55
- });
56
- it('filterBy title with analytics', async () => {
57
- const mockAnalyticsHandler = new MockAnalyticsHandler();
42
+ </collection-browser>`);
43
+ el.searchContext = 'betaSearchService';
44
+ el.selectedCreatorFilter = 'A';
45
+ await el.updateComplete;
46
+ expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
47
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
48
+ expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
49
+ el.clearFilters();
50
+ await el.updateComplete;
51
+ expect(el.selectedTitleFilter).to.null;
52
+ expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
53
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
54
+ expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
55
+ });
56
+ it('filterBy title with analytics', async () => {
57
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
58
58
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
59
- </collection-browser>`);
60
- el.searchContext = 'beta-search-service';
61
- el.selectedSort = 'title';
62
- el.selectedTitleFilter = 'A';
63
- await el.updateComplete;
64
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
65
- expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
66
- expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
67
- el.clearFilters();
68
- await el.updateComplete;
69
- expect(el.selectedTitleFilter).to.null;
70
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
71
- expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
72
- expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
73
- });
74
- it('selected facets with analytics - not negative facets', async () => {
75
- const mockAnalyticsHandler = new MockAnalyticsHandler();
76
- const mediaTypeBucket = { count: 123, state: 'selected' };
77
- const mockedSelectedFacets = {
78
- subject: {},
79
- lending: {},
80
- mediatype: { data: mediaTypeBucket },
81
- language: {},
82
- creator: {},
83
- collection: {},
84
- year: {},
85
- };
59
+ </collection-browser>`);
60
+ el.searchContext = 'beta-search-service';
61
+ el.selectedSort = 'title';
62
+ el.selectedTitleFilter = 'A';
63
+ await el.updateComplete;
64
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
65
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
66
+ expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
67
+ el.clearFilters();
68
+ await el.updateComplete;
69
+ expect(el.selectedTitleFilter).to.null;
70
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
71
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
72
+ expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
73
+ });
74
+ it('selected facets with analytics - not negative facets', async () => {
75
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
76
+ const mediaTypeBucket = { count: 123, state: 'selected' };
77
+ const mockedSelectedFacets = {
78
+ subject: {},
79
+ lending: {},
80
+ mediatype: { data: mediaTypeBucket },
81
+ language: {},
82
+ creator: {},
83
+ collection: {},
84
+ year: {},
85
+ };
86
86
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
87
- </collection-browser>`);
88
- el.searchContext = 'search-service';
89
- el.selectedFacets = mockedSelectedFacets;
90
- await el.updateComplete;
91
- el.facetClickHandler('mediatype', true, false);
92
- expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
93
- expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');
94
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
95
- el.facetClickHandler('mediatype', false, false);
96
- expect(el.selectedFacets).to.equal(mockedSelectedFacets);
97
- expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
98
- expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');
99
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
100
- });
101
- it('selected facets with analytics - negative facets', async () => {
102
- const mockAnalyticsHandler = new MockAnalyticsHandler();
103
- const mediaTypeBucket = { count: 123, state: 'selected' };
104
- const mockedSelectedFacets = {
105
- subject: {},
106
- lending: {},
107
- mediatype: { data: mediaTypeBucket },
108
- language: {},
109
- creator: {},
110
- collection: {},
111
- year: {},
112
- };
87
+ </collection-browser>`);
88
+ el.searchContext = 'search-service';
89
+ el.selectedFacets = mockedSelectedFacets;
90
+ await el.updateComplete;
91
+ el.facetClickHandler('mediatype', true, false);
92
+ expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
93
+ expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');
94
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
95
+ el.facetClickHandler('mediatype', false, false);
96
+ expect(el.selectedFacets).to.equal(mockedSelectedFacets);
97
+ expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
98
+ expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');
99
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
100
+ });
101
+ it('selected facets with analytics - negative facets', async () => {
102
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
103
+ const mediaTypeBucket = { count: 123, state: 'selected' };
104
+ const mockedSelectedFacets = {
105
+ subject: {},
106
+ lending: {},
107
+ mediatype: { data: mediaTypeBucket },
108
+ language: {},
109
+ creator: {},
110
+ collection: {},
111
+ year: {},
112
+ };
113
113
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
114
- </collection-browser>`);
115
- el.searchContext = 'beta-search-service';
116
- el.selectedFacets = mockedSelectedFacets;
117
- await el.updateComplete;
118
- el.facetClickHandler('mediatype', true, true);
119
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
120
- expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');
121
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
122
- el.facetClickHandler('mediatype', false, true);
123
- expect(el.selectedFacets).to.equal(mockedSelectedFacets);
124
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
125
- expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');
126
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
127
- });
128
- it('should render with a sort bar, facets, and infinite scroller', async () => {
129
- var _a, _b, _c;
130
- const searchService = new MockSearchService();
114
+ </collection-browser>`);
115
+ el.searchContext = 'beta-search-service';
116
+ el.selectedFacets = mockedSelectedFacets;
117
+ await el.updateComplete;
118
+ el.facetClickHandler('mediatype', true, true);
119
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
120
+ expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');
121
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
122
+ el.facetClickHandler('mediatype', false, true);
123
+ expect(el.selectedFacets).to.equal(mockedSelectedFacets);
124
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
125
+ expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');
126
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
127
+ });
128
+ it('should render with a sort bar, facets, and infinite scroller', async () => {
129
+ var _a, _b, _c;
130
+ const searchService = new MockSearchService();
131
131
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
132
- </collection-browser>`);
133
- el.baseQuery = 'hello';
134
- await el.updateComplete;
135
- const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
136
- const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
137
- const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
138
- expect(facets).to.exist;
139
- expect(sortBar).to.exist;
140
- expect(infiniteScroller).to.exist;
141
- });
142
- it('queries the search service when given a base query', async () => {
143
- var _a, _b, _c;
144
- const searchService = new MockSearchService();
132
+ </collection-browser>`);
133
+ el.baseQuery = 'hello';
134
+ await el.updateComplete;
135
+ const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
136
+ const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
137
+ const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
138
+ expect(facets).to.exist;
139
+ expect(sortBar).to.exist;
140
+ expect(infiniteScroller).to.exist;
141
+ });
142
+ it('queries the search service when given a base query', async () => {
143
+ var _a, _b, _c;
144
+ const searchService = new MockSearchService();
145
145
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
146
- </collection-browser>`);
147
- el.baseQuery = 'collection:foo';
148
- await el.updateComplete;
149
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
150
- expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
151
- });
152
- it('queries the search service with a metadata search', async () => {
153
- var _a, _b, _c;
154
- const searchService = new MockSearchService();
146
+ </collection-browser>`);
147
+ el.baseQuery = 'collection:foo';
148
+ await el.updateComplete;
149
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
150
+ expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
151
+ });
152
+ it('queries the search service with a metadata search', async () => {
153
+ var _a, _b, _c;
154
+ const searchService = new MockSearchService();
155
155
  const el = await fixture(html ` <collection-browser
156
156
  .searchService=${searchService}
157
157
  .searchType=${SearchType.METADATA}
158
158
  >
159
- </collection-browser>`);
160
- el.baseQuery = 'collection:foo';
161
- await el.updateComplete;
162
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
163
- expect(searchService.searchType).to.equal(SearchType.METADATA);
164
- expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
165
- });
166
- it('queries the search service with a fulltext search', async () => {
167
- var _a, _b, _c;
168
- const searchService = new MockSearchService();
159
+ </collection-browser>`);
160
+ el.baseQuery = 'collection:foo';
161
+ await el.updateComplete;
162
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
163
+ expect(searchService.searchType).to.equal(SearchType.METADATA);
164
+ expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
165
+ });
166
+ it('queries the search service with a fulltext search', async () => {
167
+ var _a, _b, _c;
168
+ const searchService = new MockSearchService();
169
169
  const el = await fixture(html ` <collection-browser
170
170
  .searchService=${searchService}
171
171
  .searchType=${SearchType.FULLTEXT}
172
172
  >
173
- </collection-browser>`);
174
- el.baseQuery = 'collection:foo';
175
- await el.updateComplete;
176
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
177
- expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
178
- expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
179
- });
180
- it('queries the search service with facets selected/negated', async () => {
181
- var _a;
182
- const searchService = new MockSearchService();
183
- const selectedFacets = {
184
- subject: {
185
- foo: {
186
- key: 'foo',
187
- count: 1,
188
- state: 'selected',
189
- },
190
- bar: {
191
- key: 'bar',
192
- count: 2,
193
- state: 'hidden',
194
- },
195
- },
196
- lending: {},
197
- mediatype: {},
198
- language: {
199
- en: {
200
- key: 'en',
201
- count: 1,
202
- state: 'selected',
203
- },
204
- },
205
- creator: {},
206
- collection: {},
207
- year: {},
208
- };
173
+ </collection-browser>`);
174
+ el.baseQuery = 'collection:foo';
175
+ await el.updateComplete;
176
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
177
+ expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
178
+ expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
179
+ });
180
+ it('queries the search service with facets selected/negated', async () => {
181
+ var _a;
182
+ const searchService = new MockSearchService();
183
+ const selectedFacets = {
184
+ subject: {
185
+ foo: {
186
+ key: 'foo',
187
+ count: 1,
188
+ state: 'selected',
189
+ },
190
+ bar: {
191
+ key: 'bar',
192
+ count: 2,
193
+ state: 'hidden',
194
+ },
195
+ },
196
+ lending: {},
197
+ mediatype: {},
198
+ language: {
199
+ en: {
200
+ key: 'en',
201
+ count: 1,
202
+ state: 'selected',
203
+ },
204
+ },
205
+ creator: {},
206
+ collection: {},
207
+ year: {},
208
+ };
209
209
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
210
- </collection-browser>`);
211
- el.baseQuery = 'collection:foo';
212
- el.selectedFacets = selectedFacets;
213
- await el.updateComplete;
214
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo AND (subject:("foo" OR -"bar") AND language:("en"))');
215
- });
216
- it('fires a separate date histogram query when year facets are applied', async () => {
217
- var _a, _b, _c;
218
- const searchService = new MockSearchService();
219
- const selectedFacets = {
220
- subject: {},
221
- lending: {},
222
- mediatype: {},
223
- language: {},
224
- creator: {},
225
- collection: {},
226
- year: {
227
- '2000': {
228
- key: '2000',
229
- state: 'selected',
230
- count: 123,
231
- },
232
- },
233
- };
210
+ </collection-browser>`);
211
+ el.baseQuery = 'collection:foo';
212
+ el.selectedFacets = selectedFacets;
213
+ await el.updateComplete;
214
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo AND (subject:("foo" OR -"bar") AND language:("en"))');
215
+ });
216
+ it('fires a separate date histogram query when year facets are applied', async () => {
217
+ var _a, _b, _c;
218
+ const searchService = new MockSearchService();
219
+ const selectedFacets = {
220
+ subject: {},
221
+ lending: {},
222
+ mediatype: {},
223
+ language: {},
224
+ creator: {},
225
+ collection: {},
226
+ year: {
227
+ '2000': {
228
+ key: '2000',
229
+ state: 'selected',
230
+ count: 123,
231
+ },
232
+ },
233
+ };
234
234
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
235
- </collection-browser>`);
236
- el.baseQuery = 'collection:foo';
237
- el.showHistogramDatePicker = true;
238
- el.selectedFacets = selectedFacets;
239
- await el.updateComplete;
240
- expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.deep.equal(['year']); // Explicitly requests year aggregations
241
- expect((_c = searchService.searchParams) === null || _c === void 0 ? void 0 : _c.query).to.equal('collection:foo' // No date clause on query
242
- );
243
- });
244
- it('fires a separate date histogram query when a date range is applied', async () => {
245
- var _a, _b, _c;
246
- const searchService = new MockSearchService();
235
+ </collection-browser>`);
236
+ el.baseQuery = 'collection:foo';
237
+ el.showHistogramDatePicker = true;
238
+ el.selectedFacets = selectedFacets;
239
+ await el.updateComplete;
240
+ expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.deep.equal(['year']); // Explicitly requests year aggregations
241
+ expect((_c = searchService.searchParams) === null || _c === void 0 ? void 0 : _c.query).to.equal('collection:foo' // No date clause on query
242
+ );
243
+ });
244
+ it('fires a separate date histogram query when a date range is applied', async () => {
245
+ var _a, _b, _c;
246
+ const searchService = new MockSearchService();
247
247
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
248
- </collection-browser>`);
249
- el.baseQuery = 'collection:foo';
250
- el.showHistogramDatePicker = true;
251
- el.dateRangeQueryClause = 'year:[1995 TO 2005]';
252
- await el.updateComplete;
253
- expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.deep.equal(['year']); // Explicitly requests year aggregations
254
- expect((_c = searchService.searchParams) === null || _c === void 0 ? void 0 : _c.query).to.equal('collection:foo' // No date clause on query
255
- );
256
- });
257
- it('does not fire a separate date histogram query when no date filters are applied', async () => {
258
- var _a, _b;
259
- const searchService = new MockSearchService();
248
+ </collection-browser>`);
249
+ el.baseQuery = 'collection:foo';
250
+ el.showHistogramDatePicker = true;
251
+ el.dateRangeQueryClause = 'year:[1995 TO 2005]';
252
+ await el.updateComplete;
253
+ expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.deep.equal(['year']); // Explicitly requests year aggregations
254
+ expect((_c = searchService.searchParams) === null || _c === void 0 ? void 0 : _c.query).to.equal('collection:foo' // No date clause on query
255
+ );
256
+ });
257
+ it('does not fire a separate date histogram query when no date filters are applied', async () => {
258
+ var _a, _b;
259
+ const searchService = new MockSearchService();
260
260
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
261
- </collection-browser>`);
262
- el.baseQuery = 'collection:foo';
263
- el.showHistogramDatePicker = true;
264
- await el.updateComplete;
265
- expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.satisfy((aggTypes) => !aggTypes || !aggTypes.includes('year') // Not requesting year aggregations explicitly
266
- );
267
- });
268
- it('does not fire a separate date histogram query when date picker is disabled', async () => {
269
- var _a, _b;
270
- const searchService = new MockSearchService();
261
+ </collection-browser>`);
262
+ el.baseQuery = 'collection:foo';
263
+ el.showHistogramDatePicker = true;
264
+ await el.updateComplete;
265
+ expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.satisfy((aggTypes) => !aggTypes || !aggTypes.includes('year') // Not requesting year aggregations explicitly
266
+ );
267
+ });
268
+ it('does not fire a separate date histogram query when date picker is disabled', async () => {
269
+ var _a, _b;
270
+ const searchService = new MockSearchService();
271
271
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
272
- </collection-browser>`);
273
- el.baseQuery = 'collection:foo';
274
- el.showHistogramDatePicker = false;
275
- el.dateRangeQueryClause = 'year:[1995 TO 2005]';
276
- await el.updateComplete;
277
- expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.satisfy((aggTypes) => !aggTypes || !aggTypes.includes('year') // Not requesting year aggregations explicitly
278
- );
279
- });
280
- it('fails gracefully if no search service provided', async () => {
281
- var _a;
282
- const el = await fixture(html `<collection-browser></collection-browser>`);
283
- el.baseQuery = 'collection:foo';
284
- await el.updateComplete;
285
- // This shouldn't throw an error
286
- expect(el.fetchPage(2)).to.exist;
287
- // Should continue showing the empty placeholder
288
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder')).to.exist;
289
- });
290
- it('restores search type from URL param', async () => {
291
- // Add a sin=TXT param to the URL
292
- const url = new URL(window.location.href);
293
- url.searchParams.append('sin', 'TXT');
294
- window.history.replaceState({}, '', url);
295
- const searchService = new MockSearchService();
272
+ </collection-browser>`);
273
+ el.baseQuery = 'collection:foo';
274
+ el.showHistogramDatePicker = false;
275
+ el.dateRangeQueryClause = 'year:[1995 TO 2005]';
276
+ await el.updateComplete;
277
+ expect((_b = (_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.aggregations) === null || _b === void 0 ? void 0 : _b.simpleParams).to.satisfy((aggTypes) => !aggTypes || !aggTypes.includes('year') // Not requesting year aggregations explicitly
278
+ );
279
+ });
280
+ it('fails gracefully if no search service provided', async () => {
281
+ var _a;
282
+ const el = await fixture(html `<collection-browser></collection-browser>`);
283
+ el.baseQuery = 'collection:foo';
284
+ await el.updateComplete;
285
+ // This shouldn't throw an error
286
+ expect(el.fetchPage(2)).to.exist;
287
+ // Should continue showing the empty placeholder
288
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder')).to.exist;
289
+ });
290
+ it('restores search type from URL param', async () => {
291
+ // Add a sin=TXT param to the URL
292
+ const url = new URL(window.location.href);
293
+ url.searchParams.append('sin', 'TXT');
294
+ window.history.replaceState({}, '', url);
295
+ const searchService = new MockSearchService();
296
296
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
297
- </collection-browser>`);
298
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
299
- });
300
- it('applies loggedin flag to tile models if needed', async () => {
301
- var _a;
302
- const searchService = new MockSearchService();
297
+ </collection-browser>`);
298
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
299
+ });
300
+ it('applies loggedin flag to tile models if needed', async () => {
301
+ var _a;
302
+ const searchService = new MockSearchService();
303
303
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
304
- </collection-browser>`);
305
- el.baseQuery = 'loggedin';
306
- await el.updateComplete;
307
- const cellTemplate = el.cellForIndex(0);
308
- expect(cellTemplate).to.exist;
309
- const cell = await fixture(cellTemplate);
310
- expect(cell).to.exist;
311
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
312
- });
313
- it('applies no-preview flag to tile models if needed', async () => {
314
- var _a;
315
- const searchService = new MockSearchService();
304
+ </collection-browser>`);
305
+ el.baseQuery = 'loggedin';
306
+ await el.updateComplete;
307
+ const cellTemplate = el.cellForIndex(0);
308
+ expect(cellTemplate).to.exist;
309
+ const cell = await fixture(cellTemplate);
310
+ expect(cell).to.exist;
311
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
312
+ });
313
+ it('applies no-preview flag to tile models if needed', async () => {
314
+ var _a;
315
+ const searchService = new MockSearchService();
316
316
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
317
- </collection-browser>`);
318
- el.baseQuery = 'no-preview';
319
- await el.updateComplete;
320
- const cellTemplate = el.cellForIndex(0);
321
- expect(cellTemplate).to.exist;
322
- const cell = await fixture(cellTemplate);
323
- expect(cell).to.exist;
324
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.contentWarning).to.be.true;
325
- });
326
- it('both loggedin and no-preview flags can be set simultaneously', async () => {
327
- var _a, _b;
328
- const searchService = new MockSearchService();
317
+ </collection-browser>`);
318
+ el.baseQuery = 'no-preview';
319
+ await el.updateComplete;
320
+ const cellTemplate = el.cellForIndex(0);
321
+ expect(cellTemplate).to.exist;
322
+ const cell = await fixture(cellTemplate);
323
+ expect(cell).to.exist;
324
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.contentWarning).to.be.true;
325
+ });
326
+ it('both loggedin and no-preview flags can be set simultaneously', async () => {
327
+ var _a, _b;
328
+ const searchService = new MockSearchService();
329
329
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
330
- </collection-browser>`);
331
- el.baseQuery = 'loggedin-no-preview';
332
- await el.updateComplete;
333
- const cellTemplate = el.cellForIndex(0);
334
- expect(cellTemplate).to.exist;
335
- const cell = await fixture(cellTemplate);
336
- expect(cell).to.exist;
337
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
338
- expect((_b = cell.model) === null || _b === void 0 ? void 0 : _b.contentWarning).to.be.true;
339
- });
340
- it('joins full description array into a single string with line breaks', async () => {
341
- var _a;
342
- const searchService = new MockSearchService();
330
+ </collection-browser>`);
331
+ el.baseQuery = 'loggedin-no-preview';
332
+ await el.updateComplete;
333
+ const cellTemplate = el.cellForIndex(0);
334
+ expect(cellTemplate).to.exist;
335
+ const cell = await fixture(cellTemplate);
336
+ expect(cell).to.exist;
337
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
338
+ expect((_b = cell.model) === null || _b === void 0 ? void 0 : _b.contentWarning).to.be.true;
339
+ });
340
+ it('joins full description array into a single string with line breaks', async () => {
341
+ var _a;
342
+ const searchService = new MockSearchService();
343
343
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
344
- </collection-browser>`);
345
- // This query receives an array description like ['line1', 'line2']
346
- el.baseQuery = 'multi-line-description';
347
- await el.updateComplete;
348
- const cellTemplate = el.cellForIndex(0);
349
- expect(cellTemplate).to.exist;
350
- const cell = await fixture(cellTemplate);
351
- expect(cell).to.exist;
352
- // Actual model description should be joined
353
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.description).to.equal('line1\nline2');
354
- });
355
- it('can search on demand if only search type has changed', async () => {
356
- const searchService = new MockSearchService();
344
+ </collection-browser>`);
345
+ // This query receives an array description like ['line1', 'line2']
346
+ el.baseQuery = 'multi-line-description';
347
+ await el.updateComplete;
348
+ const cellTemplate = el.cellForIndex(0);
349
+ expect(cellTemplate).to.exist;
350
+ const cell = await fixture(cellTemplate);
351
+ expect(cell).to.exist;
352
+ // Actual model description should be joined
353
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.description).to.equal('line1\nline2');
354
+ });
355
+ it('can search on demand if only search type has changed', async () => {
356
+ const searchService = new MockSearchService();
357
357
  const el = await fixture(html `<collection-browser
358
358
  .searchService=${searchService}
359
359
  .searchType=${SearchType.METADATA}
360
- ></collection-browser>`);
361
- el.baseQuery = 'collection:foo';
362
- await el.updateComplete;
363
- el.searchType = SearchType.FULLTEXT;
364
- await el.updateComplete;
365
- // Haven't performed the search yet
366
- expect(searchService.searchType).to.equal(SearchType.METADATA);
367
- el.requestSearch();
368
- expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
369
- });
370
- it('queries for collection names after a fetch', async () => {
371
- const searchService = new MockSearchService();
372
- const collectionNameCache = new MockCollectionNameCache();
360
+ ></collection-browser>`);
361
+ el.baseQuery = 'collection:foo';
362
+ await el.updateComplete;
363
+ el.searchType = SearchType.FULLTEXT;
364
+ await el.updateComplete;
365
+ // Haven't performed the search yet
366
+ expect(searchService.searchType).to.equal(SearchType.METADATA);
367
+ el.requestSearch();
368
+ expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
369
+ });
370
+ it('queries for collection names after a fetch', async () => {
371
+ const searchService = new MockSearchService();
372
+ const collectionNameCache = new MockCollectionNameCache();
373
373
  const el = await fixture(html `<collection-browser
374
374
  .searchService=${searchService}
375
375
  .collectionNameCache=${collectionNameCache}
376
376
  >
377
- </collection-browser>`);
378
- el.baseQuery = 'collection:foo';
379
- await el.updateComplete;
380
- expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([
381
- 'foo',
382
- 'bar',
383
- 'baz',
384
- 'boop',
385
- ]);
386
- });
387
- it('keeps search results from fetch if no change to query or sort param', async () => {
388
- const resultsSpy = sinon.spy();
389
- const searchService = new MockSearchService({
390
- asyncResponse: true,
391
- resultsSpy,
392
- });
377
+ </collection-browser>`);
378
+ el.baseQuery = 'collection:foo';
379
+ await el.updateComplete;
380
+ expect(collectionNameCache.preloadIdentifiersRequested).to.deep.equal([
381
+ 'foo',
382
+ 'bar',
383
+ 'baz',
384
+ 'boop',
385
+ ]);
386
+ });
387
+ it('keeps search results from fetch if no change to query or sort param', async () => {
388
+ const resultsSpy = sinon.spy();
389
+ const searchService = new MockSearchService({
390
+ asyncResponse: true,
391
+ resultsSpy,
392
+ });
393
393
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
394
- </collection-browser>`);
395
- el.baseQuery = 'with-sort';
396
- el.sortParam = { field: 'foo', direction: 'asc' };
397
- await el.updateComplete;
398
- await el.fetchPage(2);
399
- // If there is no change to the query or sort param during the fetch, the results
400
- // should be read.
401
- expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);
402
- });
403
- it('discards obsolete search results if sort params changed before arrival', async () => {
404
- const resultsSpy = sinon.spy();
405
- const searchService = new MockSearchService({
406
- asyncResponse: true,
407
- resultsSpy,
408
- });
394
+ </collection-browser>`);
395
+ el.baseQuery = 'with-sort';
396
+ el.sortParam = { field: 'foo', direction: 'asc' };
397
+ await el.updateComplete;
398
+ await el.fetchPage(2);
399
+ // If there is no change to the query or sort param during the fetch, the results
400
+ // should be read.
401
+ expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);
402
+ });
403
+ it('discards obsolete search results if sort params changed before arrival', async () => {
404
+ const resultsSpy = sinon.spy();
405
+ const searchService = new MockSearchService({
406
+ asyncResponse: true,
407
+ resultsSpy,
408
+ });
409
409
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
410
- </collection-browser>`);
411
- el.baseQuery = 'with-sort';
412
- el.sortParam = { field: 'foo', direction: 'asc' };
413
- await el.updateComplete;
414
- const fetchPromise = el.fetchPage(2);
415
- el.sortParam = { field: 'foo', direction: 'desc' };
416
- await fetchPromise;
417
- // If the different sort param causes the results to be discarded,
418
- // the results array should never be read.
419
- expect(resultsSpy.callCount).to.equal(0);
420
- });
421
- it('discards obsolete search results if sort param added before arrival', async () => {
422
- const resultsSpy = sinon.spy();
423
- const searchService = new MockSearchService({
424
- asyncResponse: true,
425
- resultsSpy,
426
- });
410
+ </collection-browser>`);
411
+ el.baseQuery = 'with-sort';
412
+ el.sortParam = { field: 'foo', direction: 'asc' };
413
+ await el.updateComplete;
414
+ const fetchPromise = el.fetchPage(2);
415
+ el.sortParam = { field: 'foo', direction: 'desc' };
416
+ await fetchPromise;
417
+ // If the different sort param causes the results to be discarded,
418
+ // the results array should never be read.
419
+ expect(resultsSpy.callCount).to.equal(0);
420
+ });
421
+ it('discards obsolete search results if sort param added before arrival', async () => {
422
+ const resultsSpy = sinon.spy();
423
+ const searchService = new MockSearchService({
424
+ asyncResponse: true,
425
+ resultsSpy,
426
+ });
427
427
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
428
- </collection-browser>`);
429
- el.baseQuery = 'single-result';
430
- await el.updateComplete;
431
- const fetchPromise = el.fetchPage(2);
432
- el.sortParam = { field: 'foo', direction: 'asc' };
433
- await fetchPromise;
434
- // If the different sort param causes the results to be discarded,
435
- // the results array should never be read.
436
- expect(resultsSpy.callCount).to.equal(0);
437
- });
438
- it('discards obsolete search results if sort param cleared before arrival', async () => {
439
- const resultsSpy = sinon.spy();
440
- const searchService = new MockSearchService({
441
- asyncResponse: true,
442
- resultsSpy,
443
- });
428
+ </collection-browser>`);
429
+ el.baseQuery = 'single-result';
430
+ await el.updateComplete;
431
+ const fetchPromise = el.fetchPage(2);
432
+ el.sortParam = { field: 'foo', direction: 'asc' };
433
+ await fetchPromise;
434
+ // If the different sort param causes the results to be discarded,
435
+ // the results array should never be read.
436
+ expect(resultsSpy.callCount).to.equal(0);
437
+ });
438
+ it('discards obsolete search results if sort param cleared before arrival', async () => {
439
+ const resultsSpy = sinon.spy();
440
+ const searchService = new MockSearchService({
441
+ asyncResponse: true,
442
+ resultsSpy,
443
+ });
444
444
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
445
- </collection-browser>`);
446
- el.baseQuery = 'with-sort';
447
- await el.updateComplete;
448
- const fetchPromise = el.fetchPage(2);
449
- el.sortParam = null;
450
- await fetchPromise;
451
- // If the different sort param causes the results to be discarded,
452
- // the results array should never be read.
453
- expect(resultsSpy.callCount).to.equal(0);
454
- });
455
- it('sets sort properties when user changes sort', async () => {
456
- var _a, _b, _c, _d;
457
- const searchService = new MockSearchService();
445
+ </collection-browser>`);
446
+ el.baseQuery = 'with-sort';
447
+ await el.updateComplete;
448
+ const fetchPromise = el.fetchPage(2);
449
+ el.sortParam = null;
450
+ await fetchPromise;
451
+ // If the different sort param causes the results to be discarded,
452
+ // the results array should never be read.
453
+ expect(resultsSpy.callCount).to.equal(0);
454
+ });
455
+ it('sets sort properties when user changes sort', async () => {
456
+ var _a, _b, _c, _d;
457
+ const searchService = new MockSearchService();
458
458
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
459
- </collection-browser>`);
460
- expect(el.selectedSort).to.equal(SortField.relevance);
461
- el.baseQuery = 'foo';
462
- await el.updateComplete;
463
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
464
- const sortSelector = (_b = sortBar === null || sortBar === void 0 ? void 0 : sortBar.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#desktop-sort-selector');
465
- expect(sortSelector).to.exist;
466
- // Click the title sorter
467
- (_d = (_c = [...sortSelector === null || sortSelector === void 0 ? void 0 : sortSelector.children] // tsc doesn't know children is iterable
468
- .find(child => { var _a; return ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === 'Title'; })) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]')) === null || _d === void 0 ? void 0 : _d.click();
469
- await el.updateComplete;
470
- expect(el.selectedSort).to.equal(SortField.title);
471
- });
472
- it('sets sort filter properties when user selects title filter', async () => {
473
- var _a;
474
- const searchService = new MockSearchService();
459
+ </collection-browser>`);
460
+ expect(el.selectedSort).to.equal(SortField.relevance);
461
+ el.baseQuery = 'foo';
462
+ await el.updateComplete;
463
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
464
+ const sortSelector = (_b = sortBar === null || sortBar === void 0 ? void 0 : sortBar.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#desktop-sort-selector');
465
+ expect(sortSelector).to.exist;
466
+ // Click the title sorter
467
+ (_d = (_c = [...sortSelector === null || sortSelector === void 0 ? void 0 : sortSelector.children] // tsc doesn't know children is iterable
468
+ .find(child => { var _a; return ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === 'Title'; })) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]')) === null || _d === void 0 ? void 0 : _d.click();
469
+ await el.updateComplete;
470
+ expect(el.selectedSort).to.equal(SortField.title);
471
+ });
472
+ it('sets sort filter properties when user selects title filter', async () => {
473
+ var _a;
474
+ const searchService = new MockSearchService();
475
475
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
476
- </collection-browser>`);
477
- el.baseQuery = 'collection:foo';
478
- el.selectedTitleFilter = 'X';
479
- await el.updateComplete;
480
- // Wait an extra tick
481
- await new Promise(res => {
482
- setTimeout(res, 0);
483
- });
484
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo AND firstTitle:X');
485
- });
486
- it('sets sort filter properties when user selects creator filter', async () => {
487
- var _a;
488
- const searchService = new MockSearchService();
476
+ </collection-browser>`);
477
+ el.baseQuery = 'collection:foo';
478
+ el.selectedTitleFilter = 'X';
479
+ await el.updateComplete;
480
+ // Wait an extra tick
481
+ await new Promise(res => {
482
+ setTimeout(res, 0);
483
+ });
484
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo AND firstTitle:X');
485
+ });
486
+ it('sets sort filter properties when user selects creator filter', async () => {
487
+ var _a;
488
+ const searchService = new MockSearchService();
489
489
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
490
- </collection-browser>`);
491
- el.baseQuery = 'collection:foo';
492
- el.selectedCreatorFilter = 'X';
493
- await el.updateComplete;
494
- // Wait an extra tick
495
- await new Promise(res => {
496
- setTimeout(res, 0);
497
- });
498
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo AND firstCreator:X');
499
- });
500
- it('sets date range query when date picker selection changed', async () => {
501
- var _a, _b, _c;
502
- const searchService = new MockSearchService();
490
+ </collection-browser>`);
491
+ el.baseQuery = 'collection:foo';
492
+ el.selectedCreatorFilter = 'X';
493
+ await el.updateComplete;
494
+ // Wait an extra tick
495
+ await new Promise(res => {
496
+ setTimeout(res, 0);
497
+ });
498
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo AND firstCreator:X');
499
+ });
500
+ it('sets date range query when date picker selection changed', async () => {
501
+ var _a, _b, _c;
502
+ const searchService = new MockSearchService();
503
503
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
504
- </collection-browser>`);
505
- el.baseQuery = 'years'; // Includes year_histogram aggregation in response
506
- el.showHistogramDatePicker = true;
507
- await el.updateComplete;
508
- const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
509
- await (facets === null || facets === void 0 ? void 0 : facets.updateComplete);
510
- // Wait for the date picker to be rendered (which may take until the next tick)
511
- await new Promise(res => {
512
- setTimeout(res, 0);
513
- });
514
- const histogram = (_b = facets === null || facets === void 0 ? void 0 : facets.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('histogram-date-range');
515
- expect(histogram).to.exist;
516
- // Enter a new min date into the date picker
517
- const minDateInput = (_c = histogram.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('#date-min');
518
- const pressEnterEvent = new KeyboardEvent('keyup', {
519
- key: 'Enter',
520
- });
521
- minDateInput.value = '1960';
522
- minDateInput.dispatchEvent(pressEnterEvent);
523
- // Wait for the histogram's update delay
524
- await new Promise(res => {
525
- setTimeout(res, histogram.updateDelay + 50);
526
- });
527
- // Ensure that the histogram change propagated to the collection browser's
528
- // date query correctly.
529
- await el.updateComplete;
530
- expect(el.dateRangeQueryClause).to.equal('year:[1960 TO 2000]');
531
- });
532
- it('scrolls to page', async () => {
533
- var _a;
534
- const searchService = new MockSearchService();
504
+ </collection-browser>`);
505
+ el.baseQuery = 'years'; // Includes year_histogram aggregation in response
506
+ el.showHistogramDatePicker = true;
507
+ await el.updateComplete;
508
+ const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
509
+ await (facets === null || facets === void 0 ? void 0 : facets.updateComplete);
510
+ // Wait for the date picker to be rendered (which may take until the next tick)
511
+ await new Promise(res => {
512
+ setTimeout(res, 0);
513
+ });
514
+ const histogram = (_b = facets === null || facets === void 0 ? void 0 : facets.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('histogram-date-range');
515
+ expect(histogram).to.exist;
516
+ // Enter a new min date into the date picker
517
+ const minDateInput = (_c = histogram.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('#date-min');
518
+ const pressEnterEvent = new KeyboardEvent('keyup', {
519
+ key: 'Enter',
520
+ });
521
+ minDateInput.value = '1960';
522
+ minDateInput.dispatchEvent(pressEnterEvent);
523
+ // Wait for the histogram's update delay
524
+ await new Promise(res => {
525
+ setTimeout(res, histogram.updateDelay + 50);
526
+ });
527
+ // Ensure that the histogram change propagated to the collection browser's
528
+ // date query correctly.
529
+ await el.updateComplete;
530
+ expect(el.dateRangeQueryClause).to.equal('year:[1960 TO 2000]');
531
+ });
532
+ it('scrolls to page', async () => {
533
+ var _a;
534
+ const searchService = new MockSearchService();
535
535
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
536
- </collection-browser>`);
537
- // Infinite scroller won't exist unless there's a base query
538
- el.baseQuery = 'collection:foo';
539
- await el.updateComplete;
540
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
541
- expect(infiniteScroller).to.exist;
542
- const oldScrollToCell = infiniteScroller.scrollToCell;
543
- const spy = sinon.spy();
544
- infiniteScroller.scrollToCell = spy;
545
- el.goToPage(1);
546
- // Give it a second to scroll
547
- await new Promise(res => {
548
- setTimeout(res, 1000);
549
- });
550
- expect(spy.callCount).to.equal(1);
551
- infiniteScroller.scrollToCell = oldScrollToCell;
552
- });
553
- it('refreshes when certain properties change - with some analytics event sampling', async () => {
554
- var _a;
555
- const mockAnalyticsHandler = new MockAnalyticsHandler();
556
- const searchService = new MockSearchService();
557
- const collectionNameCache = new MockCollectionNameCache();
536
+ </collection-browser>`);
537
+ // Infinite scroller won't exist unless there's a base query
538
+ el.baseQuery = 'collection:foo';
539
+ await el.updateComplete;
540
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
541
+ expect(infiniteScroller).to.exist;
542
+ const oldScrollToCell = infiniteScroller.scrollToCell;
543
+ const spy = sinon.spy();
544
+ infiniteScroller.scrollToCell = spy;
545
+ el.goToPage(1);
546
+ // Give it a second to scroll
547
+ await new Promise(res => {
548
+ setTimeout(res, 1000);
549
+ });
550
+ expect(spy.callCount).to.equal(1);
551
+ infiniteScroller.scrollToCell = oldScrollToCell;
552
+ });
553
+ it('refreshes when certain properties change - with some analytics event sampling', async () => {
554
+ var _a;
555
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
556
+ const searchService = new MockSearchService();
557
+ const collectionNameCache = new MockCollectionNameCache();
558
558
  const el = await fixture(html `<collection-browser
559
559
  .analyticsHandler=${mockAnalyticsHandler}
560
560
  .searchService=${searchService}
561
561
  .collectionNameCache=${collectionNameCache}
562
- ></collection-browser>`);
563
- const infiniteScrollerRefreshSpy = sinon.spy();
564
- // Infinite scroller won't exist unless there's a base query
565
- el.baseQuery = 'collection:foo';
566
- await el.updateComplete;
567
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
568
- infiniteScroller.reload = infiniteScrollerRefreshSpy;
569
- expect(infiniteScrollerRefreshSpy.called).to.be.false;
570
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
571
- // testing: `loggedIn`
572
- el.loggedIn = true;
573
- await el.updateComplete;
574
- expect(infiniteScrollerRefreshSpy.called).to.be.true;
575
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);
576
- el.loggedIn = false;
577
- await el.updateComplete;
578
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);
579
- // testing: `displayMode`
580
- el.displayMode = 'list-compact';
581
- el.searchContext = 'beta-search';
582
- await el.updateComplete;
583
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);
584
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
585
- expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
586
- expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');
587
- el.displayMode = 'list-detail';
588
- await el.updateComplete;
589
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);
590
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
591
- expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
592
- expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');
593
- // testing: `baseNavigationUrl`
594
- el.baseNavigationUrl = 'https://funtestsite.com';
595
- await el.updateComplete;
596
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);
597
- // testing: `baseImageUrl`
598
- el.baseImageUrl = 'https://funtestsiteforimages.com';
599
- await el.updateComplete;
600
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(6);
601
- });
602
- it('query the search service for single result', async () => {
603
- var _a, _b;
604
- const searchService = new MockSearchService();
562
+ ></collection-browser>`);
563
+ const infiniteScrollerRefreshSpy = sinon.spy();
564
+ // Infinite scroller won't exist unless there's a base query
565
+ el.baseQuery = 'collection:foo';
566
+ await el.updateComplete;
567
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
568
+ infiniteScroller.reload = infiniteScrollerRefreshSpy;
569
+ expect(infiniteScrollerRefreshSpy.called).to.be.false;
570
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
571
+ // testing: `loggedIn`
572
+ el.loggedIn = true;
573
+ await el.updateComplete;
574
+ expect(infiniteScrollerRefreshSpy.called).to.be.true;
575
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(1);
576
+ el.loggedIn = false;
577
+ await el.updateComplete;
578
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(2);
579
+ // testing: `displayMode`
580
+ el.displayMode = 'list-compact';
581
+ el.searchContext = 'beta-search';
582
+ await el.updateComplete;
583
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(3);
584
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
585
+ expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
586
+ expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');
587
+ el.displayMode = 'list-detail';
588
+ await el.updateComplete;
589
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(4);
590
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
591
+ expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
592
+ expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');
593
+ // testing: `baseNavigationUrl`
594
+ el.baseNavigationUrl = 'https://funtestsite.com';
595
+ await el.updateComplete;
596
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(5);
597
+ // testing: `baseImageUrl`
598
+ el.baseImageUrl = 'https://funtestsiteforimages.com';
599
+ await el.updateComplete;
600
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(6);
601
+ });
602
+ it('query the search service for single result', async () => {
603
+ var _a, _b;
604
+ const searchService = new MockSearchService();
605
605
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
606
- </collection-browser>`);
607
- el.baseQuery = 'single-result';
608
- await el.updateComplete;
609
- expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#big-results-label')) === null || _b === void 0 ? void 0 : _b.textContent).to.contains('Result');
610
- });
611
- it('`searchContext` prop helps describe where component is being used', async () => {
612
- const el = await fixture(html `<collection-browser></collection-browser>`);
613
- expect(el.searchContext).to.equal(analyticsCategories.default);
614
- el.searchContext = 'unicorn-search';
615
- await el.updateComplete;
616
- expect(el.searchContext).to.equal('unicorn-search');
617
- // property is reflected as attribute
618
- expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');
619
- });
620
- });
606
+ </collection-browser>`);
607
+ el.baseQuery = 'single-result';
608
+ await el.updateComplete;
609
+ expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#big-results-label')) === null || _b === void 0 ? void 0 : _b.textContent).to.contains('Result');
610
+ });
611
+ it('`searchContext` prop helps describe where component is being used', async () => {
612
+ const el = await fixture(html `<collection-browser></collection-browser>`);
613
+ expect(el.searchContext).to.equal(analyticsCategories.default);
614
+ el.searchContext = 'unicorn-search';
615
+ await el.updateComplete;
616
+ expect(el.searchContext).to.equal('unicorn-search');
617
+ // property is reflected as attribute
618
+ expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');
619
+ });
620
+ });
621
621
  //# sourceMappingURL=collection-browser.test.js.map