@thoughtspot/visual-embed-sdk 1.43.0 → 1.43.1
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/cjs/package.json +1 -1
- package/cjs/src/api-intercept.d.ts +51 -0
- package/cjs/src/api-intercept.d.ts.map +1 -0
- package/cjs/src/api-intercept.js +180 -0
- package/cjs/src/api-intercept.js.map +1 -0
- package/cjs/src/api-intercept.spec.d.ts +2 -0
- package/cjs/src/api-intercept.spec.d.ts.map +1 -0
- package/cjs/src/api-intercept.spec.js +672 -0
- package/cjs/src/api-intercept.spec.js.map +1 -0
- package/cjs/src/css-variables.d.ts +4 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +0 -5
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +4 -5
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +10 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +2 -2
- package/cjs/src/embed/conversation.js +1 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +17 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts +11 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.js +1 -0
- package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +4 -2
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +11 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search.d.ts +0 -7
- package/cjs/src/embed/search.d.ts.map +1 -1
- package/cjs/src/embed/search.js +1 -4
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +10 -0
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +56 -15
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +412 -238
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +2 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/types.d.ts +244 -88
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +181 -70
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/logger.d.ts.map +1 -1
- package/cjs/src/utils/logger.js +1 -2
- package/cjs/src/utils/logger.js.map +1 -1
- package/cjs/src/utils/processData.d.ts +1 -1
- package/cjs/src/utils/processData.d.ts.map +1 -1
- package/cjs/src/utils/processData.js +8 -8
- package/cjs/src/utils/processData.js.map +1 -1
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/dist/{index-HZ94j9Ey.js → index-CpkMygsc.js} +1 -1
- package/dist/src/api-intercept.d.ts +51 -0
- package/dist/src/api-intercept.d.ts.map +1 -0
- package/dist/src/api-intercept.spec.d.ts +2 -0
- package/dist/src/api-intercept.spec.d.ts.map +1 -0
- package/dist/src/css-variables.d.ts +4 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +0 -5
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +2 -2
- package/dist/src/embed/hostEventClient/contracts.d.ts +11 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/search.d.ts +0 -7
- package/dist/src/embed/search.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +10 -0
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/types.d.ts +244 -88
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/logger.d.ts.map +1 -1
- package/dist/src/utils/processData.d.ts +1 -1
- package/dist/src/utils/processData.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +435 -118
- package/dist/tsembed-react.js +434 -117
- package/dist/tsembed.es.js +3577 -3260
- package/dist/tsembed.js +3575 -3258
- package/dist/visual-embed-sdk-react-full.d.ts +271 -103
- package/dist/visual-embed-sdk-react.d.ts +268 -103
- package/dist/visual-embed-sdk.d.ts +271 -103
- package/lib/package.json +1 -1
- package/lib/src/api-intercept.d.ts +51 -0
- package/lib/src/api-intercept.d.ts.map +1 -0
- package/lib/src/api-intercept.js +173 -0
- package/lib/src/api-intercept.js.map +1 -0
- package/lib/src/api-intercept.spec.d.ts +2 -0
- package/lib/src/api-intercept.spec.d.ts.map +1 -0
- package/lib/src/api-intercept.spec.js +669 -0
- package/lib/src/api-intercept.spec.js.map +1 -0
- package/lib/src/css-variables.d.ts +4 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +0 -5
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +4 -5
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +10 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +2 -2
- package/lib/src/embed/conversation.js +1 -1
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +17 -0
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +11 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.js +1 -0
- package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +4 -2
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +11 -0
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search.d.ts +0 -7
- package/lib/src/embed/search.d.ts.map +1 -1
- package/lib/src/embed/search.js +1 -4
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +10 -0
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +56 -15
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +412 -238
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/types.d.ts +244 -88
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +180 -69
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/logger.d.ts.map +1 -1
- package/lib/src/utils/logger.js +1 -2
- package/lib/src/utils/logger.js.map +1 -1
- package/lib/src/utils/processData.d.ts +1 -1
- package/lib/src/utils/processData.d.ts.map +1 -1
- package/lib/src/utils/processData.js +8 -8
- package/lib/src/utils/processData.js.map +1 -1
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/package.json +1 -1
- package/src/api-intercept.spec.ts +856 -0
- package/src/api-intercept.ts +204 -0
- package/src/css-variables.ts +5 -0
- package/src/embed/app.spec.ts +11 -0
- package/src/embed/app.ts +5 -16
- package/src/embed/conversation.spec.ts +22 -0
- package/src/embed/conversation.ts +3 -3
- package/src/embed/hostEventClient/contracts.ts +10 -0
- package/src/embed/liveboard.spec.ts +12 -0
- package/src/embed/liveboard.ts +6 -2
- package/src/embed/search.ts +1 -14
- package/src/embed/ts-embed.spec.ts +498 -250
- package/src/embed/ts-embed.ts +80 -32
- package/src/index.ts +2 -0
- package/src/react/all-types-export.ts +1 -0
- package/src/types.ts +327 -165
- package/src/utils/logger.ts +1 -2
- package/src/utils/processData.spec.ts +0 -1
- package/src/utils/processData.ts +10 -11
|
@@ -23,8 +23,10 @@ const processTrigger_1 = require("../utils/processTrigger");
|
|
|
23
23
|
const contracts_1 = require("./hostEventClient/contracts");
|
|
24
24
|
const sessionInfoService = tslib_1.__importStar(require("../utils/sessionInfoService"));
|
|
25
25
|
const authToken = tslib_1.__importStar(require("../authToken"));
|
|
26
|
+
const apiIntercept = tslib_1.__importStar(require("../api-intercept"));
|
|
26
27
|
jest.mock('../utils/processTrigger');
|
|
27
28
|
const mockProcessTrigger = processTrigger_1.processTrigger;
|
|
29
|
+
const mockHandleInterceptEvent = jest.spyOn(apiIntercept, 'handleInterceptEvent');
|
|
28
30
|
const defaultViewConfig = {
|
|
29
31
|
frameParams: {
|
|
30
32
|
width: 1280,
|
|
@@ -64,6 +66,30 @@ const customVariablesForThirdPartyTools = {
|
|
|
64
66
|
key1: '!@#',
|
|
65
67
|
key2: '*%^',
|
|
66
68
|
};
|
|
69
|
+
const getMockAppInitPayload = (data) => {
|
|
70
|
+
const defaultData = {
|
|
71
|
+
customisations,
|
|
72
|
+
authToken: '',
|
|
73
|
+
hostConfig: undefined,
|
|
74
|
+
runtimeFilterParams: null,
|
|
75
|
+
runtimeParameterParams: null,
|
|
76
|
+
hiddenHomeLeftNavItems: [],
|
|
77
|
+
hiddenHomepageModules: [],
|
|
78
|
+
hiddenListColumns: [],
|
|
79
|
+
customActions: [],
|
|
80
|
+
reorderedHomepageModules: [],
|
|
81
|
+
customVariablesForThirdPartyTools,
|
|
82
|
+
interceptTimeout: undefined,
|
|
83
|
+
interceptUrls: [],
|
|
84
|
+
};
|
|
85
|
+
return {
|
|
86
|
+
type: index_1.EmbedEvent.APP_INIT,
|
|
87
|
+
data: {
|
|
88
|
+
...defaultData,
|
|
89
|
+
...data,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
67
93
|
describe('Unit test case for ts embed', () => {
|
|
68
94
|
const mockMixPanelEvent = jest.spyOn(mixpanelInstance, 'uploadMixpanelEvent');
|
|
69
95
|
beforeEach(() => {
|
|
@@ -247,22 +273,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
247
273
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
248
274
|
});
|
|
249
275
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
250
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
251
|
-
type: index_1.EmbedEvent.APP_INIT,
|
|
252
|
-
data: {
|
|
253
|
-
customisations,
|
|
254
|
-
authToken: '',
|
|
255
|
-
runtimeFilterParams: null,
|
|
256
|
-
runtimeParameterParams: null,
|
|
257
|
-
hiddenHomeLeftNavItems: [],
|
|
258
|
-
hiddenHomepageModules: [],
|
|
259
|
-
hiddenListColumns: [],
|
|
260
|
-
customActions: [],
|
|
261
|
-
hostConfig: undefined,
|
|
262
|
-
reorderedHomepageModules: [],
|
|
263
|
-
customVariablesForThirdPartyTools,
|
|
264
|
-
},
|
|
265
|
-
});
|
|
276
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({}));
|
|
266
277
|
});
|
|
267
278
|
});
|
|
268
279
|
test('verify Customisations from viewConfig', async () => {
|
|
@@ -283,22 +294,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
283
294
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
284
295
|
});
|
|
285
296
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
286
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
customisations: customisationsView,
|
|
290
|
-
authToken: '',
|
|
291
|
-
runtimeFilterParams: null,
|
|
292
|
-
runtimeParameterParams: null,
|
|
293
|
-
hiddenHomeLeftNavItems: [],
|
|
294
|
-
hiddenHomepageModules: [],
|
|
295
|
-
hiddenListColumns: [],
|
|
296
|
-
customActions: [],
|
|
297
|
-
hostConfig: undefined,
|
|
298
|
-
reorderedHomepageModules: [],
|
|
299
|
-
customVariablesForThirdPartyTools,
|
|
300
|
-
},
|
|
301
|
-
});
|
|
297
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
298
|
+
customisations: customisationsView,
|
|
299
|
+
}));
|
|
302
300
|
});
|
|
303
301
|
});
|
|
304
302
|
test('hide home page modules from view Config should be part of app_init payload', async () => {
|
|
@@ -323,22 +321,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
323
321
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
324
322
|
});
|
|
325
323
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
326
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
customisations,
|
|
330
|
-
authToken: '',
|
|
331
|
-
hostConfig: undefined,
|
|
332
|
-
runtimeFilterParams: null,
|
|
333
|
-
runtimeParameterParams: null,
|
|
334
|
-
hiddenHomeLeftNavItems: [],
|
|
335
|
-
hiddenHomepageModules: [types_1.HomepageModule.MyLibrary, types_1.HomepageModule.Learning],
|
|
336
|
-
hiddenListColumns: [],
|
|
337
|
-
customActions: [],
|
|
338
|
-
reorderedHomepageModules: [],
|
|
339
|
-
customVariablesForThirdPartyTools,
|
|
340
|
-
},
|
|
341
|
-
});
|
|
324
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
325
|
+
hiddenHomepageModules: [types_1.HomepageModule.MyLibrary, types_1.HomepageModule.Learning],
|
|
326
|
+
}));
|
|
342
327
|
});
|
|
343
328
|
});
|
|
344
329
|
test('customVariablesForThirdPartyTools should be part of the app_init payload', async () => {
|
|
@@ -358,22 +343,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
358
343
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
359
344
|
});
|
|
360
345
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
361
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
362
|
-
type: index_1.EmbedEvent.APP_INIT,
|
|
363
|
-
data: {
|
|
364
|
-
customisations,
|
|
365
|
-
authToken: '',
|
|
366
|
-
hostConfig: undefined,
|
|
367
|
-
runtimeFilterParams: null,
|
|
368
|
-
runtimeParameterParams: null,
|
|
369
|
-
hiddenHomeLeftNavItems: [],
|
|
370
|
-
hiddenHomepageModules: [],
|
|
371
|
-
hiddenListColumns: [],
|
|
372
|
-
customActions: [],
|
|
373
|
-
reorderedHomepageModules: [],
|
|
374
|
-
customVariablesForThirdPartyTools,
|
|
375
|
-
},
|
|
376
|
-
});
|
|
346
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({}));
|
|
377
347
|
});
|
|
378
348
|
});
|
|
379
349
|
test('Reordering the home page modules from view Config should be part of app_init payload', async () => {
|
|
@@ -398,22 +368,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
398
368
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
399
369
|
});
|
|
400
370
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
401
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
customisations,
|
|
405
|
-
authToken: '',
|
|
406
|
-
hostConfig: undefined,
|
|
407
|
-
runtimeFilterParams: null,
|
|
408
|
-
runtimeParameterParams: null,
|
|
409
|
-
hiddenHomeLeftNavItems: [],
|
|
410
|
-
hiddenHomepageModules: [],
|
|
411
|
-
hiddenListColumns: [],
|
|
412
|
-
customActions: [],
|
|
413
|
-
reorderedHomepageModules: [types_1.HomepageModule.MyLibrary, types_1.HomepageModule.Watchlist],
|
|
414
|
-
customVariablesForThirdPartyTools,
|
|
415
|
-
},
|
|
416
|
-
});
|
|
371
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
372
|
+
reorderedHomepageModules: [types_1.HomepageModule.MyLibrary, types_1.HomepageModule.Watchlist],
|
|
373
|
+
}));
|
|
417
374
|
});
|
|
418
375
|
});
|
|
419
376
|
test('Runtime parameters from view Config should be part of app_init payload when excludeRuntimeParametsfromURL is true', async () => {
|
|
@@ -441,22 +398,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
441
398
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
442
399
|
});
|
|
443
400
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
444
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
customisations,
|
|
448
|
-
authToken: '',
|
|
449
|
-
runtimeFilterParams: null,
|
|
450
|
-
runtimeParameterParams: 'param1=color¶mVal1=blue',
|
|
451
|
-
hiddenHomeLeftNavItems: [],
|
|
452
|
-
hiddenHomepageModules: [],
|
|
453
|
-
hiddenListColumns: [],
|
|
454
|
-
customActions: [],
|
|
455
|
-
hostConfig: undefined,
|
|
456
|
-
reorderedHomepageModules: [],
|
|
457
|
-
customVariablesForThirdPartyTools,
|
|
458
|
-
},
|
|
459
|
-
});
|
|
401
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
402
|
+
runtimeParameterParams: 'param1=color¶mVal1=blue',
|
|
403
|
+
}));
|
|
460
404
|
});
|
|
461
405
|
});
|
|
462
406
|
test('Runtime filters from view Config should be part of app_init payload when excludeRuntimeFiltersfromURL is true', async () => {
|
|
@@ -485,22 +429,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
485
429
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
486
430
|
});
|
|
487
431
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
488
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
customisations,
|
|
492
|
-
authToken: '',
|
|
493
|
-
runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
|
|
494
|
-
runtimeParameterParams: null,
|
|
495
|
-
hiddenHomeLeftNavItems: [],
|
|
496
|
-
hiddenHomepageModules: [],
|
|
497
|
-
hiddenListColumns: [],
|
|
498
|
-
customActions: [],
|
|
499
|
-
hostConfig: undefined,
|
|
500
|
-
reorderedHomepageModules: [],
|
|
501
|
-
customVariablesForThirdPartyTools,
|
|
502
|
-
},
|
|
503
|
-
});
|
|
432
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
433
|
+
runtimeFilterParams: 'col1=color&op1=EQ&val1=blue',
|
|
434
|
+
}));
|
|
504
435
|
});
|
|
505
436
|
});
|
|
506
437
|
test('Runtime filters from view Config should be not part of app_init payload when excludeRuntimeFiltersfromURL is undefined', async () => {
|
|
@@ -528,22 +459,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
528
459
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
529
460
|
});
|
|
530
461
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
531
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
532
|
-
type: index_1.EmbedEvent.APP_INIT,
|
|
533
|
-
data: {
|
|
534
|
-
customisations,
|
|
535
|
-
authToken: '',
|
|
536
|
-
runtimeFilterParams: null,
|
|
537
|
-
runtimeParameterParams: null,
|
|
538
|
-
hiddenHomeLeftNavItems: [],
|
|
539
|
-
hiddenHomepageModules: [],
|
|
540
|
-
hiddenListColumns: [],
|
|
541
|
-
customActions: [],
|
|
542
|
-
hostConfig: undefined,
|
|
543
|
-
reorderedHomepageModules: [],
|
|
544
|
-
customVariablesForThirdPartyTools,
|
|
545
|
-
},
|
|
546
|
-
});
|
|
462
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({}));
|
|
547
463
|
});
|
|
548
464
|
});
|
|
549
465
|
test('Runtime filters from view Config should not be part of app_init payload when excludeRuntimeFiltersfromURL is false', async () => {
|
|
@@ -572,22 +488,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
572
488
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
573
489
|
});
|
|
574
490
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
575
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
576
|
-
type: index_1.EmbedEvent.APP_INIT,
|
|
577
|
-
data: {
|
|
578
|
-
customisations,
|
|
579
|
-
authToken: '',
|
|
580
|
-
runtimeFilterParams: null,
|
|
581
|
-
runtimeParameterParams: null,
|
|
582
|
-
hiddenHomeLeftNavItems: [],
|
|
583
|
-
hiddenHomepageModules: [],
|
|
584
|
-
hiddenListColumns: [],
|
|
585
|
-
customActions: [],
|
|
586
|
-
hostConfig: undefined,
|
|
587
|
-
reorderedHomepageModules: [],
|
|
588
|
-
customVariablesForThirdPartyTools,
|
|
589
|
-
},
|
|
590
|
-
});
|
|
491
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({}));
|
|
591
492
|
});
|
|
592
493
|
});
|
|
593
494
|
test('homeLeftNav from view Config should be part of app_init payload', async () => {
|
|
@@ -612,22 +513,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
612
513
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
613
514
|
});
|
|
614
515
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
615
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
customisations,
|
|
619
|
-
authToken: '',
|
|
620
|
-
hostConfig: undefined,
|
|
621
|
-
runtimeFilterParams: null,
|
|
622
|
-
runtimeParameterParams: null,
|
|
623
|
-
hiddenHomeLeftNavItems: [types_1.HomeLeftNavItem.Home, types_1.HomeLeftNavItem.MonitorSubscription],
|
|
624
|
-
hiddenHomepageModules: [],
|
|
625
|
-
hiddenListColumns: [],
|
|
626
|
-
customActions: [],
|
|
627
|
-
reorderedHomepageModules: [],
|
|
628
|
-
customVariablesForThirdPartyTools,
|
|
629
|
-
},
|
|
630
|
-
});
|
|
516
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
517
|
+
hiddenHomeLeftNavItems: [types_1.HomeLeftNavItem.Home, types_1.HomeLeftNavItem.MonitorSubscription],
|
|
518
|
+
}));
|
|
631
519
|
});
|
|
632
520
|
});
|
|
633
521
|
test('when Embed event status have start status', (done) => {
|
|
@@ -759,22 +647,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
759
647
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
760
648
|
});
|
|
761
649
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
762
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
authToken: 'test_auth_token1',
|
|
767
|
-
runtimeFilterParams: null,
|
|
768
|
-
runtimeParameterParams: null,
|
|
769
|
-
hiddenHomeLeftNavItems: [],
|
|
770
|
-
hiddenHomepageModules: [],
|
|
771
|
-
hiddenListColumns: [],
|
|
772
|
-
customActions: [],
|
|
773
|
-
hostConfig: undefined,
|
|
774
|
-
reorderedHomepageModules: [],
|
|
775
|
-
customVariablesForThirdPartyTools: {},
|
|
776
|
-
},
|
|
777
|
-
});
|
|
650
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
651
|
+
authToken: 'test_auth_token1',
|
|
652
|
+
customVariablesForThirdPartyTools: {},
|
|
653
|
+
}));
|
|
778
654
|
});
|
|
779
655
|
jest.spyOn(authService, 'verifyTokenService').mockClear();
|
|
780
656
|
});
|
|
@@ -824,36 +700,25 @@ describe('Unit test case for ts embed', () => {
|
|
|
824
700
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
825
701
|
});
|
|
826
702
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
827
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
strings: {
|
|
833
|
-
Liveboard: 'Dashboard',
|
|
834
|
-
},
|
|
835
|
-
stringIDsUrl: 'https://sample-string-ids-url.com',
|
|
836
|
-
stringIDs: {
|
|
837
|
-
'liveboard.header.title': 'Dashboard name',
|
|
838
|
-
},
|
|
703
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
704
|
+
customisations: {
|
|
705
|
+
content: {
|
|
706
|
+
strings: {
|
|
707
|
+
Liveboard: 'Dashboard',
|
|
839
708
|
},
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
709
|
+
stringIDsUrl: 'https://sample-string-ids-url.com',
|
|
710
|
+
stringIDs: {
|
|
711
|
+
'liveboard.header.title': 'Dashboard name',
|
|
843
712
|
},
|
|
844
713
|
},
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
hiddenHomepageModules: [],
|
|
850
|
-
hiddenListColumns: [],
|
|
851
|
-
customActions: [],
|
|
852
|
-
hostConfig: undefined,
|
|
853
|
-
reorderedHomepageModules: [],
|
|
854
|
-
customVariablesForThirdPartyTools: {},
|
|
714
|
+
style: {
|
|
715
|
+
customCSS: {},
|
|
716
|
+
customCSSUrl: undefined,
|
|
717
|
+
},
|
|
855
718
|
},
|
|
856
|
-
|
|
719
|
+
authToken: 'test_auth_token1',
|
|
720
|
+
customVariablesForThirdPartyTools: {},
|
|
721
|
+
}));
|
|
857
722
|
const customisationContent = mockPort.postMessage.mock.calls[0][0].data.customisations.content;
|
|
858
723
|
expect(customisationContent.stringIDsUrl)
|
|
859
724
|
.toBe('https://sample-string-ids-url.com');
|
|
@@ -929,43 +794,33 @@ describe('Unit test case for ts embed', () => {
|
|
|
929
794
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
930
795
|
});
|
|
931
796
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
932
|
-
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
customCSS: {},
|
|
939
|
-
customCSSUrl: undefined,
|
|
940
|
-
},
|
|
797
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
798
|
+
customisations: {
|
|
799
|
+
content: {},
|
|
800
|
+
style: {
|
|
801
|
+
customCSS: {},
|
|
802
|
+
customCSSUrl: undefined,
|
|
941
803
|
},
|
|
942
|
-
authToken: 'test_auth_token1',
|
|
943
|
-
runtimeFilterParams: null,
|
|
944
|
-
runtimeParameterParams: null,
|
|
945
|
-
hiddenHomeLeftNavItems: [],
|
|
946
|
-
hiddenHomepageModules: [],
|
|
947
|
-
hiddenListColumns: [],
|
|
948
|
-
customActions: [
|
|
949
|
-
{
|
|
950
|
-
id: 'action2',
|
|
951
|
-
name: 'Another Valid Action',
|
|
952
|
-
target: types_1.CustomActionTarget.VIZ,
|
|
953
|
-
position: types_1.CustomActionsPosition.MENU,
|
|
954
|
-
metadataIds: { vizIds: ['viz456'] }
|
|
955
|
-
},
|
|
956
|
-
{
|
|
957
|
-
id: 'action1',
|
|
958
|
-
name: 'Valid Action',
|
|
959
|
-
target: types_1.CustomActionTarget.LIVEBOARD,
|
|
960
|
-
position: types_1.CustomActionsPosition.PRIMARY,
|
|
961
|
-
metadataIds: { liveboardIds: ['lb123'] }
|
|
962
|
-
}
|
|
963
|
-
],
|
|
964
|
-
hostConfig: undefined,
|
|
965
|
-
reorderedHomepageModules: [],
|
|
966
|
-
customVariablesForThirdPartyTools: {},
|
|
967
804
|
},
|
|
968
|
-
|
|
805
|
+
authToken: 'test_auth_token1',
|
|
806
|
+
customActions: [
|
|
807
|
+
{
|
|
808
|
+
id: 'action2',
|
|
809
|
+
name: 'Another Valid Action',
|
|
810
|
+
target: types_1.CustomActionTarget.VIZ,
|
|
811
|
+
position: types_1.CustomActionsPosition.MENU,
|
|
812
|
+
metadataIds: { vizIds: ['viz456'] }
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
id: 'action1',
|
|
816
|
+
name: 'Valid Action',
|
|
817
|
+
target: types_1.CustomActionTarget.LIVEBOARD,
|
|
818
|
+
position: types_1.CustomActionsPosition.PRIMARY,
|
|
819
|
+
metadataIds: { liveboardIds: ['lb123'] }
|
|
820
|
+
}
|
|
821
|
+
],
|
|
822
|
+
customVariablesForThirdPartyTools: {},
|
|
823
|
+
}));
|
|
969
824
|
// Verify that CustomActionsValidationResult structure is
|
|
970
825
|
// correct
|
|
971
826
|
const appInitData = mockPort.postMessage.mock.calls[0][0].data;
|
|
@@ -2909,7 +2764,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2909
2764
|
const triggerSpy = jest.spyOn(appEmbed, 'trigger').mockResolvedValue(null);
|
|
2910
2765
|
const removeChildSpy = jest.spyOn(Node.prototype, 'removeChild').mockImplementation(() => (0, test_utils_1.getRootEl)());
|
|
2911
2766
|
appEmbed.destroy();
|
|
2912
|
-
// Should be called immediately when
|
|
2767
|
+
// Should be called immediately when config is enabled
|
|
2913
2768
|
expect(triggerSpy).toHaveBeenCalledWith(types_1.HostEvent.DestroyEmbed);
|
|
2914
2769
|
// Wait for the timeout to complete
|
|
2915
2770
|
await new Promise(resolve => setTimeout(resolve, 1100));
|
|
@@ -2961,5 +2816,324 @@ describe('Unit test case for ts embed', () => {
|
|
|
2961
2816
|
});
|
|
2962
2817
|
});
|
|
2963
2818
|
});
|
|
2819
|
+
describe('handleApiInterceptEvent', () => {
|
|
2820
|
+
beforeEach(() => {
|
|
2821
|
+
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
2822
|
+
(0, index_1.init)({
|
|
2823
|
+
thoughtSpotHost: 'tshost',
|
|
2824
|
+
authType: index_1.AuthType.None,
|
|
2825
|
+
});
|
|
2826
|
+
jest.clearAllMocks();
|
|
2827
|
+
mockHandleInterceptEvent.mockClear();
|
|
2828
|
+
});
|
|
2829
|
+
test('should call handleInterceptEvent with correct parameters', async () => {
|
|
2830
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2831
|
+
await searchEmbed.render();
|
|
2832
|
+
const mockEventData = {
|
|
2833
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
2834
|
+
data: JSON.stringify({
|
|
2835
|
+
input: '/prism/?op=GetChartWithData',
|
|
2836
|
+
init: {
|
|
2837
|
+
method: 'POST',
|
|
2838
|
+
body: JSON.stringify({
|
|
2839
|
+
variables: {
|
|
2840
|
+
session: { sessionId: 'session-123' },
|
|
2841
|
+
contextBookId: 'viz-456'
|
|
2842
|
+
}
|
|
2843
|
+
})
|
|
2844
|
+
}
|
|
2845
|
+
})
|
|
2846
|
+
};
|
|
2847
|
+
const mockPort = {
|
|
2848
|
+
postMessage: jest.fn(),
|
|
2849
|
+
};
|
|
2850
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2851
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2852
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
2853
|
+
});
|
|
2854
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2855
|
+
expect(mockHandleInterceptEvent).toHaveBeenCalledTimes(1);
|
|
2856
|
+
const call = mockHandleInterceptEvent.mock.calls[0][0];
|
|
2857
|
+
expect(call.eventData).toEqual(mockEventData);
|
|
2858
|
+
expect(call.executeEvent).toBeInstanceOf(Function);
|
|
2859
|
+
expect(call.getUnsavedAnswerTml).toBeInstanceOf(Function);
|
|
2860
|
+
expect(call.viewConfig).toMatchObject(defaultViewConfig);
|
|
2861
|
+
});
|
|
2862
|
+
});
|
|
2863
|
+
test('should execute callbacks through executeEvent function', async () => {
|
|
2864
|
+
let capturedExecuteEvent;
|
|
2865
|
+
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
2866
|
+
capturedExecuteEvent = params.executeEvent;
|
|
2867
|
+
});
|
|
2868
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2869
|
+
const mockCallback = jest.fn();
|
|
2870
|
+
searchEmbed.on(index_1.EmbedEvent.CustomAction, mockCallback);
|
|
2871
|
+
await searchEmbed.render();
|
|
2872
|
+
const mockEventData = {
|
|
2873
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
2874
|
+
data: JSON.stringify({
|
|
2875
|
+
input: '/prism/?op=GetChartWithData',
|
|
2876
|
+
init: {}
|
|
2877
|
+
})
|
|
2878
|
+
};
|
|
2879
|
+
const mockPort = {
|
|
2880
|
+
postMessage: jest.fn(),
|
|
2881
|
+
};
|
|
2882
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2883
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2884
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
2885
|
+
});
|
|
2886
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2887
|
+
expect(capturedExecuteEvent).toBeDefined();
|
|
2888
|
+
// Simulate executeEvent being called by handleInterceptEvent
|
|
2889
|
+
const testData = { test: 'data' };
|
|
2890
|
+
capturedExecuteEvent(index_1.EmbedEvent.CustomAction, testData);
|
|
2891
|
+
// executeEvent passes data as first param to callback
|
|
2892
|
+
expect(mockCallback).toHaveBeenCalled();
|
|
2893
|
+
expect(mockCallback.mock.calls[0][0]).toEqual(testData);
|
|
2894
|
+
});
|
|
2895
|
+
});
|
|
2896
|
+
test('should call triggerUIPassThrough through getUnsavedAnswerTml function', async () => {
|
|
2897
|
+
let capturedGetUnsavedAnswerTml;
|
|
2898
|
+
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
2899
|
+
capturedGetUnsavedAnswerTml = params.getUnsavedAnswerTml;
|
|
2900
|
+
});
|
|
2901
|
+
const mockTmlResponse = { tml: 'test-tml-content' };
|
|
2902
|
+
mockProcessTrigger.mockResolvedValue([{ value: mockTmlResponse }]);
|
|
2903
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2904
|
+
await searchEmbed.render();
|
|
2905
|
+
const mockEventData = {
|
|
2906
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
2907
|
+
data: JSON.stringify({
|
|
2908
|
+
input: '/prism/?op=GetChartWithData',
|
|
2909
|
+
init: {}
|
|
2910
|
+
})
|
|
2911
|
+
};
|
|
2912
|
+
const mockPort = {
|
|
2913
|
+
postMessage: jest.fn(),
|
|
2914
|
+
};
|
|
2915
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2916
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2917
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
2918
|
+
});
|
|
2919
|
+
await (0, test_utils_1.executeAfterWait)(async () => {
|
|
2920
|
+
expect(capturedGetUnsavedAnswerTml).toBeDefined();
|
|
2921
|
+
// Clear previous calls
|
|
2922
|
+
mockProcessTrigger.mockClear();
|
|
2923
|
+
// Simulate getUnsavedAnswerTml being called by
|
|
2924
|
+
// handleInterceptEvent
|
|
2925
|
+
const result = await capturedGetUnsavedAnswerTml({
|
|
2926
|
+
sessionId: 'session-123',
|
|
2927
|
+
vizId: 'viz-456'
|
|
2928
|
+
});
|
|
2929
|
+
expect(mockProcessTrigger).toHaveBeenCalled();
|
|
2930
|
+
const callArgs = mockProcessTrigger.mock.calls[0];
|
|
2931
|
+
// Verify UIPassthrough event is triggered with the right params
|
|
2932
|
+
expect(callArgs[1]).toBe('UiPassthrough');
|
|
2933
|
+
expect(callArgs[3]).toMatchObject({
|
|
2934
|
+
type: 'getUnsavedAnswerTML',
|
|
2935
|
+
parameters: {
|
|
2936
|
+
sessionId: 'session-123',
|
|
2937
|
+
vizId: 'viz-456'
|
|
2938
|
+
}
|
|
2939
|
+
});
|
|
2940
|
+
expect(result).toEqual(mockTmlResponse);
|
|
2941
|
+
});
|
|
2942
|
+
});
|
|
2943
|
+
test('should pass viewConfig to handleInterceptEvent', async () => {
|
|
2944
|
+
const customViewConfig = {
|
|
2945
|
+
...defaultViewConfig,
|
|
2946
|
+
interceptUrls: ['/api/test'],
|
|
2947
|
+
interceptTimeout: 5000,
|
|
2948
|
+
};
|
|
2949
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), customViewConfig);
|
|
2950
|
+
await searchEmbed.render();
|
|
2951
|
+
const mockEventData = {
|
|
2952
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
2953
|
+
data: JSON.stringify({
|
|
2954
|
+
input: '/api/test',
|
|
2955
|
+
init: {}
|
|
2956
|
+
})
|
|
2957
|
+
};
|
|
2958
|
+
const mockPort = {
|
|
2959
|
+
postMessage: jest.fn(),
|
|
2960
|
+
};
|
|
2961
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2962
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2963
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
2964
|
+
});
|
|
2965
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2966
|
+
const call = mockHandleInterceptEvent.mock.calls[0][0];
|
|
2967
|
+
expect(call.viewConfig).toMatchObject({
|
|
2968
|
+
interceptUrls: ['/api/test'],
|
|
2969
|
+
interceptTimeout: 5000,
|
|
2970
|
+
});
|
|
2971
|
+
});
|
|
2972
|
+
});
|
|
2973
|
+
test('should handle ApiIntercept event with eventPort', async () => {
|
|
2974
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2975
|
+
await searchEmbed.render();
|
|
2976
|
+
const mockEventData = {
|
|
2977
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
2978
|
+
data: JSON.stringify({
|
|
2979
|
+
input: '/prism/?op=GetChartWithData',
|
|
2980
|
+
init: {}
|
|
2981
|
+
})
|
|
2982
|
+
};
|
|
2983
|
+
const mockPort = {
|
|
2984
|
+
postMessage: jest.fn(),
|
|
2985
|
+
};
|
|
2986
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2987
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2988
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
2989
|
+
});
|
|
2990
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2991
|
+
expect(mockHandleInterceptEvent).toHaveBeenCalled();
|
|
2992
|
+
// Verify the executeEvent function uses the port
|
|
2993
|
+
const executeEventFn = mockHandleInterceptEvent.mock.calls[0][0].executeEvent;
|
|
2994
|
+
expect(executeEventFn).toBeDefined();
|
|
2995
|
+
});
|
|
2996
|
+
});
|
|
2997
|
+
test('should not process non-ApiIntercept events through handleApiInterceptEvent', async () => {
|
|
2998
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2999
|
+
await searchEmbed.render();
|
|
3000
|
+
const mockEventData = {
|
|
3001
|
+
type: index_1.EmbedEvent.Save,
|
|
3002
|
+
data: { answerId: '123' },
|
|
3003
|
+
};
|
|
3004
|
+
const mockPort = {
|
|
3005
|
+
postMessage: jest.fn(),
|
|
3006
|
+
};
|
|
3007
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3008
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3009
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
3010
|
+
});
|
|
3011
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3012
|
+
expect(mockHandleInterceptEvent).not.toHaveBeenCalled();
|
|
3013
|
+
});
|
|
3014
|
+
});
|
|
3015
|
+
test('should handle multiple ApiIntercept events', async () => {
|
|
3016
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3017
|
+
await searchEmbed.render();
|
|
3018
|
+
const mockEventData1 = {
|
|
3019
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
3020
|
+
data: JSON.stringify({
|
|
3021
|
+
input: '/prism/?op=GetChartWithData',
|
|
3022
|
+
init: {}
|
|
3023
|
+
})
|
|
3024
|
+
};
|
|
3025
|
+
const mockEventData2 = {
|
|
3026
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
3027
|
+
data: JSON.stringify({
|
|
3028
|
+
input: '/prism/?op=LoadContextBook',
|
|
3029
|
+
init: {}
|
|
3030
|
+
})
|
|
3031
|
+
};
|
|
3032
|
+
const mockPort = {
|
|
3033
|
+
postMessage: jest.fn(),
|
|
3034
|
+
};
|
|
3035
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3036
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3037
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData1, mockPort);
|
|
3038
|
+
});
|
|
3039
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3040
|
+
(0, test_utils_1.postMessageToParent)((0, test_utils_1.getIFrameEl)().contentWindow, mockEventData2, mockPort);
|
|
3041
|
+
});
|
|
3042
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3043
|
+
expect(mockHandleInterceptEvent).toHaveBeenCalledTimes(2);
|
|
3044
|
+
});
|
|
3045
|
+
});
|
|
3046
|
+
test('should pass eventPort to executeCallbacks', async () => {
|
|
3047
|
+
let capturedExecuteEvent;
|
|
3048
|
+
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3049
|
+
capturedExecuteEvent = params.executeEvent;
|
|
3050
|
+
});
|
|
3051
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3052
|
+
const mockCallback = jest.fn();
|
|
3053
|
+
searchEmbed.on(index_1.EmbedEvent.ApiIntercept, mockCallback);
|
|
3054
|
+
await searchEmbed.render();
|
|
3055
|
+
const mockEventData = {
|
|
3056
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
3057
|
+
data: JSON.stringify({
|
|
3058
|
+
input: '/prism/?op=GetChartWithData',
|
|
3059
|
+
init: {}
|
|
3060
|
+
})
|
|
3061
|
+
};
|
|
3062
|
+
const mockPort = {
|
|
3063
|
+
postMessage: jest.fn(),
|
|
3064
|
+
};
|
|
3065
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3066
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3067
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
3068
|
+
});
|
|
3069
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3070
|
+
expect(capturedExecuteEvent).toBeDefined();
|
|
3071
|
+
// Call executeEvent with a response
|
|
3072
|
+
const responseData = { execute: true };
|
|
3073
|
+
capturedExecuteEvent(index_1.EmbedEvent.ApiIntercept, responseData);
|
|
3074
|
+
// Verify the callback was invoked with the data
|
|
3075
|
+
expect(mockCallback).toHaveBeenCalled();
|
|
3076
|
+
expect(mockCallback.mock.calls[0][0]).toEqual(responseData);
|
|
3077
|
+
});
|
|
3078
|
+
});
|
|
3079
|
+
test('should handle getUnsavedAnswerTml with empty response', async () => {
|
|
3080
|
+
let capturedGetUnsavedAnswerTml;
|
|
3081
|
+
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3082
|
+
capturedGetUnsavedAnswerTml = params.getUnsavedAnswerTml;
|
|
3083
|
+
});
|
|
3084
|
+
mockProcessTrigger.mockResolvedValue([]);
|
|
3085
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3086
|
+
await searchEmbed.render();
|
|
3087
|
+
const mockEventData = {
|
|
3088
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
3089
|
+
data: JSON.stringify({
|
|
3090
|
+
input: '/prism/?op=GetChartWithData',
|
|
3091
|
+
init: {}
|
|
3092
|
+
})
|
|
3093
|
+
};
|
|
3094
|
+
const mockPort = {
|
|
3095
|
+
postMessage: jest.fn(),
|
|
3096
|
+
};
|
|
3097
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3098
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3099
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
3100
|
+
});
|
|
3101
|
+
await (0, test_utils_1.executeAfterWait)(async () => {
|
|
3102
|
+
expect(capturedGetUnsavedAnswerTml).toBeDefined();
|
|
3103
|
+
const result = await capturedGetUnsavedAnswerTml({
|
|
3104
|
+
sessionId: 'session-123',
|
|
3105
|
+
vizId: 'viz-456'
|
|
3106
|
+
});
|
|
3107
|
+
expect(result).toBeUndefined();
|
|
3108
|
+
});
|
|
3109
|
+
});
|
|
3110
|
+
test('should work with LiveboardEmbed', async () => {
|
|
3111
|
+
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
3112
|
+
...defaultViewConfig,
|
|
3113
|
+
liveboardId: 'test-liveboard-id',
|
|
3114
|
+
});
|
|
3115
|
+
await liveboardEmbed.render();
|
|
3116
|
+
const mockEventData = {
|
|
3117
|
+
type: index_1.EmbedEvent.ApiIntercept,
|
|
3118
|
+
data: JSON.stringify({
|
|
3119
|
+
input: '/prism/?op=LoadContextBook',
|
|
3120
|
+
init: {}
|
|
3121
|
+
})
|
|
3122
|
+
};
|
|
3123
|
+
const mockPort = {
|
|
3124
|
+
postMessage: jest.fn(),
|
|
3125
|
+
};
|
|
3126
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3127
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3128
|
+
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEventData, mockPort);
|
|
3129
|
+
});
|
|
3130
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3131
|
+
expect(mockHandleInterceptEvent).toHaveBeenCalledTimes(1);
|
|
3132
|
+
expect(mockHandleInterceptEvent).toHaveBeenCalledWith(expect.objectContaining({
|
|
3133
|
+
eventData: mockEventData,
|
|
3134
|
+
}));
|
|
3135
|
+
});
|
|
3136
|
+
});
|
|
3137
|
+
});
|
|
2964
3138
|
});
|
|
2965
3139
|
//# sourceMappingURL=ts-embed.spec.js.map
|