@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.
- package/force-app/main/default/lwc/quanticCategoryFacet/e2e/data.ts +70 -6
- package/force-app/main/default/lwc/quanticCategoryFacet/e2e/fixture.ts +17 -13
- package/force-app/main/default/lwc/quanticCategoryFacet/e2e/quanticCategoryFacet.e2e.ts +34 -14
- package/force-app/main/default/lwc/quanticDateFacet/e2e/data.ts +24 -4
- package/force-app/main/default/lwc/quanticDateFacet/e2e/fixture.ts +17 -13
- package/force-app/main/default/lwc/quanticDateFacet/e2e/quanticDateFacet.e2e.ts +26 -4
- package/force-app/main/default/lwc/quanticFacet/e2e/data.ts +50 -9
- package/force-app/main/default/lwc/quanticFacet/e2e/fixture.ts +18 -13
- package/force-app/main/default/lwc/quanticFacet/e2e/quanticFacet.e2e.ts +43 -9
- package/force-app/main/default/lwc/quanticGeneratedAnswer/templates/generatedAnswer.html +3 -3
- package/force-app/main/default/lwc/quanticNumericFacet/e2e/data.ts +24 -4
- package/force-app/main/default/lwc/quanticNumericFacet/e2e/fixture.ts +17 -13
- package/force-app/main/default/lwc/quanticNumericFacet/e2e/quanticNumericFacet.e2e.ts +28 -6
- package/force-app/main/default/lwc/quanticPager/e2e/fixture.ts +3 -3
- package/force-app/main/default/lwc/quanticPager/e2e/quanticPager.e2e.ts +1 -1
- package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +3 -2
- package/force-app/main/default/lwc/quanticThreadItem/__tests__/quanticThreadItem.test.js +138 -0
- package/force-app/main/default/lwc/quanticThreadItem/quanticThreadItem.css +21 -0
- package/force-app/main/default/lwc/quanticThreadItem/quanticThreadItem.html +10 -2
- package/force-app/main/default/lwc/quanticThreadItem/quanticThreadItem.js +38 -1
- package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/data.ts +66 -0
- package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/fixture.ts +20 -4
- package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/quanticTimeframeFacet.e2e.ts +24 -0
- package/force-app/main/default/staticresources/coveobueno/browser/bueno.js +1 -3
- package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/app/insight-engine/insight-engine.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/case-assist.index.d.ts +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/commerce.index.d.ts +6 -6
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/breadcrumb-manager/headless-breadcrumb-manager.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/sort/headless-core-commerce-sort.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/url-manager/headless-core-url-manager.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/product-listing/headless-product-listing.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/recommendations/headless-recommendations.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/search/headless-search.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/context/headless-core-context.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/did-you-mean/headless-core-did-you-mean.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facet-manager/headless-core-facet-manager.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/category-facet/headless-core-category-facet.d.ts +0 -4
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/facet/headless-core-facet.d.ts +0 -5
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/date-facet/headless-core-date-facet.d.ts +1 -5
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/date-facet/headless-core-date-filter.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/numeric-facet/headless-core-numeric-facet.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/numeric-facet/headless-core-numeric-filter.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/folded-result-list/headless-core-folded-result-list.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/pager/headless-core-pager.d.ts +0 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/query-error/headless-core-query-error.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/recent-queries-list/headless-core-recent-queries-list.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/result-list/headless-core-result-list.d.ts +0 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/results-per-page/headless-core-results-per-page.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/sort/headless-core-sort.d.ts +0 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/status/headless-core-status.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/tab/headless-core-tab.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/triggers/headless-core-notify-trigger.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/triggers/headless-core-query-trigger.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/triggers/headless-core-redirection-trigger.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/dictionary-field-context/headless-dictionary-field-context.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/document-suggestion-list/case-assist-headless-interactive-result.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/facets/automatic-facet-generator/headless-automatic-facet-generator.d.ts +0 -4
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/facets/category-facet/headless-category-facet.d.ts +2 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/facets/facet/headless-facet.d.ts +2 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/field-suggestions/category-facet/headless-category-field-suggestions.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/field-suggestions/facet/headless-field-suggestions.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/generated-answer/headless-interactive-citation.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/history-manager/headless-history-manager.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/facet-conditions-manager/headless-facet-conditions-manager.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/generated-answer/headless-insight-interactive-citation.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/result-list/headless-insight-interactive-result.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/results-per-page/headless-insight-results-per-page.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/instant-results/instant-results.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/pager/headless-pager.d.ts +2 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/query-summary/headless-query-summary.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/quickview/headless-quickview.d.ts +1 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recent-results-list/headless-recent-results-list.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recommendation/headless-recommendation.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recommendation/result-list/headless-recommendation-interactive-result.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/relevance-inspector/headless-relevance-inspector.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/result-list/headless-interactive-result.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/result-list/headless-result-list.d.ts +2 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/results-per-page/headless-results-per-page.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/smart-snippet-questions-list/headless-smart-snippet-questions-list.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/sort/headless-sort.d.ts +2 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/standalone-search-box/headless-standalone-search-box.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/static-filter/headless-static-filter.d.ts +1 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/triggers/headless-execute-trigger.d.ts +0 -4
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/url-manager/headless-url-manager.d.ts +0 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/configuration/configuration-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/cart/cart-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/context-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/category-facet/category-facet-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/insight-folding-actions.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/insight-query-set-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/insight-search-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-set/query-set-actions-loader.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/index.d.ts +7 -7
- package/force-app/main/default/staticresources/coveoheadless/definitions/insight.index.d.ts +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/recommendation.index.d.ts +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/controllers/instant-products/headless-instant-products.ssr.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-commerce-next.index.d.ts +4 -4
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-commerce.index.d.ts +4 -4
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/controllers/instant-products/headless-instant-products.ssr.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/controllers/standalone-search-box/headless-standalone-search-box.ssr.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/types/engine.d.ts +1 -1
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next.index.d.ts +6 -6
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr.index.d.ts +6 -6
- package/force-app/main/default/staticresources/coveoheadless/headless.js +17 -17
- package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +16 -16
- package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +3 -3
- package/package.json +3 -3
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
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:
|
|
24
|
-
label
|
|
30
|
+
indexScore: 1,
|
|
31
|
+
label,
|
|
25
32
|
};
|
|
26
33
|
|
|
27
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
41
|
-
|
|
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
|
-
|
|
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,
|
|
62
|
+
{page, options, baseFacet, configuration, insightSetup, facetResponses},
|
|
61
63
|
use
|
|
62
64
|
) => {
|
|
63
65
|
await page.goto(`${pageUrl}${options.caption ? '-with-captions' : ''}`);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
await baseFacet.mockSearchWithFacetResponseSequence(
|
|
67
|
+
facetResponses?.responses
|
|
68
|
+
);
|
|
67
69
|
configuration.configure({...options, useCase: useCaseEnum.insight});
|
|
68
70
|
await insightSetup?.waitForInsightInterfaceInitialization();
|
|
69
|
-
await
|
|
70
|
-
|
|
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
|
|
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:
|
|
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}=${
|
|
58
|
+
`cf-${field}=${selectedValue}`
|
|
47
59
|
);
|
|
48
60
|
}
|
|
49
61
|
|
|
50
|
-
const
|
|
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
|
|
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} =
|
|
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:
|
|
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} =
|
|
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} =
|
|
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} =
|
|
203
|
+
const {field, values} = initialFacetData;
|
|
186
204
|
test.use({
|
|
187
205
|
urlHash: `cf-${field}=${values[selectedIndex].value}`,
|
|
188
|
-
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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,
|
|
55
|
+
{page, options, baseFacet, configuration, insightSetup, facetResponses},
|
|
54
56
|
use
|
|
55
57
|
) => {
|
|
56
58
|
await page.goto(pageUrl);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
await baseFacet.mockSearchWithFacetResponseSequence(
|
|
60
|
+
facetResponses?.responses
|
|
61
|
+
);
|
|
60
62
|
configuration.configure({...options, useCase: useCaseEnum.insight});
|
|
61
63
|
await insightSetup?.waitForInsightInterfaceInitialization();
|
|
62
|
-
await
|
|
63
|
-
|
|
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
|
|
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} =
|
|
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} =
|
|
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
|
-
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
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: '
|
|
14
|
+
value: 'People',
|
|
8
15
|
state: 'idle',
|
|
9
|
-
numberOfResults:
|
|
16
|
+
numberOfResults: 126959,
|
|
10
17
|
},
|
|
11
18
|
{
|
|
12
|
-
value: '
|
|
19
|
+
value: 'Contact',
|
|
13
20
|
state: 'idle',
|
|
14
|
-
numberOfResults:
|
|
21
|
+
numberOfResults: 179426,
|
|
15
22
|
},
|
|
16
23
|
],
|
|
17
24
|
indexScore: 0.40500903971252294,
|
|
18
|
-
label
|
|
25
|
+
label,
|
|
19
26
|
};
|
|
20
27
|
|
|
21
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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,
|
|
61
|
+
{page, options, baseFacet, configuration, insightSetup, facetResponses},
|
|
59
62
|
use
|
|
60
63
|
) => {
|
|
61
64
|
await page.goto(`${pageUrl}${options.caption ? '-with-captions' : ''}`);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
await baseFacet.mockSearchWithFacetResponseSequence(
|
|
66
|
+
facetResponses?.responses
|
|
67
|
+
);
|
|
65
68
|
configuration.configure({...options, useCase: useCaseEnum.insight});
|
|
66
69
|
await insightSetup?.waitForInsightInterfaceInitialization();
|
|
67
|
-
await
|
|
68
|
-
|
|
70
|
+
await Promise.all([
|
|
71
|
+
baseFacet.waitForSearchResponse(),
|
|
72
|
+
baseFacet.performSearch(),
|
|
73
|
+
]);
|
|
69
74
|
await use(new FacetObject(page));
|
|
70
75
|
},
|
|
71
76
|
});
|