@thoughtspot/visual-embed-sdk 1.44.1-test → 1.44.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/cjs/package.json +6 -5
- package/cjs/src/auth.spec.js +43 -42
- package/cjs/src/auth.spec.js.map +1 -1
- package/cjs/src/authToken.spec.js +3 -3
- package/cjs/src/authToken.spec.js.map +1 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +3 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +12 -5
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/base.spec.js +11 -15
- package/cjs/src/embed/base.spec.js.map +1 -1
- package/cjs/src/embed/bodyless-conversation.spec.js +2 -2
- package/cjs/src/embed/bodyless-conversation.spec.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +2 -2
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/embed.spec.js +101 -2
- package/cjs/src/embed/embed.spec.js.map +1 -1
- package/cjs/src/embed/events.spec.js +2 -2
- package/cjs/src/embed/events.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +3 -1
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +28 -26
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/pinboard.spec.js +1 -1
- package/cjs/src/embed/pinboard.spec.js.map +1 -1
- package/cjs/src/embed/sage.spec.js +2 -2
- package/cjs/src/embed/sage.spec.js.map +1 -1
- package/cjs/src/embed/search.spec.js +118 -2
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed-trigger.spec.js +2 -3
- package/cjs/src/embed/ts-embed-trigger.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +242 -66
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/mixpanel-service.spec.js +1 -1
- package/cjs/src/mixpanel-service.spec.js.map +1 -1
- package/cjs/src/react/index.spec.js +3 -4
- package/cjs/src/react/index.spec.js.map +1 -1
- package/cjs/src/test/test-utils.js +1 -1
- package/cjs/src/test/test-utils.js.map +1 -1
- package/cjs/src/utils/authService/authService.spec.js +8 -8
- package/cjs/src/utils/authService/authService.spec.js.map +1 -1
- package/cjs/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/cjs/src/utils/graphql/graphql-request.spec.js +1 -1
- package/cjs/src/utils/graphql/graphql-request.spec.js.map +1 -1
- package/cjs/src/utils/graphql/sourceService.spec.js +1 -1
- package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -1
- package/cjs/src/utils/logger.spec.d.ts +5 -20
- package/cjs/src/utils/logger.spec.d.ts.map +1 -1
- package/cjs/src/utils/processData.spec.js +17 -17
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/cjs/src/utils/processTrigger.spec.js +8 -8
- package/cjs/src/utils/processTrigger.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +6 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +32 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +19 -10
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-BXCUJ09L.js → index-CSFjfTVk.js} +1 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/utils/logger.spec.d.ts +5 -20
- package/dist/src/utils/logger.spec.d.ts.map +1 -1
- package/dist/src/utils.d.ts +6 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +39 -5
- package/dist/tsembed-react.js +38 -4
- package/dist/tsembed.es.js +39 -5
- package/dist/tsembed.js +38 -4
- package/lib/package.json +6 -5
- package/lib/src/auth.spec.js +43 -42
- package/lib/src/auth.spec.js.map +1 -1
- package/lib/src/authToken.spec.js +3 -3
- package/lib/src/authToken.spec.js.map +1 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +4 -2
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +12 -5
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/base.spec.js +11 -15
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/bodyless-conversation.spec.js +2 -2
- package/lib/src/embed/bodyless-conversation.spec.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +2 -2
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/embed.spec.js +103 -4
- package/lib/src/embed/embed.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +2 -2
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +2 -2
- package/lib/src/embed/hostEventClient/host-event-client.spec.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 +28 -26
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/pinboard.spec.js +1 -1
- package/lib/src/embed/pinboard.spec.js.map +1 -1
- package/lib/src/embed/sage.spec.js +2 -2
- package/lib/src/embed/sage.spec.js.map +1 -1
- package/lib/src/embed/search.spec.js +118 -2
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/ts-embed-trigger.spec.js +2 -3
- package/lib/src/embed/ts-embed-trigger.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +242 -66
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/mixpanel-service.spec.js +1 -1
- package/lib/src/mixpanel-service.spec.js.map +1 -1
- package/lib/src/react/index.spec.js +3 -4
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/test/test-utils.js +1 -1
- package/lib/src/test/test-utils.js.map +1 -1
- package/lib/src/utils/authService/authService.spec.js +8 -8
- package/lib/src/utils/authService/authService.spec.js.map +1 -1
- package/lib/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/utils/graphql/graphql-request.spec.js +1 -1
- package/lib/src/utils/graphql/graphql-request.spec.js.map +1 -1
- package/lib/src/utils/graphql/sourceService.spec.js +1 -1
- package/lib/src/utils/graphql/sourceService.spec.js.map +1 -1
- package/lib/src/utils/logger.spec.d.ts +5 -20
- package/lib/src/utils/logger.spec.d.ts.map +1 -1
- package/lib/src/utils/processData.spec.js +17 -17
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils/processTrigger.spec.js +8 -8
- package/lib/src/utils/processTrigger.spec.js.map +1 -1
- package/lib/src/utils.d.ts +6 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +30 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +20 -11
- package/lib/src/utils.spec.js.map +1 -1
- package/package.json +6 -5
- package/src/auth.spec.ts +53 -51
- package/src/authToken.spec.ts +3 -3
- package/src/embed/app.spec.ts +12 -5
- package/src/embed/app.ts +4 -2
- package/src/embed/base.spec.ts +16 -20
- package/src/embed/bodyless-conversation.spec.ts +2 -2
- package/src/embed/conversation.spec.ts +2 -2
- package/src/embed/embed.spec.ts +122 -2
- package/src/embed/events.spec.ts +2 -2
- package/src/embed/hostEventClient/host-event-client.spec.ts +2 -2
- package/src/embed/liveboard.spec.ts +30 -29
- package/src/embed/liveboard.ts +4 -2
- package/src/embed/pinboard.spec.ts +1 -1
- package/src/embed/sage.spec.ts +2 -2
- package/src/embed/search.spec.ts +133 -2
- package/src/embed/ts-embed-trigger.spec.ts +2 -3
- package/src/embed/ts-embed.spec.ts +317 -76
- package/src/mixpanel-service.spec.ts +1 -1
- package/src/react/index.spec.tsx +4 -5
- package/src/test/test-utils.ts +2 -2
- package/src/utils/authService/authService.spec.ts +17 -17
- package/src/utils/authService/tokenizedAuthService.spec.ts +4 -4
- package/src/utils/graphql/answerService/answerService.spec.ts +3 -3
- package/src/utils/graphql/graphql-request.spec.ts +2 -2
- package/src/utils/graphql/sourceService.spec.ts +1 -1
- package/src/utils/processData.spec.ts +26 -26
- package/src/utils/processTrigger.spec.ts +8 -8
- package/src/utils.spec.ts +22 -11
- package/src/utils.ts +34 -0
|
@@ -89,7 +89,7 @@ const hideBydefault = `&hideAction=${fixedEncodeURI(
|
|
|
89
89
|
const defaultParamsWithHiddenActions = defaultParamsWithoutHiddenActions + hideBydefault;
|
|
90
90
|
|
|
91
91
|
beforeAll(() => {
|
|
92
|
-
spyOn(window, 'alert');
|
|
92
|
+
jest.spyOn(window, 'alert').mockImplementation(() => {});
|
|
93
93
|
});
|
|
94
94
|
|
|
95
95
|
const customisations = {
|
|
@@ -152,7 +152,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
152
152
|
});
|
|
153
153
|
|
|
154
154
|
beforeAll(() => {
|
|
155
|
-
jest.spyOn(authInstance, 'postLoginService').mockResolvedValue(
|
|
155
|
+
jest.spyOn(authInstance, 'postLoginService').mockResolvedValue(undefined);
|
|
156
156
|
});
|
|
157
157
|
|
|
158
158
|
describe('Vaidate iframe properties', () => {
|
|
@@ -293,7 +293,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
293
293
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
294
294
|
});
|
|
295
295
|
await executeAfterWait(() => {
|
|
296
|
-
expect(baseInstance.notifyAuthFailure).
|
|
296
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
297
297
|
authInstance.AuthFailureType.EXPIRY,
|
|
298
298
|
);
|
|
299
299
|
expect(baseInstance.handleAuth).not.toHaveBeenCalled();
|
|
@@ -330,7 +330,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
330
330
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
331
331
|
});
|
|
332
332
|
await executeAfterWait(() => {
|
|
333
|
-
expect(baseInstance.notifyAuthFailure).
|
|
333
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
334
334
|
authInstance.AuthFailureType.EXPIRY,
|
|
335
335
|
);
|
|
336
336
|
expect(mockPort.postMessage).not.toHaveBeenCalledWith({
|
|
@@ -725,7 +725,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
725
725
|
}, 1000);
|
|
726
726
|
});
|
|
727
727
|
|
|
728
|
-
test('should remove event listener when called off method', async (
|
|
728
|
+
test('should remove event listener when called off method', async () => {
|
|
729
729
|
const mockEmbedEventPayload = {
|
|
730
730
|
type: EmbedEvent.Save,
|
|
731
731
|
data: { answerId: '123' },
|
|
@@ -745,10 +745,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
745
745
|
const iframe = getIFrameEl();
|
|
746
746
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload);
|
|
747
747
|
});
|
|
748
|
-
|
|
749
|
-
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
750
|
-
done();
|
|
751
|
-
}, 100);
|
|
748
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
752
749
|
});
|
|
753
750
|
});
|
|
754
751
|
|
|
@@ -1013,7 +1010,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1013
1010
|
authType: AuthType.TrustedAuthTokenCookieless,
|
|
1014
1011
|
getAuthToken: () => Promise.reject(),
|
|
1015
1012
|
});
|
|
1016
|
-
jest.spyOn(logger, 'error').
|
|
1013
|
+
jest.spyOn(logger, 'error').mockImplementation(() => {});
|
|
1017
1014
|
});
|
|
1018
1015
|
|
|
1019
1016
|
afterEach(() => {
|
|
@@ -1089,14 +1086,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
1089
1086
|
const mockPort: any = {
|
|
1090
1087
|
postMessage: jest.fn(),
|
|
1091
1088
|
};
|
|
1092
|
-
const loggerSpy = jest.spyOn(logger, 'error').
|
|
1089
|
+
const loggerSpy = jest.spyOn(logger, 'error').mockImplementation(() => {});
|
|
1093
1090
|
await executeAfterWait(() => {
|
|
1094
1091
|
const iframe = getIFrameEl();
|
|
1095
1092
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
1096
1093
|
});
|
|
1097
1094
|
await executeAfterWait(() => {
|
|
1098
1095
|
expect(getRootEl().innerHTML).toContain('Not logged in');
|
|
1099
|
-
expect(baseInstance.notifyAuthFailure).
|
|
1096
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
1100
1097
|
authInstance.AuthFailureType.EXPIRY,
|
|
1101
1098
|
);
|
|
1102
1099
|
expect(loggerSpy).toHaveBeenCalledTimes(1);
|
|
@@ -1118,7 +1115,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1118
1115
|
const searchEmbed = new SearchEmbed(getRootEl(), { ...defaultViewConfig, preRenderId: 'test' });
|
|
1119
1116
|
jest.spyOn(baseInstance, 'notifyAuthFailure');
|
|
1120
1117
|
searchEmbed.preRender();
|
|
1121
|
-
const loggerSpy = jest.spyOn(logger, 'error').
|
|
1118
|
+
const loggerSpy = jest.spyOn(logger, 'error').mockImplementation(() => {});
|
|
1122
1119
|
const mockPort: any = {
|
|
1123
1120
|
postMessage: jest.fn(),
|
|
1124
1121
|
};
|
|
@@ -1129,7 +1126,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1129
1126
|
const preRenderWrapper = document.getElementById('tsEmbed-pre-render-wrapper-test');
|
|
1130
1127
|
await executeAfterWait(() => {
|
|
1131
1128
|
expect(preRenderWrapper.innerHTML).toContain('Not logged in');
|
|
1132
|
-
expect(baseInstance.notifyAuthFailure).
|
|
1129
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
1133
1130
|
authInstance.AuthFailureType.EXPIRY,
|
|
1134
1131
|
);
|
|
1135
1132
|
expect(loggerSpy).toHaveBeenCalledTimes(1);
|
|
@@ -1163,7 +1160,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1163
1160
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload);
|
|
1164
1161
|
});
|
|
1165
1162
|
await executeAfterWait(() => {
|
|
1166
|
-
expect(baseInstance.notifyAuthFailure).
|
|
1163
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
1167
1164
|
authInstance.AuthFailureType.EXPIRY,
|
|
1168
1165
|
);
|
|
1169
1166
|
expect(baseInstance.handleAuth).toHaveBeenCalled();
|
|
@@ -1190,7 +1187,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1190
1187
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload);
|
|
1191
1188
|
});
|
|
1192
1189
|
await executeAfterWait(() => {
|
|
1193
|
-
expect(baseInstance.notifyAuthFailure).
|
|
1190
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
1194
1191
|
authInstance.AuthFailureType.EXPIRY,
|
|
1195
1192
|
);
|
|
1196
1193
|
expect(baseInstance.handleAuth).not.toHaveBeenCalled();
|
|
@@ -1210,13 +1207,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
1210
1207
|
const setup = async (isLoggedIn = false) => {
|
|
1211
1208
|
jest.spyOn(window, 'addEventListener').mockImplementationOnce(
|
|
1212
1209
|
(event, handler, options) => {
|
|
1213
|
-
handler({
|
|
1214
|
-
data: {
|
|
1215
|
-
type: 'xyz',
|
|
1216
|
-
},
|
|
1210
|
+
(handler as EventListener)({
|
|
1211
|
+
data: { type: 'xyz' },
|
|
1217
1212
|
ports: [3000],
|
|
1218
1213
|
source: null,
|
|
1219
|
-
});
|
|
1214
|
+
} as any);
|
|
1220
1215
|
},
|
|
1221
1216
|
);
|
|
1222
1217
|
const iFrame: any = document.createElement('div');
|
|
@@ -1226,7 +1221,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1226
1221
|
tsEmbed.on(EmbedEvent.CustomAction, jest.fn());
|
|
1227
1222
|
jest.spyOn(iFrame, 'addEventListener').mockImplementationOnce(
|
|
1228
1223
|
(event, handler, options) => {
|
|
1229
|
-
handler({});
|
|
1224
|
+
(handler as EventListener)({} as Event);
|
|
1230
1225
|
},
|
|
1231
1226
|
);
|
|
1232
1227
|
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
@@ -1235,8 +1230,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1235
1230
|
|
|
1236
1231
|
test('mixpanel should call with VISUAL_SDK_RENDER_COMPLETE', async () => {
|
|
1237
1232
|
await setup(true);
|
|
1238
|
-
expect(mockMixPanelEvent).
|
|
1239
|
-
expect(mockMixPanelEvent).
|
|
1233
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
|
|
1234
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(
|
|
1240
1235
|
MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE,
|
|
1241
1236
|
expect.objectContaining({
|
|
1242
1237
|
elWidth: 0,
|
|
@@ -1251,12 +1246,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
1251
1246
|
expect(prefetchIframe.length).toBe(0);
|
|
1252
1247
|
});
|
|
1253
1248
|
|
|
1254
|
-
test('Should render failure when login fails', async (
|
|
1255
|
-
setup(false);
|
|
1256
|
-
|
|
1257
|
-
expect(getRootEl().innerHTML).toContain('Failed to Login');
|
|
1258
|
-
done();
|
|
1259
|
-
});
|
|
1249
|
+
test('Should render failure when login fails', async () => {
|
|
1250
|
+
await setup(false);
|
|
1251
|
+
expect(getRootEl().innerHTML).toContain('Failed to Login');
|
|
1260
1252
|
});
|
|
1261
1253
|
});
|
|
1262
1254
|
|
|
@@ -1273,13 +1265,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
1273
1265
|
const setup = async (isLoggedIn = false, overrideOrgId: number | undefined = undefined) => {
|
|
1274
1266
|
jest.spyOn(window, 'addEventListener').mockImplementationOnce(
|
|
1275
1267
|
(event, handler, options) => {
|
|
1276
|
-
handler({
|
|
1277
|
-
data: {
|
|
1278
|
-
type: 'xyz',
|
|
1279
|
-
},
|
|
1268
|
+
(handler as EventListener)({
|
|
1269
|
+
data: { type: 'xyz' },
|
|
1280
1270
|
ports: [3000],
|
|
1281
1271
|
source: null,
|
|
1282
|
-
});
|
|
1272
|
+
} as any);
|
|
1283
1273
|
},
|
|
1284
1274
|
);
|
|
1285
1275
|
mockProcessTrigger.mockResolvedValueOnce({ session: 'test' });
|
|
@@ -1315,7 +1305,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1315
1305
|
tsEmbed.on(EmbedEvent.CustomAction, jest.fn());
|
|
1316
1306
|
jest.spyOn(iFrame, 'addEventListener').mockImplementationOnce(
|
|
1317
1307
|
(event, handler, options) => {
|
|
1318
|
-
handler({});
|
|
1308
|
+
(handler as EventListener)({} as Event);
|
|
1319
1309
|
},
|
|
1320
1310
|
);
|
|
1321
1311
|
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
@@ -1377,11 +1367,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
1377
1367
|
) => {
|
|
1378
1368
|
jest.spyOn(window, 'addEventListener').mockImplementationOnce(
|
|
1379
1369
|
(event, handler, options) => {
|
|
1380
|
-
handler({
|
|
1370
|
+
(handler as EventListener)({
|
|
1381
1371
|
data: { type: 'xyz' },
|
|
1382
1372
|
ports: [3000],
|
|
1383
1373
|
source: null,
|
|
1384
|
-
});
|
|
1374
|
+
} as any);
|
|
1385
1375
|
},
|
|
1386
1376
|
);
|
|
1387
1377
|
mockProcessTrigger.mockResolvedValueOnce({ session: 'test' });
|
|
@@ -1398,7 +1388,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1398
1388
|
.mockImplementation(jest.fn());
|
|
1399
1389
|
} else {
|
|
1400
1390
|
mockGetPreauthInfo = jest.spyOn(sessionInfoService, 'getPreauthInfo')
|
|
1401
|
-
|
|
1391
|
+
.mockResolvedValue({ info: { test: 'data' } } as any);
|
|
1402
1392
|
}
|
|
1403
1393
|
|
|
1404
1394
|
const mockPreauthInfoFetch = jest.spyOn(authService, 'fetchPreauthInfoService')
|
|
@@ -1443,7 +1433,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1443
1433
|
};
|
|
1444
1434
|
jest.spyOn(iFrame, 'addEventListener').mockImplementationOnce(
|
|
1445
1435
|
(event, handler, options) => {
|
|
1446
|
-
handler({});
|
|
1436
|
+
(handler as EventListener)({} as Event);
|
|
1447
1437
|
},
|
|
1448
1438
|
);
|
|
1449
1439
|
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
@@ -1592,13 +1582,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
1592
1582
|
const iFrame: any = document.createElement('div');
|
|
1593
1583
|
iFrame.contentWindow = null;
|
|
1594
1584
|
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
1595
|
-
spyOn(logger, 'error');
|
|
1585
|
+
jest.spyOn(logger, 'error');
|
|
1596
1586
|
await tsEmbed.render();
|
|
1597
1587
|
});
|
|
1598
1588
|
|
|
1599
1589
|
test('mixpanel should call with VISUAL_SDK_RENDER_FAILED', () => {
|
|
1600
|
-
expect(mockMixPanelEvent).
|
|
1601
|
-
expect(mockMixPanelEvent).
|
|
1590
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
|
|
1591
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
|
|
1602
1592
|
error: 'false',
|
|
1603
1593
|
});
|
|
1604
1594
|
});
|
|
@@ -1606,7 +1596,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1606
1596
|
|
|
1607
1597
|
describe('when visible actions are set', () => {
|
|
1608
1598
|
test('should throw error when there are both visible and hidden actions - pinboard', async () => {
|
|
1609
|
-
spyOn(logger, 'error');
|
|
1599
|
+
jest.spyOn(logger, 'error');
|
|
1610
1600
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
1611
1601
|
hiddenActions: [Action.DownloadAsCsv],
|
|
1612
1602
|
visibleActions: [Action.DownloadAsCsv],
|
|
@@ -1641,7 +1631,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1641
1631
|
hiddenActions: Array<Action>,
|
|
1642
1632
|
visibleActions: Array<Action>,
|
|
1643
1633
|
) {
|
|
1644
|
-
spyOn(logger, 'error');
|
|
1634
|
+
jest.spyOn(logger, 'error');
|
|
1645
1635
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
1646
1636
|
hiddenActions,
|
|
1647
1637
|
visibleActions,
|
|
@@ -1689,7 +1679,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1689
1679
|
|
|
1690
1680
|
describe('when visible Tabs are set', () => {
|
|
1691
1681
|
test('should throw error when there are both visible and hidden Tabs - pinboard', async () => {
|
|
1692
|
-
spyOn(logger, 'error');
|
|
1682
|
+
jest.spyOn(logger, 'error');
|
|
1693
1683
|
const pinboardEmbed = new PinboardEmbed(getRootEl(), {
|
|
1694
1684
|
visibleTabs: [tabId1],
|
|
1695
1685
|
hiddenTabs: [tabId2],
|
|
@@ -1724,7 +1714,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1724
1714
|
hiddenTabs: Array<string>,
|
|
1725
1715
|
visibleTabs: Array<string>,
|
|
1726
1716
|
) {
|
|
1727
|
-
spyOn(logger, 'error');
|
|
1717
|
+
jest.spyOn(logger, 'error');
|
|
1728
1718
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
1729
1719
|
hiddenTabs,
|
|
1730
1720
|
visibleTabs,
|
|
@@ -1780,7 +1770,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1780
1770
|
});
|
|
1781
1771
|
|
|
1782
1772
|
test('Error should be true', async () => {
|
|
1783
|
-
spyOn(logger, 'error');
|
|
1773
|
+
jest.spyOn(logger, 'error');
|
|
1784
1774
|
const tsEmbed = new SearchEmbed(getRootEl(), {});
|
|
1785
1775
|
await tsEmbed.render();
|
|
1786
1776
|
expect(tsEmbed['isError']).toBe(true);
|
|
@@ -1799,7 +1789,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1799
1789
|
});
|
|
1800
1790
|
|
|
1801
1791
|
test('when isRendered is true than isError will be true', async () => {
|
|
1802
|
-
spyOn(logger, 'warn');
|
|
1792
|
+
jest.spyOn(logger, 'warn');
|
|
1803
1793
|
const viEmbedIns = new tsEmbedInstance.V1Embed(getRootEl(), defaultViewConfig);
|
|
1804
1794
|
expect(viEmbedIns['isError']).toBe(false);
|
|
1805
1795
|
await viEmbedIns.render();
|
|
@@ -1857,7 +1847,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1857
1847
|
});
|
|
1858
1848
|
|
|
1859
1849
|
test('navigateToPage function use before render', async () => {
|
|
1860
|
-
spyOn(logger, 'log');
|
|
1850
|
+
jest.spyOn(logger, 'log');
|
|
1861
1851
|
const appEmbed = new AppEmbed(getRootEl(), {
|
|
1862
1852
|
frameParams: {
|
|
1863
1853
|
width: '100%',
|
|
@@ -2092,7 +2082,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2092
2082
|
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&additionalPendoKey=1234${defaultParamsPost}#/home`,
|
|
2093
2083
|
);
|
|
2094
2084
|
});
|
|
2095
|
-
xit('Sets the forceSAMLAutoRedirect param', async (
|
|
2085
|
+
xit('Sets the forceSAMLAutoRedirect param', async () => {
|
|
2096
2086
|
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
2097
2087
|
init({
|
|
2098
2088
|
thoughtSpotHost: 'tshost',
|
|
@@ -2106,11 +2096,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
2106
2096
|
},
|
|
2107
2097
|
});
|
|
2108
2098
|
appEmbed.render();
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
expect(getIFrameSrc()).toContain('forceSAMLAutoRedirect=true');
|
|
2112
|
-
done();
|
|
2113
|
-
});
|
|
2099
|
+
expect(getIFrameSrc()).toContain('authType=EmbeddedSSO');
|
|
2100
|
+
expect(getIFrameSrc()).toContain('forceSAMLAutoRedirect=true');
|
|
2114
2101
|
});
|
|
2115
2102
|
|
|
2116
2103
|
it('Should set the override locale for number/date and currency format', async () => {
|
|
@@ -2308,8 +2295,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2308
2295
|
beforeAll(() => {
|
|
2309
2296
|
delete window.location;
|
|
2310
2297
|
(window as any).location = {
|
|
2311
|
-
|
|
2312
|
-
search: '',
|
|
2298
|
+
assign: jest.fn(),
|
|
2313
2299
|
};
|
|
2314
2300
|
});
|
|
2315
2301
|
|
|
@@ -2386,7 +2372,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2386
2372
|
|
|
2387
2373
|
afterAll(() => {
|
|
2388
2374
|
const rootEle = document.getElementById('myRoot');
|
|
2389
|
-
rootEle
|
|
2375
|
+
rootEle?.remove();
|
|
2390
2376
|
jest.clearAllMocks();
|
|
2391
2377
|
});
|
|
2392
2378
|
|
|
@@ -2429,9 +2415,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
2429
2415
|
});
|
|
2430
2416
|
|
|
2431
2417
|
// show preRender
|
|
2432
|
-
const warnSpy = spyOn(logger, 'warn');
|
|
2418
|
+
const warnSpy = jest.spyOn(logger, 'warn');
|
|
2433
2419
|
libEmbed.showPreRender();
|
|
2434
|
-
expect(warnSpy).toHaveBeenCalledTimes(
|
|
2420
|
+
expect(warnSpy).toHaveBeenCalledTimes(1);
|
|
2435
2421
|
|
|
2436
2422
|
resizeObserverCb([
|
|
2437
2423
|
{
|
|
@@ -2459,7 +2445,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2459
2445
|
it('preRender called without preRenderId should log error ', () => {
|
|
2460
2446
|
createRootEleForEmbed();
|
|
2461
2447
|
|
|
2462
|
-
spyOn(logger, 'error');
|
|
2448
|
+
jest.spyOn(logger, 'error');
|
|
2463
2449
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
2464
2450
|
liveboardId: 'myLiveboardId',
|
|
2465
2451
|
});
|
|
@@ -2492,7 +2478,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2492
2478
|
preRenderId: 'i-am-preRendered',
|
|
2493
2479
|
liveboardId: 'myLiveboardId',
|
|
2494
2480
|
});
|
|
2495
|
-
spyOn(libEmbed, 'preRender');
|
|
2481
|
+
jest.spyOn(libEmbed, 'preRender');
|
|
2496
2482
|
libEmbed.hidePreRender();
|
|
2497
2483
|
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
2498
2484
|
});
|
|
@@ -2531,8 +2517,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
2531
2517
|
const libEmbed = new LiveboardEmbed('#tsEmbedDiv', {
|
|
2532
2518
|
liveboardId: 'myLiveboardId',
|
|
2533
2519
|
});
|
|
2534
|
-
spyOn(libEmbed, 'preRender');
|
|
2535
|
-
spyOn(logger, 'error');
|
|
2520
|
+
jest.spyOn(libEmbed, 'preRender');
|
|
2521
|
+
jest.spyOn(logger, 'error');
|
|
2536
2522
|
libEmbed.showPreRender();
|
|
2537
2523
|
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
2538
2524
|
expect(logger.error).toHaveBeenCalledTimes(1);
|
|
@@ -2569,7 +2555,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2569
2555
|
preRenderId: 'test',
|
|
2570
2556
|
});
|
|
2571
2557
|
await libEmbed.syncPreRenderStyle();
|
|
2572
|
-
expect(logger.error).
|
|
2558
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
2573
2559
|
'PreRender should be called before using syncPreRenderStyle',
|
|
2574
2560
|
);
|
|
2575
2561
|
(logger.error as any).mockClear();
|
|
@@ -2607,7 +2593,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2607
2593
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
2608
2594
|
});
|
|
2609
2595
|
await executeAfterWait(() => {
|
|
2610
|
-
expect(baseInstance.notifyAuthFailure).
|
|
2596
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
2611
2597
|
authInstance.AuthFailureType.IDLE_SESSION_TIMEOUT,
|
|
2612
2598
|
);
|
|
2613
2599
|
expect(baseInstance.handleAuth).toHaveBeenCalled();
|
|
@@ -2637,14 +2623,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
2637
2623
|
const mockPort: any = {
|
|
2638
2624
|
postMessage: jest.fn(),
|
|
2639
2625
|
};
|
|
2640
|
-
const loggerSpy = jest.spyOn(logger, 'error').
|
|
2626
|
+
const loggerSpy = jest.spyOn(logger, 'error').mockImplementation(() => {});
|
|
2641
2627
|
await executeAfterWait(() => {
|
|
2642
2628
|
const iframe = getIFrameEl();
|
|
2643
2629
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
2644
2630
|
});
|
|
2645
2631
|
await executeAfterWait(() => {
|
|
2646
2632
|
expect(getRootEl().innerHTML).toContain('Not logged in');
|
|
2647
|
-
expect(baseInstance.notifyAuthFailure).
|
|
2633
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
2648
2634
|
authInstance.AuthFailureType.IDLE_SESSION_TIMEOUT,
|
|
2649
2635
|
);
|
|
2650
2636
|
expect(loggerSpy).toHaveBeenCalledTimes(1);
|
|
@@ -2674,13 +2660,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
2674
2660
|
const mockPort: any = {
|
|
2675
2661
|
postMessage: jest.fn(),
|
|
2676
2662
|
};
|
|
2677
|
-
const loggerSpy = jest.spyOn(logger, 'error').
|
|
2663
|
+
const loggerSpy = jest.spyOn(logger, 'error').mockImplementation(() => {});
|
|
2678
2664
|
await executeAfterWait(() => {
|
|
2679
2665
|
const iframe = getIFrameEl();
|
|
2680
2666
|
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
2681
2667
|
});
|
|
2682
2668
|
await executeAfterWait(() => {
|
|
2683
|
-
expect(baseInstance.notifyAuthFailure).
|
|
2669
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(
|
|
2684
2670
|
authInstance.AuthFailureType.IDLE_SESSION_TIMEOUT,
|
|
2685
2671
|
);
|
|
2686
2672
|
expect(loggerSpy).toHaveBeenCalledTimes(0);
|
|
@@ -2692,7 +2678,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2692
2678
|
});
|
|
2693
2679
|
|
|
2694
2680
|
describe('Renders should wait for init to completed', () => {
|
|
2695
|
-
const errorSpy = jest.spyOn(logger, 'error').
|
|
2681
|
+
const errorSpy = jest.spyOn(logger, 'error').mockImplementation(() => {});
|
|
2696
2682
|
beforeEach(() => {
|
|
2697
2683
|
errorSpy.mockClear();
|
|
2698
2684
|
resetValueFromWindow('initFlagKey');
|
|
@@ -3507,7 +3493,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3507
3493
|
|
|
3508
3494
|
test('should execute callbacks through executeEvent function', async () => {
|
|
3509
3495
|
let capturedExecuteEvent: any;
|
|
3510
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3496
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
3511
3497
|
capturedExecuteEvent = params.executeEvent;
|
|
3512
3498
|
});
|
|
3513
3499
|
|
|
@@ -3548,7 +3534,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3548
3534
|
|
|
3549
3535
|
test('should call triggerUIPassThrough through getUnsavedAnswerTml function', async () => {
|
|
3550
3536
|
let capturedGetUnsavedAnswerTml: any;
|
|
3551
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3537
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
3552
3538
|
capturedGetUnsavedAnswerTml = params.getUnsavedAnswerTml;
|
|
3553
3539
|
});
|
|
3554
3540
|
|
|
@@ -3732,7 +3718,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3732
3718
|
|
|
3733
3719
|
test('should pass eventPort to executeCallbacks', async () => {
|
|
3734
3720
|
let capturedExecuteEvent: any;
|
|
3735
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3721
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
3736
3722
|
capturedExecuteEvent = params.executeEvent;
|
|
3737
3723
|
});
|
|
3738
3724
|
|
|
@@ -3773,7 +3759,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3773
3759
|
|
|
3774
3760
|
test('should handle getUnsavedAnswerTml with empty response', async () => {
|
|
3775
3761
|
let capturedGetUnsavedAnswerTml: any;
|
|
3776
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3762
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
3777
3763
|
capturedGetUnsavedAnswerTml = params.getUnsavedAnswerTml;
|
|
3778
3764
|
});
|
|
3779
3765
|
|
|
@@ -3921,3 +3907,258 @@ describe('Additional Coverage Tests', () => {
|
|
|
3921
3907
|
expect(removeEventListenerSpy).toHaveBeenCalledWith('message', expect.any(Function));
|
|
3922
3908
|
});
|
|
3923
3909
|
});
|
|
3910
|
+
|
|
3911
|
+
describe('Trigger method edge cases', () => {
|
|
3912
|
+
beforeAll(() => {
|
|
3913
|
+
init({
|
|
3914
|
+
thoughtSpotHost: 'tshost',
|
|
3915
|
+
authType: AuthType.None,
|
|
3916
|
+
});
|
|
3917
|
+
});
|
|
3918
|
+
|
|
3919
|
+
beforeEach(() => {
|
|
3920
|
+
document.body.innerHTML = getDocumentBody();
|
|
3921
|
+
});
|
|
3922
|
+
|
|
3923
|
+
test('should handle error when trigger is called with undefined messageType', async () => {
|
|
3924
|
+
const searchEmbed = new SearchEmbed(getRootEl(), defaultViewConfig);
|
|
3925
|
+
jest.spyOn(logger, 'error');
|
|
3926
|
+
await searchEmbed.render();
|
|
3927
|
+
|
|
3928
|
+
await executeAfterWait(async () => {
|
|
3929
|
+
const result = await searchEmbed.trigger(undefined as any);
|
|
3930
|
+
expect(result).toBeNull();
|
|
3931
|
+
expect(logger.error).toHaveBeenCalledWith(
|
|
3932
|
+
expect.objectContaining({
|
|
3933
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
3934
|
+
code: EmbedErrorCodes.HOST_EVENT_TYPE_UNDEFINED,
|
|
3935
|
+
}),
|
|
3936
|
+
);
|
|
3937
|
+
});
|
|
3938
|
+
});
|
|
3939
|
+
|
|
3940
|
+
test('should return null when trigger is called before iframe is ready', async () => {
|
|
3941
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockRejectedValueOnce(
|
|
3942
|
+
new Error('Auth failed'),
|
|
3943
|
+
);
|
|
3944
|
+
const searchEmbed = new SearchEmbed(getRootEl(), defaultViewConfig);
|
|
3945
|
+
jest.spyOn(logger, 'debug');
|
|
3946
|
+
await searchEmbed.render();
|
|
3947
|
+
|
|
3948
|
+
await executeAfterWait(async () => {
|
|
3949
|
+
const result = await searchEmbed.trigger(HostEvent.Reload);
|
|
3950
|
+
expect(result).toBeNull();
|
|
3951
|
+
});
|
|
3952
|
+
});
|
|
3953
|
+
});
|
|
3954
|
+
|
|
3955
|
+
describe('PreRender replaceExistingPreRender scenarios', () => {
|
|
3956
|
+
beforeAll(() => {
|
|
3957
|
+
init({
|
|
3958
|
+
thoughtSpotHost: 'tshost',
|
|
3959
|
+
authType: AuthType.None,
|
|
3960
|
+
});
|
|
3961
|
+
});
|
|
3962
|
+
|
|
3963
|
+
afterEach(() => {
|
|
3964
|
+
const rootEle = document.getElementById('myRoot');
|
|
3965
|
+
rootEle?.remove();
|
|
3966
|
+
});
|
|
3967
|
+
|
|
3968
|
+
test('should skip re-rendering when preRender already exists and replaceExistingPreRender is false', async () => {
|
|
3969
|
+
createRootEleForEmbed();
|
|
3970
|
+
const embed1 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
3971
|
+
preRenderId: 'no-replace-test',
|
|
3972
|
+
liveboardId: 'lb1',
|
|
3973
|
+
});
|
|
3974
|
+
await embed1.preRender();
|
|
3975
|
+
await waitFor(() => !!getIFrameEl());
|
|
3976
|
+
|
|
3977
|
+
const embed2 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
3978
|
+
preRenderId: 'no-replace-test',
|
|
3979
|
+
liveboardId: 'lb2',
|
|
3980
|
+
});
|
|
3981
|
+
|
|
3982
|
+
const result = await embed2.preRender(false, false);
|
|
3983
|
+
|
|
3984
|
+
expect(result).toBe(embed2);
|
|
3985
|
+
// The original iframe should still have lb1
|
|
3986
|
+
const iframe = getIFrameEl();
|
|
3987
|
+
expect(iframe.src).toContain('lb1');
|
|
3988
|
+
});
|
|
3989
|
+
});
|
|
3990
|
+
|
|
3991
|
+
describe('Destroy error handling', () => {
|
|
3992
|
+
beforeAll(() => {
|
|
3993
|
+
init({
|
|
3994
|
+
thoughtSpotHost: 'tshost',
|
|
3995
|
+
authType: AuthType.None,
|
|
3996
|
+
});
|
|
3997
|
+
});
|
|
3998
|
+
|
|
3999
|
+
beforeEach(() => {
|
|
4000
|
+
document.body.innerHTML = getDocumentBody();
|
|
4001
|
+
});
|
|
4002
|
+
|
|
4003
|
+
test('should handle error gracefully when destroy fails', async () => {
|
|
4004
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
4005
|
+
frameParams: { width: '100%', height: '100%' },
|
|
4006
|
+
});
|
|
4007
|
+
await appEmbed.render();
|
|
4008
|
+
|
|
4009
|
+
const logSpy = jest.spyOn(logger, 'log').mockImplementation(() => {});
|
|
4010
|
+
|
|
4011
|
+
jest.spyOn(Node.prototype, 'removeChild').mockImplementationOnce(() => {
|
|
4012
|
+
throw new Error('Remove failed');
|
|
4013
|
+
});
|
|
4014
|
+
|
|
4015
|
+
expect(() => {
|
|
4016
|
+
appEmbed.destroy();
|
|
4017
|
+
}).not.toThrow();
|
|
4018
|
+
|
|
4019
|
+
expect(logSpy).toHaveBeenCalledWith('Error destroying TS Embed', expect.any(Error));
|
|
4020
|
+
logSpy.mockRestore();
|
|
4021
|
+
});
|
|
4022
|
+
});
|
|
4023
|
+
|
|
4024
|
+
describe('Fullscreen change handler behavior', () => {
|
|
4025
|
+
beforeAll(() => {
|
|
4026
|
+
init({
|
|
4027
|
+
thoughtSpotHost: 'tshost',
|
|
4028
|
+
authType: AuthType.None,
|
|
4029
|
+
disableFullscreenPresentation: false,
|
|
4030
|
+
});
|
|
4031
|
+
});
|
|
4032
|
+
|
|
4033
|
+
beforeEach(() => {
|
|
4034
|
+
document.body.innerHTML = getDocumentBody();
|
|
4035
|
+
});
|
|
4036
|
+
|
|
4037
|
+
test('should trigger ExitPresentMode when exiting fullscreen', async () => {
|
|
4038
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
4039
|
+
...defaultViewConfig,
|
|
4040
|
+
liveboardId: 'test-lb',
|
|
4041
|
+
});
|
|
4042
|
+
await liveboardEmbed.render();
|
|
4043
|
+
|
|
4044
|
+
await executeAfterWait(() => {
|
|
4045
|
+
const iframe = getIFrameEl();
|
|
4046
|
+
expect(iframe).toBeTruthy();
|
|
4047
|
+
});
|
|
4048
|
+
|
|
4049
|
+
mockProcessTrigger.mockResolvedValue({});
|
|
4050
|
+
|
|
4051
|
+
liveboardEmbed['setupFullscreenChangeHandler']();
|
|
4052
|
+
|
|
4053
|
+
Object.defineProperty(document, 'fullscreenElement', {
|
|
4054
|
+
value: null,
|
|
4055
|
+
writable: true,
|
|
4056
|
+
configurable: true,
|
|
4057
|
+
});
|
|
4058
|
+
|
|
4059
|
+
const event = new Event('fullscreenchange');
|
|
4060
|
+
document.dispatchEvent(event);
|
|
4061
|
+
|
|
4062
|
+
await executeAfterWait(() => {
|
|
4063
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
4064
|
+
expect.any(Object),
|
|
4065
|
+
HostEvent.ExitPresentMode,
|
|
4066
|
+
expect.any(String),
|
|
4067
|
+
expect.any(Object),
|
|
4068
|
+
);
|
|
4069
|
+
});
|
|
4070
|
+
});
|
|
4071
|
+
|
|
4072
|
+
test('should not trigger ExitPresentMode when entering fullscreen', async () => {
|
|
4073
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
4074
|
+
...defaultViewConfig,
|
|
4075
|
+
liveboardId: 'test-lb-fullscreen',
|
|
4076
|
+
});
|
|
4077
|
+
await liveboardEmbed.render();
|
|
4078
|
+
|
|
4079
|
+
await executeAfterWait(() => {
|
|
4080
|
+
const iframe = getIFrameEl();
|
|
4081
|
+
expect(iframe).toBeTruthy();
|
|
4082
|
+
});
|
|
4083
|
+
|
|
4084
|
+
mockProcessTrigger.mockClear();
|
|
4085
|
+
mockProcessTrigger.mockResolvedValue({});
|
|
4086
|
+
|
|
4087
|
+
liveboardEmbed['setupFullscreenChangeHandler']();
|
|
4088
|
+
|
|
4089
|
+
Object.defineProperty(document, 'fullscreenElement', {
|
|
4090
|
+
value: getIFrameEl(),
|
|
4091
|
+
writable: true,
|
|
4092
|
+
configurable: true,
|
|
4093
|
+
});
|
|
4094
|
+
|
|
4095
|
+
const event = new Event('fullscreenchange');
|
|
4096
|
+
document.dispatchEvent(event);
|
|
4097
|
+
|
|
4098
|
+
await executeAfterWait(() => {
|
|
4099
|
+
expect(mockProcessTrigger).not.toHaveBeenCalledWith(
|
|
4100
|
+
expect.any(Object),
|
|
4101
|
+
HostEvent.ExitPresentMode,
|
|
4102
|
+
expect.any(String),
|
|
4103
|
+
expect.any(Object),
|
|
4104
|
+
);
|
|
4105
|
+
});
|
|
4106
|
+
});
|
|
4107
|
+
});
|
|
4108
|
+
|
|
4109
|
+
describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
4110
|
+
beforeAll(() => {
|
|
4111
|
+
init({
|
|
4112
|
+
thoughtSpotHost: 'tshost',
|
|
4113
|
+
authType: AuthType.None,
|
|
4114
|
+
});
|
|
4115
|
+
});
|
|
4116
|
+
|
|
4117
|
+
afterEach(() => {
|
|
4118
|
+
const rootEle = document.getElementById('myRoot');
|
|
4119
|
+
rootEle?.remove();
|
|
4120
|
+
});
|
|
4121
|
+
|
|
4122
|
+
test('should trigger UpdateEmbedParams when showPreRender connects to existing prerendered component', async () => {
|
|
4123
|
+
createRootEleForEmbed();
|
|
4124
|
+
mockMessageChannel();
|
|
4125
|
+
|
|
4126
|
+
(window as any).ResizeObserver = window.ResizeObserver
|
|
4127
|
+
|| jest.fn().mockImplementation(() => ({
|
|
4128
|
+
disconnect: jest.fn(),
|
|
4129
|
+
observe: jest.fn(),
|
|
4130
|
+
unobserve: jest.fn(),
|
|
4131
|
+
}));
|
|
4132
|
+
|
|
4133
|
+
const embed1 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4134
|
+
preRenderId: 'update-params-test',
|
|
4135
|
+
liveboardId: 'original-lb',
|
|
4136
|
+
});
|
|
4137
|
+
|
|
4138
|
+
await embed1.preRender();
|
|
4139
|
+
await waitFor(() => !!getIFrameEl());
|
|
4140
|
+
|
|
4141
|
+
embed1.isEmbedContainerLoaded = true;
|
|
4142
|
+
|
|
4143
|
+
mockProcessTrigger.mockClear();
|
|
4144
|
+
mockProcessTrigger.mockResolvedValue({});
|
|
4145
|
+
|
|
4146
|
+
const embed2 = new LiveboardEmbed('#tsEmbedDiv', {
|
|
4147
|
+
preRenderId: 'update-params-test',
|
|
4148
|
+
liveboardId: 'updated-lb',
|
|
4149
|
+
});
|
|
4150
|
+
|
|
4151
|
+
embed2.showPreRender();
|
|
4152
|
+
|
|
4153
|
+
await executeAfterWait(() => {
|
|
4154
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(
|
|
4155
|
+
expect.any(Object),
|
|
4156
|
+
HostEvent.UpdateEmbedParams,
|
|
4157
|
+
expect.any(String),
|
|
4158
|
+
expect.objectContaining({
|
|
4159
|
+
liveboardId: 'updated-lb',
|
|
4160
|
+
}),
|
|
4161
|
+
);
|
|
4162
|
+
});
|
|
4163
|
+
});
|
|
4164
|
+
});
|