@coveo/quantic 3.43.2 → 3.43.3

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 (109) hide show
  1. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/data.ts +70 -6
  2. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/fixture.ts +17 -13
  3. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/quanticCategoryFacet.e2e.ts +34 -14
  4. package/force-app/main/default/lwc/quanticDateFacet/e2e/data.ts +24 -4
  5. package/force-app/main/default/lwc/quanticDateFacet/e2e/fixture.ts +17 -13
  6. package/force-app/main/default/lwc/quanticDateFacet/e2e/quanticDateFacet.e2e.ts +26 -4
  7. package/force-app/main/default/lwc/quanticFacet/e2e/data.ts +50 -9
  8. package/force-app/main/default/lwc/quanticFacet/e2e/fixture.ts +18 -13
  9. package/force-app/main/default/lwc/quanticFacet/e2e/quanticFacet.e2e.ts +43 -9
  10. package/force-app/main/default/lwc/quanticGeneratedAnswer/templates/generatedAnswer.html +3 -3
  11. package/force-app/main/default/lwc/quanticNumericFacet/e2e/data.ts +24 -4
  12. package/force-app/main/default/lwc/quanticNumericFacet/e2e/fixture.ts +17 -13
  13. package/force-app/main/default/lwc/quanticNumericFacet/e2e/quanticNumericFacet.e2e.ts +28 -6
  14. package/force-app/main/default/lwc/quanticPager/e2e/fixture.ts +3 -3
  15. package/force-app/main/default/lwc/quanticPager/e2e/quanticPager.e2e.ts +1 -1
  16. package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +3 -2
  17. package/force-app/main/default/lwc/quanticThreadItem/__tests__/quanticThreadItem.test.js +138 -0
  18. package/force-app/main/default/lwc/quanticThreadItem/quanticThreadItem.css +21 -0
  19. package/force-app/main/default/lwc/quanticThreadItem/quanticThreadItem.html +10 -2
  20. package/force-app/main/default/lwc/quanticThreadItem/quanticThreadItem.js +38 -1
  21. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/data.ts +66 -0
  22. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/fixture.ts +20 -4
  23. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/quanticTimeframeFacet.e2e.ts +24 -0
  24. package/force-app/main/default/staticresources/coveobueno/browser/bueno.js +1 -3
  25. package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +2 -2
  26. package/force-app/main/default/staticresources/coveoheadless/definitions/app/insight-engine/insight-engine.d.ts +1 -1
  27. package/force-app/main/default/staticresources/coveoheadless/definitions/case-assist.index.d.ts +2 -2
  28. package/force-app/main/default/staticresources/coveoheadless/definitions/commerce.index.d.ts +6 -6
  29. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/breadcrumb-manager/headless-breadcrumb-manager.d.ts +1 -1
  30. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/sort/headless-core-commerce-sort.d.ts +1 -1
  31. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/url-manager/headless-core-url-manager.d.ts +1 -1
  32. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/product-listing/headless-product-listing.d.ts +1 -1
  33. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/recommendations/headless-recommendations.d.ts +1 -1
  34. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/search/headless-search.d.ts +1 -1
  35. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/context/headless-core-context.d.ts +0 -1
  36. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/did-you-mean/headless-core-did-you-mean.d.ts +0 -1
  37. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facet-manager/headless-core-facet-manager.d.ts +0 -1
  38. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/category-facet/headless-core-category-facet.d.ts +0 -4
  39. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/facet/headless-core-facet.d.ts +0 -5
  40. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/date-facet/headless-core-date-facet.d.ts +1 -5
  41. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/date-facet/headless-core-date-filter.d.ts +0 -1
  42. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/numeric-facet/headless-core-numeric-facet.d.ts +0 -1
  43. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/numeric-facet/headless-core-numeric-filter.d.ts +0 -1
  44. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/folded-result-list/headless-core-folded-result-list.d.ts +0 -1
  45. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/pager/headless-core-pager.d.ts +0 -2
  46. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/query-error/headless-core-query-error.d.ts +0 -1
  47. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/recent-queries-list/headless-core-recent-queries-list.d.ts +0 -1
  48. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/result-list/headless-core-result-list.d.ts +0 -2
  49. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/results-per-page/headless-core-results-per-page.d.ts +0 -1
  50. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/sort/headless-core-sort.d.ts +0 -2
  51. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/status/headless-core-status.d.ts +0 -1
  52. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/tab/headless-core-tab.d.ts +0 -1
  53. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/triggers/headless-core-notify-trigger.d.ts +0 -1
  54. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/triggers/headless-core-query-trigger.d.ts +0 -1
  55. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/triggers/headless-core-redirection-trigger.d.ts +0 -1
  56. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/dictionary-field-context/headless-dictionary-field-context.d.ts +0 -1
  57. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/document-suggestion-list/case-assist-headless-interactive-result.d.ts +1 -1
  58. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/facets/automatic-facet-generator/headless-automatic-facet-generator.d.ts +0 -4
  59. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/facets/category-facet/headless-category-facet.d.ts +2 -0
  60. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/facets/facet/headless-facet.d.ts +2 -0
  61. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/field-suggestions/category-facet/headless-category-field-suggestions.d.ts +0 -1
  62. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/field-suggestions/facet/headless-field-suggestions.d.ts +0 -1
  63. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/generated-answer/headless-interactive-citation.d.ts +1 -1
  64. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/history-manager/headless-history-manager.d.ts +0 -1
  65. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/facet-conditions-manager/headless-facet-conditions-manager.d.ts +1 -1
  66. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/generated-answer/headless-insight-interactive-citation.d.ts +1 -1
  67. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/result-list/headless-insight-interactive-result.d.ts +1 -1
  68. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/results-per-page/headless-insight-results-per-page.d.ts +1 -1
  69. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/instant-results/instant-results.d.ts +1 -1
  70. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/pager/headless-pager.d.ts +2 -0
  71. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/query-summary/headless-query-summary.d.ts +1 -1
  72. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/quickview/headless-quickview.d.ts +1 -2
  73. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recent-results-list/headless-recent-results-list.d.ts +0 -1
  74. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recommendation/headless-recommendation.d.ts +0 -1
  75. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recommendation/result-list/headless-recommendation-interactive-result.d.ts +1 -1
  76. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/relevance-inspector/headless-relevance-inspector.d.ts +0 -1
  77. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/result-list/headless-interactive-result.d.ts +1 -1
  78. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/result-list/headless-result-list.d.ts +2 -0
  79. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/results-per-page/headless-results-per-page.d.ts +1 -1
  80. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/smart-snippet-questions-list/headless-smart-snippet-questions-list.d.ts +0 -1
  81. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/sort/headless-sort.d.ts +2 -0
  82. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/standalone-search-box/headless-standalone-search-box.d.ts +1 -1
  83. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/static-filter/headless-static-filter.d.ts +1 -2
  84. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/triggers/headless-execute-trigger.d.ts +0 -4
  85. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/url-manager/headless-url-manager.d.ts +0 -1
  86. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/configuration/configuration-actions-loader.d.ts +1 -1
  87. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/cart/cart-actions-loader.d.ts +1 -1
  88. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/context-actions-loader.d.ts +1 -1
  89. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/category-facet/category-facet-actions-loader.d.ts +1 -1
  90. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/insight-folding-actions.d.ts +1 -1
  91. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/insight-query-set-actions-loader.d.ts +1 -1
  92. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/insight-search-actions-loader.d.ts +1 -1
  93. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-set/query-set-actions-loader.d.ts +1 -1
  94. package/force-app/main/default/staticresources/coveoheadless/definitions/index.d.ts +7 -7
  95. package/force-app/main/default/staticresources/coveoheadless/definitions/insight.index.d.ts +2 -2
  96. package/force-app/main/default/staticresources/coveoheadless/definitions/recommendation.index.d.ts +2 -2
  97. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/controllers/instant-products/headless-instant-products.ssr.d.ts +1 -1
  98. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.d.ts +1 -1
  99. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-commerce-next.index.d.ts +4 -4
  100. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-commerce.index.d.ts +4 -4
  101. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/controllers/instant-products/headless-instant-products.ssr.d.ts +1 -1
  102. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.d.ts +1 -1
  103. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/types/engine.d.ts +1 -1
  104. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next.index.d.ts +6 -6
  105. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr.index.d.ts +6 -6
  106. package/force-app/main/default/staticresources/coveoheadless/headless.js +17 -17
  107. package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +16 -16
  108. package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +3 -3
  109. package/package.json +3 -3
@@ -1,6 +1,13 @@
1
- const facetData = {
2
- facetId: 'geographicalhierarchy',
3
- field: 'geographicalhierarchy',
1
+ const facetId = 'geographicalhierarchy';
2
+ const field = 'geographicalhierarchy';
3
+ const label = 'Country';
4
+
5
+ /**
6
+ * Facet response before any value is selected.
7
+ */
8
+ export const initialFacetData = {
9
+ facetId,
10
+ field,
4
11
  moreValuesAvailable: true,
5
12
  values: [
6
13
  {
@@ -20,8 +27,65 @@ const facetData = {
20
27
  isLeafValue: false,
21
28
  },
22
29
  ],
23
- indexScore: 0.40500903971252294,
24
- label: 'Object type',
30
+ indexScore: 1,
31
+ label,
25
32
  };
26
33
 
27
- export default facetData;
34
+ const [northAmerica] = initialFacetData.values;
35
+
36
+ /**
37
+ * Facet response after clicking "Show more".
38
+ */
39
+ export const expandedFacetData = {
40
+ ...initialFacetData,
41
+ values: [
42
+ ...initialFacetData.values,
43
+ {
44
+ value: 'South America',
45
+ state: 'idle',
46
+ numberOfResults: 112,
47
+ children: [],
48
+ path: ['South America'],
49
+ isLeafValue: false,
50
+ },
51
+ {
52
+ value: 'Asia',
53
+ state: 'idle',
54
+ numberOfResults: 58,
55
+ children: [],
56
+ path: ['Asia'],
57
+ isLeafValue: false,
58
+ },
59
+ ],
60
+ };
61
+
62
+ /**
63
+ * Facet response after the first parent value is selected.
64
+ */
65
+ export const selectedFacetData = {
66
+ ...initialFacetData,
67
+ values: [
68
+ {
69
+ ...northAmerica,
70
+ state: 'selected',
71
+ children: [
72
+ {
73
+ value: 'Canada',
74
+ state: 'idle',
75
+ numberOfResults: 45,
76
+ children: [],
77
+ path: ['North America', 'Canada'],
78
+ isLeafValue: true,
79
+ },
80
+ {
81
+ value: 'United States',
82
+ state: 'idle',
83
+ numberOfResults: 67,
84
+ children: [],
85
+ path: ['North America', 'United States'],
86
+ isLeafValue: true,
87
+ },
88
+ ],
89
+ },
90
+ ],
91
+ };
@@ -6,7 +6,7 @@ import {
6
6
  insightSearchRequestRegex,
7
7
  } from '../../../../../../playwright/utils/requests';
8
8
  import {BaseFacetObject} from '../../../../../../playwright/page-object/baseFacetObject';
9
- import facetData from './data';
9
+ import {initialFacetData} from './data';
10
10
  import {facetBase} from '../../../../../../playwright/fixtures/baseFacetFixture';
11
11
 
12
12
  const pageUrl = 's/quantic-category-facet';
@@ -26,20 +26,22 @@ type QuanticFacetE2EFixtures = {
26
26
 
27
27
  export const testSearch = facetBase.extend<QuanticFacetE2EFixtures>({
28
28
  options: {},
29
- facetResponseMock: [facetData],
29
+ facetResponses: {responses: [[initialFacetData]]},
30
30
  baseFacet: async ({page}, use) => {
31
31
  await use(new BaseFacetObject(page, searchRequestRegex));
32
32
  },
33
33
  facet: async (
34
- {page, options, configuration, baseFacet, urlHash, facetResponseMock},
34
+ {page, options, configuration, baseFacet, urlHash, facetResponses},
35
35
  use
36
36
  ) => {
37
+ // search use case: interface auto-triggers a search on load, hence the mockSearchWithBaseResponse call below
38
+ await baseFacet.mockSearchWithBaseResponse();
37
39
  await page.goto(
38
40
  `${pageUrl}${options.caption ? '-with-captions' : ''}#${urlHash ? urlHash : ''}`
39
41
  );
40
- if (facetResponseMock) {
41
- await baseFacet.mockSearchWithFacetResponse(facetResponseMock);
42
- }
42
+ await baseFacet.mockSearchWithFacetResponseSequence(
43
+ facetResponses?.responses
44
+ );
43
45
  configuration.configure(options);
44
46
  await baseFacet.waitForSearchResponse();
45
47
 
@@ -49,7 +51,7 @@ export const testSearch = facetBase.extend<QuanticFacetE2EFixtures>({
49
51
 
50
52
  export const testInsight = facetBase.extend<QuanticFacetE2EFixtures>({
51
53
  options: {},
52
- facetResponseMock: [facetData],
54
+ facetResponses: {responses: [[initialFacetData]]},
53
55
  baseFacet: async ({page}, use) => {
54
56
  await use(new BaseFacetObject(page, insightSearchRequestRegex));
55
57
  },
@@ -57,17 +59,19 @@ export const testInsight = facetBase.extend<QuanticFacetE2EFixtures>({
57
59
  await use(new InsightSetupObject(page));
58
60
  },
59
61
  facet: async (
60
- {page, options, baseFacet, configuration, insightSetup, facetResponseMock},
62
+ {page, options, baseFacet, configuration, insightSetup, facetResponses},
61
63
  use
62
64
  ) => {
63
65
  await page.goto(`${pageUrl}${options.caption ? '-with-captions' : ''}`);
64
- if (facetResponseMock) {
65
- await baseFacet.mockSearchWithFacetResponse(facetResponseMock);
66
- }
66
+ await baseFacet.mockSearchWithFacetResponseSequence(
67
+ facetResponses?.responses
68
+ );
67
69
  configuration.configure({...options, useCase: useCaseEnum.insight});
68
70
  await insightSetup?.waitForInsightInterfaceInitialization();
69
- await baseFacet.performSearch();
70
- await baseFacet.waitForSearchResponse();
71
+ await Promise.all([
72
+ baseFacet.waitForSearchResponse(),
73
+ baseFacet.performSearch(),
74
+ ]);
71
75
  await use(new CategoryFacetObject(page));
72
76
  },
73
77
  });
@@ -3,7 +3,7 @@ import {
3
3
  useCaseEnum,
4
4
  useCaseTestCases,
5
5
  } from '../../../../../../playwright/utils/useCase';
6
- import facetData from './data';
6
+ import {expandedFacetData, initialFacetData, selectedFacetData} from './data';
7
7
 
8
8
  const fixtures = {
9
9
  search: testSearch,
@@ -14,22 +14,34 @@ useCaseTestCases.forEach((useCase) => {
14
14
  let test = fixtures[useCase.value];
15
15
  test.describe(`quantic category facet ${useCase.label}`, () => {
16
16
  test.describe('when selecting a facet value and clicking the all categories button', () => {
17
+ const selectedIndex = 0;
18
+ const {facetId, field, values} = initialFacetData;
19
+ const selectedValue = values[selectedIndex].value;
20
+
21
+ test.use({
22
+ facetResponses: {
23
+ responses: [
24
+ [initialFacetData],
25
+ [selectedFacetData],
26
+ [initialFacetData],
27
+ ],
28
+ },
29
+ });
30
+
17
31
  test('should trigger a new search and log the corresponding UA analytics events', async ({
18
32
  baseFacet,
19
33
  facet,
20
34
  page,
21
35
  }) => {
22
- const selectedIndex = 0;
23
- const {facetId, field, values} = facetData;
24
36
  const expectedFacetData = {
25
37
  facetId,
26
38
  facetField: field,
27
- facetValue: values[selectedIndex].value,
39
+ facetValue: selectedValue,
28
40
  };
41
+
29
42
  const facetSelectUaRequest =
30
43
  baseFacet.waitForFacetSelectUaAnalytics(expectedFacetData);
31
44
  const firstSearchResponsePromise = baseFacet.waitForSearchResponse();
32
-
33
45
  await facet.clickOnFacetValue(selectedIndex);
34
46
 
35
47
  await facetSelectUaRequest;
@@ -43,11 +55,11 @@ useCaseTestCases.forEach((useCase) => {
43
55
  );
44
56
  const url = page.url();
45
57
  expect(decodeURIComponent(url)).toContain(
46
- `cf-${field}=${values[selectedIndex].value}`
58
+ `cf-${field}=${selectedValue}`
47
59
  );
48
60
  }
49
61
 
50
- const FacetClearAllUaRequest =
62
+ const facetClearAllUaRequest =
51
63
  baseFacet.waitForFacetClearAllUaAnalytics({
52
64
  facetId,
53
65
  facetField: field,
@@ -56,7 +68,7 @@ useCaseTestCases.forEach((useCase) => {
56
68
 
57
69
  await facet.allCategoriesButton.click();
58
70
 
59
- await FacetClearAllUaRequest;
71
+ await facetClearAllUaRequest;
60
72
  const secondSearchResponse = await secondSearchResponsePromise;
61
73
  const {analytics: analyticsForFacetDeselect} =
62
74
  baseFacet.extractDataFromResponse(secondSearchResponse);
@@ -66,6 +78,9 @@ useCaseTestCases.forEach((useCase) => {
66
78
 
67
79
  test.describe('when expanding and collapsing facet values using Show More/Less buttons', () => {
68
80
  test.use({
81
+ facetResponses: {
82
+ responses: [[initialFacetData], [expandedFacetData]],
83
+ },
69
84
  options: {
70
85
  numberOfValues: 2,
71
86
  },
@@ -75,7 +90,7 @@ useCaseTestCases.forEach((useCase) => {
75
90
  baseFacet,
76
91
  facet,
77
92
  }) => {
78
- const {facetId, field} = facetData;
93
+ const {facetId, field} = initialFacetData;
79
94
  const uaRequest = baseFacet.waitForShowMoreFacetResultsUaAnalytics({
80
95
  facetId,
81
96
  facetField: field,
@@ -116,9 +131,12 @@ useCaseTestCases.forEach((useCase) => {
116
131
  const facetValueIndex = 0;
117
132
 
118
133
  test.use({
134
+ facetResponses: {
135
+ responses: [[initialFacetData], [selectedFacetData]],
136
+ },
119
137
  options: {
120
138
  caption: exampleCaption,
121
- value: facetData.values[facetValueIndex].value,
139
+ value: initialFacetData.values[facetValueIndex].value,
122
140
  },
123
141
  });
124
142
  test('should display the custom caption instead of the raw facet value', async ({
@@ -128,7 +146,7 @@ useCaseTestCases.forEach((useCase) => {
128
146
  expect(facet.facetValue.nth(facetValueIndex)).toHaveText(
129
147
  new RegExp(exampleCaption)
130
148
  );
131
- const {facetId, field, values} = facetData;
149
+ const {facetId, field, values} = initialFacetData;
132
150
  const expectedFacetData = {
133
151
  facetId,
134
152
  facetField: field,
@@ -165,7 +183,7 @@ useCaseTestCases.forEach((useCase) => {
165
183
  baseFacet,
166
184
  facet,
167
185
  }) => {
168
- const {field: expectedField} = facetData;
186
+ const {field: expectedField} = initialFacetData;
169
187
  const exampleQuery = 'test';
170
188
  const facetSearchResponsePromise =
171
189
  baseFacet.waitForFacetSearchResponse();
@@ -182,10 +200,12 @@ useCaseTestCases.forEach((useCase) => {
182
200
 
183
201
  test.describe('with a selected value in the URL', () => {
184
202
  const selectedIndex = 0;
185
- const {field, values} = facetData;
203
+ const {field, values} = initialFacetData;
186
204
  test.use({
187
205
  urlHash: `cf-${field}=${values[selectedIndex].value}`,
188
- facetResponseMock: undefined,
206
+ facetResponses: {
207
+ responses: [],
208
+ },
189
209
  });
190
210
 
191
211
  test('should select the correct facet value', async ({facet}) => {
@@ -1,6 +1,12 @@
1
- const facetData = {
2
- facetId: 'Date',
3
- field: 'Date',
1
+ const facetId = 'Date';
2
+ const field = 'Date';
3
+
4
+ /**
5
+ * Facet response before any value is selected.
6
+ */
7
+ export const initialFacetData = {
8
+ facetId,
9
+ field,
4
10
  moreValuesAvailable: true,
5
11
  values: [
6
12
  {
@@ -21,4 +27,18 @@ const facetData = {
21
27
  indexScore: 0.40500903971252294,
22
28
  };
23
29
 
24
- export default facetData;
30
+ const [firstRange, secondRange] = initialFacetData.values;
31
+
32
+ /**
33
+ * Facet response after the first value is selected.
34
+ */
35
+ export const selectedFacetData = {
36
+ ...initialFacetData,
37
+ values: [
38
+ {
39
+ ...firstRange,
40
+ state: 'selected',
41
+ },
42
+ secondRange,
43
+ ],
44
+ };
@@ -7,7 +7,7 @@ import {
7
7
  } from '../../../../../../playwright/utils/requests';
8
8
  import {BaseFacetObject} from '../../../../../../playwright/page-object/baseFacetObject';
9
9
  import {facetBase} from '../../../../../../playwright/fixtures/baseFacetFixture';
10
- import facetData from './data';
10
+ import {initialFacetData} from './data';
11
11
 
12
12
  const pageUrl = 's/quantic-date-facet';
13
13
 
@@ -21,18 +21,20 @@ type QuanticFacetE2EFixtures = {
21
21
 
22
22
  export const testSearch = facetBase.extend<QuanticFacetE2EFixtures>({
23
23
  options: {},
24
- facetResponseMock: [facetData],
24
+ facetResponses: {responses: [[initialFacetData]]},
25
25
  baseFacet: async ({page}, use) => {
26
26
  await use(new BaseFacetObject(page, searchRequestRegex));
27
27
  },
28
28
  facet: async (
29
- {page, options, configuration, baseFacet, urlHash, facetResponseMock},
29
+ {page, options, configuration, baseFacet, urlHash, facetResponses},
30
30
  use
31
31
  ) => {
32
+ // search use case: interface auto-triggers a search on load, hence the mockSearchWithBaseResponse call below
33
+ await baseFacet.mockSearchWithBaseResponse();
32
34
  await page.goto(`${pageUrl}#${urlHash ? urlHash : ''}`);
33
- if (facetResponseMock) {
34
- await baseFacet.mockSearchWithFacetResponse(facetResponseMock);
35
- }
35
+ await baseFacet.mockSearchWithFacetResponseSequence(
36
+ facetResponses?.responses
37
+ );
36
38
  configuration.configure(options);
37
39
  await baseFacet.waitForSearchResponse();
38
40
 
@@ -42,7 +44,7 @@ export const testSearch = facetBase.extend<QuanticFacetE2EFixtures>({
42
44
 
43
45
  export const testInsight = facetBase.extend<QuanticFacetE2EFixtures>({
44
46
  options: {},
45
- facetResponseMock: [facetData],
47
+ facetResponses: {responses: [[initialFacetData]]},
46
48
  baseFacet: async ({page}, use) => {
47
49
  await use(new BaseFacetObject(page, insightSearchRequestRegex));
48
50
  },
@@ -50,17 +52,19 @@ export const testInsight = facetBase.extend<QuanticFacetE2EFixtures>({
50
52
  await use(new InsightSetupObject(page));
51
53
  },
52
54
  facet: async (
53
- {page, options, baseFacet, configuration, insightSetup, facetResponseMock},
55
+ {page, options, baseFacet, configuration, insightSetup, facetResponses},
54
56
  use
55
57
  ) => {
56
58
  await page.goto(pageUrl);
57
- if (facetResponseMock) {
58
- await baseFacet.mockSearchWithFacetResponse(facetResponseMock);
59
- }
59
+ await baseFacet.mockSearchWithFacetResponseSequence(
60
+ facetResponses?.responses
61
+ );
60
62
  configuration.configure({...options, useCase: useCaseEnum.insight});
61
63
  await insightSetup?.waitForInsightInterfaceInitialization();
62
- await baseFacet.performSearch();
63
- await baseFacet.waitForSearchResponse();
64
+ await Promise.all([
65
+ baseFacet.waitForSearchResponse(),
66
+ baseFacet.performSearch(),
67
+ ]);
64
68
  await use(new DateFacetObject(page));
65
69
  },
66
70
  });
@@ -3,7 +3,7 @@ import {
3
3
  useCaseEnum,
4
4
  useCaseTestCases,
5
5
  } from '../../../../../../playwright/utils/useCase';
6
- import facetData from './data';
6
+ import {initialFacetData, selectedFacetData} from './data';
7
7
  const fixtures = {
8
8
  search: testSearch,
9
9
  insight: testInsight,
@@ -24,13 +24,23 @@ useCaseTestCases.forEach((useCase) => {
24
24
  let test = fixtures[useCase.value];
25
25
  test.describe(`quantic date facet ${useCase.label}`, () => {
26
26
  test.describe('when selecting and deselecting a facet value', () => {
27
+ test.use({
28
+ facetResponses: {
29
+ responses: [
30
+ [initialFacetData],
31
+ [selectedFacetData],
32
+ [initialFacetData],
33
+ ],
34
+ },
35
+ });
36
+
27
37
  test('should trigger a new search and log the corresponding UA analytics events', async ({
28
38
  baseFacet,
29
39
  facet,
30
40
  page,
31
41
  }) => {
32
42
  const selectedIndex = 0;
33
- const {facetId, field, values} = facetData;
43
+ const {facetId, field, values} = initialFacetData;
34
44
  const expectedFacetData = {
35
45
  facetId,
36
46
  facetField: field,
@@ -81,12 +91,22 @@ useCaseTestCases.forEach((useCase) => {
81
91
  });
82
92
 
83
93
  test.describe('when selecting a facet value and clicking the clear filter button', () => {
94
+ test.use({
95
+ facetResponses: {
96
+ responses: [
97
+ [initialFacetData],
98
+ [selectedFacetData],
99
+ [initialFacetData],
100
+ ],
101
+ },
102
+ });
103
+
84
104
  test('should trigger a new search and log the corresponding UA analytics events', async ({
85
105
  baseFacet,
86
106
  facet,
87
107
  }) => {
88
108
  const selectedIndex = 0;
89
- const {facetId, field, values} = facetData;
109
+ const {facetId, field, values} = initialFacetData;
90
110
  const expectedFacetData = {
91
111
  facetId,
92
112
  facetField: field,
@@ -131,7 +151,9 @@ useCaseTestCases.forEach((useCase) => {
131
151
 
132
152
  test.use({
133
153
  urlHash: `df-${exampleField}=${yesterdayDate.replaceAll('-', '/')}@00:00:00..${todayDate.replaceAll('-', '/')}@23:59:59`,
134
- facetResponseMock: undefined,
154
+ facetResponses: {
155
+ responses: [],
156
+ },
135
157
  });
136
158
 
137
159
  test('should select the correct facet value', async ({facet}) => {
@@ -1,21 +1,62 @@
1
- const facetData = {
2
- facetId: 'objecttype',
3
- field: 'objecttype',
1
+ const facetId = 'objecttype';
2
+ const field = 'objecttype';
3
+ const label = 'Object type';
4
+
5
+ /**
6
+ * Facet response before any value is selected.
7
+ */
8
+ export const initialFacetData = {
9
+ facetId,
10
+ field,
4
11
  moreValuesAvailable: true,
5
12
  values: [
6
13
  {
7
- value: 'foo',
14
+ value: 'People',
8
15
  state: 'idle',
9
- numberOfResults: 10,
16
+ numberOfResults: 126959,
10
17
  },
11
18
  {
12
- value: 'bar',
19
+ value: 'Contact',
13
20
  state: 'idle',
14
- numberOfResults: 20,
21
+ numberOfResults: 179426,
15
22
  },
16
23
  ],
17
24
  indexScore: 0.40500903971252294,
18
- label: 'Object type',
25
+ label,
19
26
  };
20
27
 
21
- export default facetData;
28
+ const [people, contact] = initialFacetData.values;
29
+
30
+ /**
31
+ * Facet response after clicking "Show more".
32
+ */
33
+ export const expandedFacetData = {
34
+ ...initialFacetData,
35
+ values: [
36
+ ...initialFacetData.values,
37
+ {
38
+ value: 'Variant',
39
+ state: 'idle',
40
+ numberOfResults: 30827,
41
+ },
42
+ {
43
+ value: 'Message',
44
+ state: 'idle',
45
+ numberOfResults: 26879,
46
+ },
47
+ ],
48
+ };
49
+
50
+ /**
51
+ * Facet response after the first value is selected.
52
+ */
53
+ export const selectedFacetData = {
54
+ ...initialFacetData,
55
+ values: [
56
+ {
57
+ ...people,
58
+ state: 'selected',
59
+ },
60
+ contact,
61
+ ],
62
+ };
@@ -6,7 +6,7 @@ import {
6
6
  insightSearchRequestRegex,
7
7
  } from '../../../../../../playwright/utils/requests';
8
8
  import {BaseFacetObject} from '../../../../../../playwright/page-object/baseFacetObject';
9
- import facetData from './data';
9
+ import {initialFacetData} from './data';
10
10
  import {facetBase} from '../../../../../../playwright/fixtures/baseFacetFixture';
11
11
 
12
12
  const pageUrl = 's/quantic-facet';
@@ -14,6 +14,7 @@ const pageUrl = 's/quantic-facet';
14
14
  interface FacetOptions {
15
15
  value?: string;
16
16
  caption?: string;
17
+ numberOfValues?: number;
17
18
  }
18
19
 
19
20
  type QuanticFacetE2EFixtures = {
@@ -24,20 +25,22 @@ type QuanticFacetE2EFixtures = {
24
25
 
25
26
  export const testSearch = facetBase.extend<QuanticFacetE2EFixtures>({
26
27
  options: {},
27
- facetResponseMock: [facetData],
28
+ facetResponses: {responses: [[initialFacetData]]},
28
29
  baseFacet: async ({page}, use) => {
29
30
  await use(new BaseFacetObject(page, searchRequestRegex));
30
31
  },
31
32
  facet: async (
32
- {page, options, configuration, baseFacet, urlHash, facetResponseMock},
33
+ {page, options, configuration, baseFacet, urlHash, facetResponses},
33
34
  use
34
35
  ) => {
36
+ // search use case: interface auto-triggers a search on load, hence the mockSearchWithBaseResponse call below
37
+ await baseFacet.mockSearchWithBaseResponse();
35
38
  await page.goto(
36
39
  `${pageUrl}${options.caption ? '-with-captions' : ''}#${urlHash ? urlHash : ''}`
37
40
  );
38
- if (facetResponseMock) {
39
- await baseFacet.mockSearchWithFacetResponse(facetResponseMock);
40
- }
41
+ await baseFacet.mockSearchWithFacetResponseSequence(
42
+ facetResponses?.responses
43
+ );
41
44
  configuration.configure(options);
42
45
  await baseFacet.waitForSearchResponse();
43
46
 
@@ -47,7 +50,7 @@ export const testSearch = facetBase.extend<QuanticFacetE2EFixtures>({
47
50
 
48
51
  export const testInsight = facetBase.extend<QuanticFacetE2EFixtures>({
49
52
  options: {},
50
- facetResponseMock: [facetData],
53
+ facetResponses: {responses: [[initialFacetData]]},
51
54
  baseFacet: async ({page}, use) => {
52
55
  await use(new BaseFacetObject(page, insightSearchRequestRegex));
53
56
  },
@@ -55,17 +58,19 @@ export const testInsight = facetBase.extend<QuanticFacetE2EFixtures>({
55
58
  await use(new InsightSetupObject(page));
56
59
  },
57
60
  facet: async (
58
- {page, options, baseFacet, configuration, insightSetup, facetResponseMock},
61
+ {page, options, baseFacet, configuration, insightSetup, facetResponses},
59
62
  use
60
63
  ) => {
61
64
  await page.goto(`${pageUrl}${options.caption ? '-with-captions' : ''}`);
62
- if (facetResponseMock) {
63
- await baseFacet.mockSearchWithFacetResponse(facetResponseMock);
64
- }
65
+ await baseFacet.mockSearchWithFacetResponseSequence(
66
+ facetResponses?.responses
67
+ );
65
68
  configuration.configure({...options, useCase: useCaseEnum.insight});
66
69
  await insightSetup?.waitForInsightInterfaceInitialization();
67
- await baseFacet.performSearch();
68
- await baseFacet.waitForSearchResponse();
70
+ await Promise.all([
71
+ baseFacet.waitForSearchResponse(),
72
+ baseFacet.performSearch(),
73
+ ]);
69
74
  await use(new FacetObject(page));
70
75
  },
71
76
  });