@salesforcedevs/dx-components 0.20.2 → 0.21.0
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.
|
@@ -3,6 +3,8 @@ import SidebarSearch from "dx/sidebarSearch";
|
|
|
3
3
|
import { createRenderComponent, renderLightningElement } from "utils/tests";
|
|
4
4
|
import { coveoXMLDocsConfig } from "utils/coveo";
|
|
5
5
|
import { mockQueryParameter, unmockQueryParameter } from "utils/jest";
|
|
6
|
+
import { SESSION_KEY } from "dx/sidebarSearch";
|
|
7
|
+
import mockPreloadedState from "./mockPreloadedState";
|
|
6
8
|
|
|
7
9
|
const TAG = "dx-sidebar-search";
|
|
8
10
|
const render = createRenderComponent(TAG, SidebarSearch);
|
|
@@ -11,8 +13,40 @@ const PROPS = coveoXMLDocsConfig;
|
|
|
11
13
|
const QUERY = "test";
|
|
12
14
|
|
|
13
15
|
describe(TAG, () => {
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
window.sessionStorage.clear();
|
|
18
|
+
jest.restoreAllMocks();
|
|
19
|
+
});
|
|
14
20
|
afterEach(unmockQueryParameter);
|
|
15
21
|
|
|
22
|
+
it("correctly sets coveo advanced configuration", () => {
|
|
23
|
+
const element = render(PROPS);
|
|
24
|
+
|
|
25
|
+
element.coveoAdvancedQueryConfig = JSON.stringify(
|
|
26
|
+
coveoXMLDocsConfig.coveoAdvancedQueryConfig
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
expect(element.coveoAdvancedQueryConfig).toEqual(
|
|
30
|
+
coveoXMLDocsConfig.coveoAdvancedQueryConfig
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
return expect(element).toBeAccessible();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("calls dispatchOnChangeEvent with empty query", () => {
|
|
37
|
+
const element = render(PROPS);
|
|
38
|
+
|
|
39
|
+
const mockOnChange = jest.fn();
|
|
40
|
+
|
|
41
|
+
element.addEventListener("change", mockOnChange);
|
|
42
|
+
|
|
43
|
+
element.setInputValue("reference");
|
|
44
|
+
element.setInputValue("");
|
|
45
|
+
|
|
46
|
+
expect(mockOnChange).toHaveBeenCalled();
|
|
47
|
+
return expect(element).toBeAccessible();
|
|
48
|
+
});
|
|
49
|
+
|
|
16
50
|
it("renders with the correct initial empty query", () => {
|
|
17
51
|
const element = render(PROPS);
|
|
18
52
|
|
|
@@ -90,24 +124,49 @@ describe(TAG, () => {
|
|
|
90
124
|
);
|
|
91
125
|
});
|
|
92
126
|
});
|
|
93
|
-
});
|
|
94
127
|
|
|
95
|
-
|
|
96
|
-
|
|
128
|
+
it("correctly consumes a valid session storage object", () => {
|
|
129
|
+
mockQueryParameter(mockPreloadedState.state.query.q);
|
|
97
130
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
131
|
+
window.sessionStorage.setItem(
|
|
132
|
+
SESSION_KEY,
|
|
133
|
+
JSON.stringify(mockPreloadedState)
|
|
134
|
+
);
|
|
102
135
|
|
|
103
|
-
|
|
136
|
+
const element = render(PROPS);
|
|
137
|
+
|
|
138
|
+
expect(window.sessionStorage.getItem(SESSION_KEY)).not.toBeNull();
|
|
139
|
+
|
|
140
|
+
expect(element).toBeAccessible();
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("ignores and deletes a session storage object if query and config don't match", () => {
|
|
144
|
+
mockQueryParameter("test");
|
|
145
|
+
|
|
146
|
+
window.sessionStorage.setItem(
|
|
147
|
+
SESSION_KEY,
|
|
148
|
+
JSON.stringify(mockPreloadedState)
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
const element = render(PROPS);
|
|
104
152
|
|
|
105
|
-
|
|
106
|
-
// element.addEventListener("change", mockOnChange);
|
|
153
|
+
expect(window.sessionStorage.getItem(SESSION_KEY)).toBeNull();
|
|
107
154
|
|
|
108
|
-
|
|
109
|
-
|
|
155
|
+
expect(element).toBeAccessible();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it("ignores and deletes a session storage object on incorrect config", () => {
|
|
159
|
+
mockQueryParameter(mockPreloadedState.state.query.q);
|
|
160
|
+
|
|
161
|
+
window.sessionStorage.setItem(
|
|
162
|
+
SESSION_KEY,
|
|
163
|
+
JSON.stringify({ state: { query: { q: "test" } } })
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
const element = render(PROPS);
|
|
167
|
+
|
|
168
|
+
expect(window.sessionStorage.getItem(SESSION_KEY)).toBeNull();
|
|
110
169
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
170
|
+
expect(element).toBeAccessible();
|
|
171
|
+
});
|
|
172
|
+
});
|
|
@@ -125,6 +125,7 @@ export default class SidebarSearch extends LightningElement {
|
|
|
125
125
|
renderedCallback() {
|
|
126
126
|
// in prod some of the critical coveo configuration attributes seem to arrive later
|
|
127
127
|
// so I needed to put this coveo startup flow here where we can wait for them to arrive
|
|
128
|
+
|
|
128
129
|
if (this.hasCorrectCoveoConfig && !this.engine) {
|
|
129
130
|
this.initializeUserSession();
|
|
130
131
|
this.initializeCoveo();
|
|
@@ -151,12 +152,14 @@ export default class SidebarSearch extends LightningElement {
|
|
|
151
152
|
|
|
152
153
|
private initializeUserSession() {
|
|
153
154
|
const stringified = window.sessionStorage.getItem(SESSION_KEY);
|
|
155
|
+
|
|
154
156
|
if (!stringified) {
|
|
155
157
|
return;
|
|
156
158
|
}
|
|
157
159
|
|
|
158
160
|
try {
|
|
159
161
|
const json = JSON.parse(stringified);
|
|
162
|
+
|
|
160
163
|
const hasSameConfig = Object.entries(
|
|
161
164
|
json.coveoAdvancedQueryConfig
|
|
162
165
|
).every(
|
|
@@ -164,6 +167,7 @@ export default class SidebarSearch extends LightningElement {
|
|
|
164
167
|
this.coveoAdvancedQueryConfig[key] === value
|
|
165
168
|
);
|
|
166
169
|
const hasSameQuery = json?.state?.query?.q === this.value;
|
|
170
|
+
|
|
167
171
|
if (hasSameConfig && hasSameQuery) {
|
|
168
172
|
this.preloadedState = json?.state;
|
|
169
173
|
} else {
|