@coveo/quantic 3.14.0 → 3.14.2
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/docs/out/quantic-docs.json +9 -0
- package/force-app/main/default/lwc/quanticFeedbackModal/success.html +1 -1
- package/force-app/main/default/lwc/quanticFeedbackModalQna/templates/success.html +1 -1
- package/force-app/main/default/lwc/quanticGeneratedAnswer/quanticGeneratedAnswer.js +1 -1
- package/force-app/main/default/lwc/quanticSmartSnippet/__tests__/quanticSmartSnippet.test.js +0 -16
- package/force-app/main/default/lwc/quanticSmartSnippet/e2e/pageObject.ts +8 -0
- package/force-app/main/default/lwc/quanticSmartSnippet/e2e/quanticSmartSnippet.e2e.ts +51 -1
- package/force-app/main/default/lwc/quanticSort/__tests__/quanticSort.test.js +218 -37
- package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +61 -0
- package/force-app/main/default/lwc/quanticSort/e2e/pageObject.ts +89 -0
- package/force-app/main/default/lwc/quanticSort/e2e/quanticSort.e2e.ts +91 -0
- package/force-app/main/default/lwc/quanticSort/quanticSort.js +7 -4
- package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +9 -7
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/facets/generator/headless-commerce-facet-generator.ssr.d.ts +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/facets/location/headless-commerce-location-facet.d.ts +11 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/facets/regular/headless-commerce-regular-facet.d.ts +8 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/pagination/headless-core-commerce-pagination.d.ts +3 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/pagination/headless-core-commerce-pagination.ssr.d.ts +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/generated-answer/generated-answer-actions.d.ts +1 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/features/generated-answer/generated-answer-state.d.ts +4 -0
- package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-commerce.index.d.ts +2 -2
- package/force-app/main/default/staticresources/coveoheadless/definitions/tsdoc-metadata.json +1 -1
- package/force-app/main/default/staticresources/coveoheadless/headless.js +11 -9
- package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +10 -8
- package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +9 -7
- package/force-app/main/default/staticresources/dompurify/purify.min.js +2 -2
- package/package.json +8 -8
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import {testSearch, testInsight, expect} from './fixture';
|
|
2
|
+
import {
|
|
3
|
+
useCaseEnum,
|
|
4
|
+
useCaseTestCases,
|
|
5
|
+
} from '../../../../../../playwright/utils/useCase';
|
|
6
|
+
|
|
7
|
+
const fixtures = {
|
|
8
|
+
search: testSearch as typeof testSearch,
|
|
9
|
+
insight: testInsight as typeof testInsight,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
useCaseTestCases.forEach((useCase) => {
|
|
13
|
+
let test;
|
|
14
|
+
let sortArrOptions;
|
|
15
|
+
let sortLabelWithValue;
|
|
16
|
+
if (useCase.value === useCaseEnum.search) {
|
|
17
|
+
test = fixtures[useCase.value] as typeof testSearch;
|
|
18
|
+
} else {
|
|
19
|
+
test = fixtures[useCase.value] as typeof testInsight;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
test.describe(`quantic sort ${useCase.label}`, () => {
|
|
23
|
+
test.beforeEach(async ({sort}) => {
|
|
24
|
+
await sort.clickSortDropDown();
|
|
25
|
+
sortArrOptions = await sort.allSortLabelOptions();
|
|
26
|
+
sortLabelWithValue = await sort.getSortLabelValue();
|
|
27
|
+
await sort.clickSortDropDown();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test.describe(`when changing sort option to 2nd position`, () => {
|
|
31
|
+
test('should trigger a new search and log analytics', async ({
|
|
32
|
+
sort,
|
|
33
|
+
search,
|
|
34
|
+
}) => {
|
|
35
|
+
const {label: expectedSortName, value: expectedSortValue} =
|
|
36
|
+
sortLabelWithValue[1]; // Assuming 0 is the first sort option, 1 should be the 2nd one after that.
|
|
37
|
+
|
|
38
|
+
const searchResponsePromise = search.waitForSearchResponse();
|
|
39
|
+
await sort.clickSortDropDown();
|
|
40
|
+
await sort.clickSortButton(expectedSortName);
|
|
41
|
+
|
|
42
|
+
const searchResponse = await searchResponsePromise;
|
|
43
|
+
const {sortCriteria} = searchResponse.request().postDataJSON();
|
|
44
|
+
expect(sortCriteria).toBe(expectedSortValue);
|
|
45
|
+
await sort.waitForSortUaAnalytics(expectedSortValue);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test.describe('when testing accessibility', () => {
|
|
50
|
+
test('should be accessible to keyboard', async ({sort, page}) => {
|
|
51
|
+
let selectedSortLabel = await sort.sortDropDown.textContent();
|
|
52
|
+
expect(selectedSortLabel).toEqual(sortArrOptions[0]);
|
|
53
|
+
|
|
54
|
+
// Selecting the next sort using Enter to open dropdown, the ArrowDown, then ENTER key
|
|
55
|
+
await sort.focusSortDropDown();
|
|
56
|
+
await sort.openSortDropdownUsingKeyboardEnter();
|
|
57
|
+
await page.keyboard.press('ArrowDown');
|
|
58
|
+
await page.keyboard.press('Enter');
|
|
59
|
+
selectedSortLabel = await sort.sortDropDown.textContent();
|
|
60
|
+
expect(selectedSortLabel).toEqual(sortArrOptions[1]);
|
|
61
|
+
|
|
62
|
+
// Selecting the next sort using Space to open dropdown, the ArrowDown, then ENTER key
|
|
63
|
+
await sort.focusSortDropDown();
|
|
64
|
+
await sort.openSortDropdownUsingKeyboardEnter(false);
|
|
65
|
+
await page.keyboard.press('ArrowDown');
|
|
66
|
+
await page.keyboard.press('Enter');
|
|
67
|
+
selectedSortLabel = await sort.sortDropDown.textContent();
|
|
68
|
+
expect(selectedSortLabel).toEqual(sortArrOptions[2]);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (useCase.value === 'search') {
|
|
73
|
+
test.describe('when loading options from the url', () => {
|
|
74
|
+
test('should reflect the options of url in the component', async ({
|
|
75
|
+
sort,
|
|
76
|
+
page,
|
|
77
|
+
}) => {
|
|
78
|
+
const {label: expectedSortName, value: expectedSortValue} =
|
|
79
|
+
sortLabelWithValue[2]; // Assuming 0 is the first sort option
|
|
80
|
+
|
|
81
|
+
const currentUrl = await page.url();
|
|
82
|
+
const urlHash = `#sortCriteria=${encodeURI(expectedSortValue)}`;
|
|
83
|
+
|
|
84
|
+
await page.goto(`${currentUrl}/${urlHash}`);
|
|
85
|
+
await page.getByRole('button', {name: 'Try it now'}).click();
|
|
86
|
+
await expect(sort.sortDropDown).toContainText(expectedSortName);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
});
|
|
@@ -167,11 +167,12 @@ export default class QuanticSort extends LightningElement {
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
/**
|
|
170
|
-
* @param {CustomEvent<{value: string}>}
|
|
170
|
+
* @param {CustomEvent<{value: string}>} event
|
|
171
171
|
*/
|
|
172
|
-
handleChange(
|
|
172
|
+
handleChange(event) {
|
|
173
173
|
this.sort.sortBy(
|
|
174
|
-
this.options.find((option) => option.value ===
|
|
174
|
+
this.options.find((option) => option.value === event.detail.value)
|
|
175
|
+
.criterion
|
|
175
176
|
);
|
|
176
177
|
}
|
|
177
178
|
|
|
@@ -280,8 +281,10 @@ export default class QuanticSort extends LightningElement {
|
|
|
280
281
|
* @returns {SortOption[]} The specified custom sort options.
|
|
281
282
|
*/
|
|
282
283
|
get customSortOptions() {
|
|
284
|
+
/** @type {HTMLSlotElement} */
|
|
285
|
+
const slot = this.template.querySelector('slot[name="sortOption"]');
|
|
283
286
|
/** @type {SortOption[]} */
|
|
284
|
-
return Array.from(
|
|
287
|
+
return Array.from(slot?.assignedNodes()).map(
|
|
285
288
|
// @ts-ignore
|
|
286
289
|
({label, value, criterion}) => ({label, value, criterion})
|
|
287
290
|
);
|