@thoughtspot/visual-embed-sdk 1.44.1 → 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/api-intercept.d.ts.map +1 -1
- package/cjs/src/api-intercept.js +8 -3
- package/cjs/src/api-intercept.js.map +1 -1
- package/cjs/src/api-intercept.spec.js +19 -3
- package/cjs/src/api-intercept.spec.js.map +1 -1
- 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 +17 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +9 -5
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +96 -6
- 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.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +6 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +8 -3
- 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 +18 -0
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +13 -6
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +114 -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.d.ts +3 -2
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +51 -17
- 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 +335 -71
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/errors.d.ts +7 -0
- package/cjs/src/errors.d.ts.map +1 -1
- package/cjs/src/errors.js +7 -0
- package/cjs/src/errors.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/types.d.ts +194 -1
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +94 -2
- package/cjs/src/types.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-BE9gGzRX.js → index-CSFjfTVk.js} +1 -1
- package/dist/src/api-intercept.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +17 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +18 -0
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +3 -2
- 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/errors.d.ts +7 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/types.d.ts +194 -1
- package/dist/src/types.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 +219 -36
- package/dist/tsembed-react.js +218 -35
- package/dist/tsembed.es.js +219 -36
- package/dist/tsembed.js +218 -35
- package/dist/visual-embed-sdk-react-full.d.ts +184 -2
- package/dist/visual-embed-sdk-react.d.ts +184 -2
- package/dist/visual-embed-sdk.d.ts +184 -2
- package/lib/package.json +6 -5
- package/lib/src/api-intercept.d.ts.map +1 -1
- package/lib/src/api-intercept.js +9 -4
- package/lib/src/api-intercept.js.map +1 -1
- package/lib/src/api-intercept.spec.js +20 -4
- package/lib/src/api-intercept.spec.js.map +1 -1
- 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 +17 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +10 -6
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +96 -6
- 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.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +7 -2
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +9 -4
- 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 +18 -0
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +15 -8
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +114 -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.d.ts +3 -2
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +52 -18
- 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 +336 -72
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts +7 -0
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js +7 -0
- package/lib/src/errors.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/types.d.ts +194 -1
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +93 -1
- package/lib/src/types.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/api-intercept.spec.ts +23 -10
- package/src/api-intercept.ts +9 -4
- package/src/auth.spec.ts +53 -51
- package/src/authToken.spec.ts +3 -3
- package/src/embed/app.spec.ts +128 -7
- package/src/embed/app.ts +30 -4
- package/src/embed/base.spec.ts +16 -20
- package/src/embed/bodyless-conversation.spec.ts +2 -2
- package/src/embed/conversation.spec.ts +9 -4
- package/src/embed/conversation.ts +7 -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 +137 -29
- package/src/embed/liveboard.ts +36 -6
- 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 +424 -91
- package/src/embed/ts-embed.ts +56 -19
- package/src/errors.ts +7 -0
- 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/types.ts +206 -1
- 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
|
@@ -44,7 +44,7 @@ exports.defaultParams = `&${exports.defaultParamsWithoutHiddenActions}&hideActio
|
|
|
44
44
|
const hideBydefault = `&hideAction=${(0, test_utils_1.fixedEncodeURI)(JSON.stringify([types_1.Action.ReportError, ...search_1.HiddenActionItemByDefaultForSearchEmbed]))}`;
|
|
45
45
|
const defaultParamsWithHiddenActions = exports.defaultParamsWithoutHiddenActions + hideBydefault;
|
|
46
46
|
beforeAll(() => {
|
|
47
|
-
spyOn(window, 'alert');
|
|
47
|
+
jest.spyOn(window, 'alert').mockImplementation(() => { });
|
|
48
48
|
});
|
|
49
49
|
const customisations = {
|
|
50
50
|
style: {
|
|
@@ -100,7 +100,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
100
100
|
(0, authToken_1.resetCachedAuthToken)();
|
|
101
101
|
});
|
|
102
102
|
beforeAll(() => {
|
|
103
|
-
jest.spyOn(authInstance, 'postLoginService').mockResolvedValue(
|
|
103
|
+
jest.spyOn(authInstance, 'postLoginService').mockResolvedValue(undefined);
|
|
104
104
|
});
|
|
105
105
|
describe('Vaidate iframe properties', () => {
|
|
106
106
|
beforeAll(() => {
|
|
@@ -208,7 +208,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
208
208
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
209
209
|
});
|
|
210
210
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
211
|
-
expect(baseInstance.notifyAuthFailure).
|
|
211
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.EXPIRY);
|
|
212
212
|
expect(baseInstance.handleAuth).not.toHaveBeenCalled();
|
|
213
213
|
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
214
214
|
type: index_1.EmbedEvent.AuthExpire,
|
|
@@ -240,7 +240,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
240
240
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
241
241
|
});
|
|
242
242
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
243
|
-
expect(baseInstance.notifyAuthFailure).
|
|
243
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.EXPIRY);
|
|
244
244
|
expect(mockPort.postMessage).not.toHaveBeenCalledWith({
|
|
245
245
|
type: index_1.EmbedEvent.AuthExpire,
|
|
246
246
|
data: { authToken: 'test_auth_token2' },
|
|
@@ -592,7 +592,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
592
592
|
expect(iframe.contentWindow.postMessage).toHaveBeenCalledTimes(0);
|
|
593
593
|
}, 1000);
|
|
594
594
|
});
|
|
595
|
-
test('should remove event listener when called off method', async (
|
|
595
|
+
test('should remove event listener when called off method', async () => {
|
|
596
596
|
const mockEmbedEventPayload = {
|
|
597
597
|
type: index_1.EmbedEvent.Save,
|
|
598
598
|
data: { answerId: '123' },
|
|
@@ -610,10 +610,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
610
610
|
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
611
611
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload);
|
|
612
612
|
});
|
|
613
|
-
|
|
614
|
-
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
615
|
-
done();
|
|
616
|
-
}, 100);
|
|
613
|
+
expect(mockFn).toHaveBeenCalledTimes(1);
|
|
617
614
|
});
|
|
618
615
|
});
|
|
619
616
|
describe('Appinit embedEvent in cookieless authentication authType', () => {
|
|
@@ -854,7 +851,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
854
851
|
authType: index_1.AuthType.TrustedAuthTokenCookieless,
|
|
855
852
|
getAuthToken: () => Promise.reject(),
|
|
856
853
|
});
|
|
857
|
-
jest.spyOn(logger_1.logger, 'error').
|
|
854
|
+
jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
858
855
|
});
|
|
859
856
|
afterEach(() => {
|
|
860
857
|
jest.clearAllMocks();
|
|
@@ -921,14 +918,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
921
918
|
const mockPort = {
|
|
922
919
|
postMessage: jest.fn(),
|
|
923
920
|
};
|
|
924
|
-
const loggerSpy = jest.spyOn(logger_1.logger, 'error').
|
|
921
|
+
const loggerSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
925
922
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
926
923
|
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
927
924
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
928
925
|
});
|
|
929
926
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
930
927
|
expect((0, test_utils_1.getRootEl)().innerHTML).toContain('Not logged in');
|
|
931
|
-
expect(baseInstance.notifyAuthFailure).
|
|
928
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.EXPIRY);
|
|
932
929
|
expect(loggerSpy).toHaveBeenCalledTimes(1);
|
|
933
930
|
});
|
|
934
931
|
jest.spyOn(authService, 'verifyTokenService').mockClear();
|
|
@@ -945,7 +942,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
945
942
|
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), { ...defaultViewConfig, preRenderId: 'test' });
|
|
946
943
|
jest.spyOn(baseInstance, 'notifyAuthFailure');
|
|
947
944
|
searchEmbed.preRender();
|
|
948
|
-
const loggerSpy = jest.spyOn(logger_1.logger, 'error').
|
|
945
|
+
const loggerSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
949
946
|
const mockPort = {
|
|
950
947
|
postMessage: jest.fn(),
|
|
951
948
|
};
|
|
@@ -956,7 +953,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
956
953
|
const preRenderWrapper = document.getElementById('tsEmbed-pre-render-wrapper-test');
|
|
957
954
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
958
955
|
expect(preRenderWrapper.innerHTML).toContain('Not logged in');
|
|
959
|
-
expect(baseInstance.notifyAuthFailure).
|
|
956
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.EXPIRY);
|
|
960
957
|
expect(loggerSpy).toHaveBeenCalledTimes(1);
|
|
961
958
|
});
|
|
962
959
|
jest.spyOn(authService, 'verifyTokenService').mockClear();
|
|
@@ -986,7 +983,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
986
983
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload);
|
|
987
984
|
});
|
|
988
985
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
989
|
-
expect(baseInstance.notifyAuthFailure).
|
|
986
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.EXPIRY);
|
|
990
987
|
expect(baseInstance.handleAuth).toHaveBeenCalled();
|
|
991
988
|
});
|
|
992
989
|
});
|
|
@@ -1011,7 +1008,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1011
1008
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload);
|
|
1012
1009
|
});
|
|
1013
1010
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1014
|
-
expect(baseInstance.notifyAuthFailure).
|
|
1011
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.EXPIRY);
|
|
1015
1012
|
expect(baseInstance.handleAuth).not.toHaveBeenCalled();
|
|
1016
1013
|
});
|
|
1017
1014
|
});
|
|
@@ -1027,9 +1024,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1027
1024
|
const setup = async (isLoggedIn = false) => {
|
|
1028
1025
|
jest.spyOn(window, 'addEventListener').mockImplementationOnce((event, handler, options) => {
|
|
1029
1026
|
handler({
|
|
1030
|
-
data: {
|
|
1031
|
-
type: 'xyz',
|
|
1032
|
-
},
|
|
1027
|
+
data: { type: 'xyz' },
|
|
1033
1028
|
ports: [3000],
|
|
1034
1029
|
source: null,
|
|
1035
1030
|
});
|
|
@@ -1047,8 +1042,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1047
1042
|
};
|
|
1048
1043
|
test('mixpanel should call with VISUAL_SDK_RENDER_COMPLETE', async () => {
|
|
1049
1044
|
await setup(true);
|
|
1050
|
-
expect(mockMixPanelEvent).
|
|
1051
|
-
expect(mockMixPanelEvent).
|
|
1045
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
|
|
1046
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_RENDER_COMPLETE, expect.objectContaining({
|
|
1052
1047
|
elWidth: 0,
|
|
1053
1048
|
elHeight: 0,
|
|
1054
1049
|
}));
|
|
@@ -1058,12 +1053,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
1058
1053
|
const prefetchIframe = document.querySelectorAll('.prefetchIframe');
|
|
1059
1054
|
expect(prefetchIframe.length).toBe(0);
|
|
1060
1055
|
});
|
|
1061
|
-
test('Should render failure when login fails', async (
|
|
1062
|
-
setup(false);
|
|
1063
|
-
(0, test_utils_1.
|
|
1064
|
-
expect((0, test_utils_1.getRootEl)().innerHTML).toContain('Failed to Login');
|
|
1065
|
-
done();
|
|
1066
|
-
});
|
|
1056
|
+
test('Should render failure when login fails', async () => {
|
|
1057
|
+
await setup(false);
|
|
1058
|
+
expect((0, test_utils_1.getRootEl)().innerHTML).toContain('Failed to Login');
|
|
1067
1059
|
});
|
|
1068
1060
|
});
|
|
1069
1061
|
describe('Trigger infoSuccess event on iframe load', () => {
|
|
@@ -1078,9 +1070,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1078
1070
|
const setup = async (isLoggedIn = false, overrideOrgId = undefined) => {
|
|
1079
1071
|
jest.spyOn(window, 'addEventListener').mockImplementationOnce((event, handler, options) => {
|
|
1080
1072
|
handler({
|
|
1081
|
-
data: {
|
|
1082
|
-
type: 'xyz',
|
|
1083
|
-
},
|
|
1073
|
+
data: { type: 'xyz' },
|
|
1084
1074
|
ports: [3000],
|
|
1085
1075
|
source: null,
|
|
1086
1076
|
});
|
|
@@ -1313,19 +1303,19 @@ describe('Unit test case for ts embed', () => {
|
|
|
1313
1303
|
const iFrame = document.createElement('div');
|
|
1314
1304
|
iFrame.contentWindow = null;
|
|
1315
1305
|
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
1316
|
-
spyOn(logger_1.logger, 'error');
|
|
1306
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
1317
1307
|
await tsEmbed.render();
|
|
1318
1308
|
});
|
|
1319
1309
|
test('mixpanel should call with VISUAL_SDK_RENDER_FAILED', () => {
|
|
1320
|
-
expect(mockMixPanelEvent).
|
|
1321
|
-
expect(mockMixPanelEvent).
|
|
1310
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
|
|
1311
|
+
expect(mockMixPanelEvent).toHaveBeenCalledWith(mixpanel_service_1.MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
|
|
1322
1312
|
error: 'false',
|
|
1323
1313
|
});
|
|
1324
1314
|
});
|
|
1325
1315
|
});
|
|
1326
1316
|
describe('when visible actions are set', () => {
|
|
1327
1317
|
test('should throw error when there are both visible and hidden actions - pinboard', async () => {
|
|
1328
|
-
spyOn(logger_1.logger, 'error');
|
|
1318
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
1329
1319
|
const pinboardEmbed = new index_1.PinboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1330
1320
|
hiddenActions: [types_1.Action.DownloadAsCsv],
|
|
1331
1321
|
visibleActions: [types_1.Action.DownloadAsCsv],
|
|
@@ -1334,7 +1324,12 @@ describe('Unit test case for ts embed', () => {
|
|
|
1334
1324
|
});
|
|
1335
1325
|
await pinboardEmbed.render();
|
|
1336
1326
|
expect(pinboardEmbed['isError']).toBe(true);
|
|
1337
|
-
expect(logger_1.logger.error).toHaveBeenCalledWith(
|
|
1327
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith({
|
|
1328
|
+
errorType: types_1.ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1329
|
+
message: errors_1.ERROR_MESSAGE.CONFLICTING_ACTIONS_CONFIG,
|
|
1330
|
+
code: types_1.EmbedErrorCodes.CONFLICTING_ACTIONS_CONFIG,
|
|
1331
|
+
error: errors_1.ERROR_MESSAGE.CONFLICTING_ACTIONS_CONFIG,
|
|
1332
|
+
});
|
|
1338
1333
|
});
|
|
1339
1334
|
test('should not throw error when there are only visible or hidden actions - pinboard', async () => {
|
|
1340
1335
|
const pinboardEmbed = new index_1.PinboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1351,7 +1346,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1351
1346
|
* @param visibleActions
|
|
1352
1347
|
*/
|
|
1353
1348
|
async function testActionsForLiveboards(hiddenActions, visibleActions) {
|
|
1354
|
-
spyOn(logger_1.logger, 'error');
|
|
1349
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
1355
1350
|
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1356
1351
|
hiddenActions,
|
|
1357
1352
|
visibleActions,
|
|
@@ -1360,7 +1355,12 @@ describe('Unit test case for ts embed', () => {
|
|
|
1360
1355
|
});
|
|
1361
1356
|
await liveboardEmbed.render();
|
|
1362
1357
|
expect(liveboardEmbed['isError']).toBe(true);
|
|
1363
|
-
expect(logger_1.logger.error).toHaveBeenCalledWith(
|
|
1358
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith({
|
|
1359
|
+
errorType: types_1.ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1360
|
+
message: errors_1.ERROR_MESSAGE.CONFLICTING_ACTIONS_CONFIG,
|
|
1361
|
+
code: types_1.EmbedErrorCodes.CONFLICTING_ACTIONS_CONFIG,
|
|
1362
|
+
error: errors_1.ERROR_MESSAGE.CONFLICTING_ACTIONS_CONFIG,
|
|
1363
|
+
});
|
|
1364
1364
|
}
|
|
1365
1365
|
test('should throw error when there are both visible and hidden action arrays', async () => {
|
|
1366
1366
|
await testActionsForLiveboards([types_1.Action.DownloadAsCsv], [types_1.Action.DownloadAsCsv]);
|
|
@@ -1392,7 +1392,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1392
1392
|
});
|
|
1393
1393
|
describe('when visible Tabs are set', () => {
|
|
1394
1394
|
test('should throw error when there are both visible and hidden Tabs - pinboard', async () => {
|
|
1395
|
-
spyOn(logger_1.logger, 'error');
|
|
1395
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
1396
1396
|
const pinboardEmbed = new index_1.PinboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1397
1397
|
visibleTabs: [tabId1],
|
|
1398
1398
|
hiddenTabs: [tabId2],
|
|
@@ -1401,7 +1401,12 @@ describe('Unit test case for ts embed', () => {
|
|
|
1401
1401
|
});
|
|
1402
1402
|
await pinboardEmbed.render();
|
|
1403
1403
|
expect(pinboardEmbed['isError']).toBe(true);
|
|
1404
|
-
expect(logger_1.logger.error).toHaveBeenCalledWith(
|
|
1404
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith({
|
|
1405
|
+
errorType: types_1.ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1406
|
+
message: errors_1.ERROR_MESSAGE.CONFLICTING_TABS_CONFIG,
|
|
1407
|
+
code: types_1.EmbedErrorCodes.CONFLICTING_TABS_CONFIG,
|
|
1408
|
+
error: errors_1.ERROR_MESSAGE.CONFLICTING_TABS_CONFIG,
|
|
1409
|
+
});
|
|
1405
1410
|
});
|
|
1406
1411
|
test('should not throw error when there are only visible or hidden Tabs - pinboard', async () => {
|
|
1407
1412
|
const pinboardEmbed = new index_1.PinboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1418,7 +1423,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1418
1423
|
* @param visibleTabs
|
|
1419
1424
|
*/
|
|
1420
1425
|
async function testTabsForLiveboards(hiddenTabs, visibleTabs) {
|
|
1421
|
-
spyOn(logger_1.logger, 'error');
|
|
1426
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
1422
1427
|
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1423
1428
|
hiddenTabs,
|
|
1424
1429
|
visibleTabs,
|
|
@@ -1427,7 +1432,12 @@ describe('Unit test case for ts embed', () => {
|
|
|
1427
1432
|
});
|
|
1428
1433
|
await liveboardEmbed.render();
|
|
1429
1434
|
expect(liveboardEmbed['isError']).toBe(true);
|
|
1430
|
-
expect(logger_1.logger.error).toHaveBeenCalledWith(
|
|
1435
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith({
|
|
1436
|
+
errorType: types_1.ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1437
|
+
message: errors_1.ERROR_MESSAGE.CONFLICTING_TABS_CONFIG,
|
|
1438
|
+
code: types_1.EmbedErrorCodes.CONFLICTING_TABS_CONFIG,
|
|
1439
|
+
error: errors_1.ERROR_MESSAGE.CONFLICTING_TABS_CONFIG,
|
|
1440
|
+
});
|
|
1431
1441
|
}
|
|
1432
1442
|
test('should throw error when there are both visible and hidden Tab arrays', async () => {
|
|
1433
1443
|
await testTabsForLiveboards([tabId1], [tabId2]);
|
|
@@ -1466,11 +1476,16 @@ describe('Unit test case for ts embed', () => {
|
|
|
1466
1476
|
});
|
|
1467
1477
|
});
|
|
1468
1478
|
test('Error should be true', async () => {
|
|
1469
|
-
spyOn(logger_1.logger, 'error');
|
|
1479
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
1470
1480
|
const tsEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
1471
1481
|
await tsEmbed.render();
|
|
1472
1482
|
expect(tsEmbed['isError']).toBe(true);
|
|
1473
|
-
expect(logger_1.logger.error).toHaveBeenCalledWith(
|
|
1483
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith({
|
|
1484
|
+
errorType: types_1.ErrorDetailsTypes.VALIDATION_ERROR,
|
|
1485
|
+
message: errors_1.ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
1486
|
+
code: types_1.EmbedErrorCodes.INIT_ERROR,
|
|
1487
|
+
error: errors_1.ERROR_MESSAGE.INIT_SDK_REQUIRED,
|
|
1488
|
+
});
|
|
1474
1489
|
});
|
|
1475
1490
|
});
|
|
1476
1491
|
describe('V1Embed ', () => {
|
|
@@ -1478,7 +1493,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1478
1493
|
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(() => 'http://tshost');
|
|
1479
1494
|
});
|
|
1480
1495
|
test('when isRendered is true than isError will be true', async () => {
|
|
1481
|
-
spyOn(logger_1.logger, 'warn');
|
|
1496
|
+
jest.spyOn(logger_1.logger, 'warn');
|
|
1482
1497
|
const viEmbedIns = new tsEmbedInstance.V1Embed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
1483
1498
|
expect(viEmbedIns['isError']).toBe(false);
|
|
1484
1499
|
await viEmbedIns.render();
|
|
@@ -1522,7 +1537,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1522
1537
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}${defaultParamsPost}#/${path}`);
|
|
1523
1538
|
});
|
|
1524
1539
|
test('navigateToPage function use before render', async () => {
|
|
1525
|
-
spyOn(logger_1.logger, 'log');
|
|
1540
|
+
jest.spyOn(logger_1.logger, 'log');
|
|
1526
1541
|
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1527
1542
|
frameParams: {
|
|
1528
1543
|
width: '100%',
|
|
@@ -1726,7 +1741,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1726
1741
|
await appEmbed.render();
|
|
1727
1742
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&additionalPendoKey=1234${defaultParamsPost}#/home`);
|
|
1728
1743
|
});
|
|
1729
|
-
xit('Sets the forceSAMLAutoRedirect param', async (
|
|
1744
|
+
xit('Sets the forceSAMLAutoRedirect param', async () => {
|
|
1730
1745
|
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
1731
1746
|
(0, index_1.init)({
|
|
1732
1747
|
thoughtSpotHost: 'tshost',
|
|
@@ -1739,11 +1754,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1739
1754
|
},
|
|
1740
1755
|
});
|
|
1741
1756
|
appEmbed.render();
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
expect((0, test_utils_1.getIFrameSrc)()).toContain('forceSAMLAutoRedirect=true');
|
|
1745
|
-
done();
|
|
1746
|
-
});
|
|
1757
|
+
expect((0, test_utils_1.getIFrameSrc)()).toContain('authType=EmbeddedSSO');
|
|
1758
|
+
expect((0, test_utils_1.getIFrameSrc)()).toContain('forceSAMLAutoRedirect=true');
|
|
1747
1759
|
});
|
|
1748
1760
|
it('Should set the override locale for number/date and currency format', async () => {
|
|
1749
1761
|
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
@@ -1893,8 +1905,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1893
1905
|
beforeAll(() => {
|
|
1894
1906
|
delete window.location;
|
|
1895
1907
|
window.location = {
|
|
1896
|
-
|
|
1897
|
-
search: '',
|
|
1908
|
+
assign: jest.fn(),
|
|
1898
1909
|
};
|
|
1899
1910
|
});
|
|
1900
1911
|
beforeEach(() => {
|
|
@@ -1964,7 +1975,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1964
1975
|
});
|
|
1965
1976
|
afterAll(() => {
|
|
1966
1977
|
const rootEle = document.getElementById('myRoot');
|
|
1967
|
-
rootEle.remove();
|
|
1978
|
+
rootEle === null || rootEle === void 0 ? void 0 : rootEle.remove();
|
|
1968
1979
|
jest.clearAllMocks();
|
|
1969
1980
|
});
|
|
1970
1981
|
it('should preRender and hide the iframe', async () => {
|
|
@@ -1998,9 +2009,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
1998
2009
|
};
|
|
1999
2010
|
});
|
|
2000
2011
|
// show preRender
|
|
2001
|
-
const warnSpy = spyOn(logger_1.logger, 'warn');
|
|
2012
|
+
const warnSpy = jest.spyOn(logger_1.logger, 'warn');
|
|
2002
2013
|
libEmbed.showPreRender();
|
|
2003
|
-
expect(warnSpy).toHaveBeenCalledTimes(
|
|
2014
|
+
expect(warnSpy).toHaveBeenCalledTimes(1);
|
|
2004
2015
|
resizeObserverCb([
|
|
2005
2016
|
{
|
|
2006
2017
|
target: tsEmbedDiv,
|
|
@@ -2021,7 +2032,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2021
2032
|
});
|
|
2022
2033
|
it('preRender called without preRenderId should log error ', () => {
|
|
2023
2034
|
(0, test_utils_1.createRootEleForEmbed)();
|
|
2024
|
-
spyOn(logger_1.logger, 'error');
|
|
2035
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
2025
2036
|
const libEmbed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
2026
2037
|
liveboardId: 'myLiveboardId',
|
|
2027
2038
|
});
|
|
@@ -2048,7 +2059,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2048
2059
|
preRenderId: 'i-am-preRendered',
|
|
2049
2060
|
liveboardId: 'myLiveboardId',
|
|
2050
2061
|
});
|
|
2051
|
-
spyOn(libEmbed, 'preRender');
|
|
2062
|
+
jest.spyOn(libEmbed, 'preRender');
|
|
2052
2063
|
libEmbed.hidePreRender();
|
|
2053
2064
|
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
2054
2065
|
});
|
|
@@ -2082,8 +2093,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
2082
2093
|
const libEmbed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
2083
2094
|
liveboardId: 'myLiveboardId',
|
|
2084
2095
|
});
|
|
2085
|
-
spyOn(libEmbed, 'preRender');
|
|
2086
|
-
spyOn(logger_1.logger, 'error');
|
|
2096
|
+
jest.spyOn(libEmbed, 'preRender');
|
|
2097
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
2087
2098
|
libEmbed.showPreRender();
|
|
2088
2099
|
expect(libEmbed.preRender).toHaveBeenCalledTimes(0);
|
|
2089
2100
|
expect(logger_1.logger.error).toHaveBeenCalledTimes(1);
|
|
@@ -2113,7 +2124,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2113
2124
|
preRenderId: 'test',
|
|
2114
2125
|
});
|
|
2115
2126
|
await libEmbed.syncPreRenderStyle();
|
|
2116
|
-
expect(logger_1.logger.error).
|
|
2127
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith('PreRender should be called before using syncPreRenderStyle');
|
|
2117
2128
|
logger_1.logger.error.mockClear();
|
|
2118
2129
|
});
|
|
2119
2130
|
});
|
|
@@ -2146,7 +2157,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2146
2157
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
2147
2158
|
});
|
|
2148
2159
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2149
|
-
expect(baseInstance.notifyAuthFailure).
|
|
2160
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.IDLE_SESSION_TIMEOUT);
|
|
2150
2161
|
expect(baseInstance.handleAuth).toHaveBeenCalled();
|
|
2151
2162
|
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
2152
2163
|
type: index_1.EmbedEvent.IdleSessionTimeout,
|
|
@@ -2172,14 +2183,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
2172
2183
|
const mockPort = {
|
|
2173
2184
|
postMessage: jest.fn(),
|
|
2174
2185
|
};
|
|
2175
|
-
const loggerSpy = jest.spyOn(logger_1.logger, 'error').
|
|
2186
|
+
const loggerSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
2176
2187
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2177
2188
|
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2178
2189
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
2179
2190
|
});
|
|
2180
2191
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2181
2192
|
expect((0, test_utils_1.getRootEl)().innerHTML).toContain('Not logged in');
|
|
2182
|
-
expect(baseInstance.notifyAuthFailure).
|
|
2193
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.IDLE_SESSION_TIMEOUT);
|
|
2183
2194
|
expect(loggerSpy).toHaveBeenCalledTimes(1);
|
|
2184
2195
|
});
|
|
2185
2196
|
jest.spyOn(authService, 'verifyTokenService').mockClear();
|
|
@@ -2204,13 +2215,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
2204
2215
|
const mockPort = {
|
|
2205
2216
|
postMessage: jest.fn(),
|
|
2206
2217
|
};
|
|
2207
|
-
const loggerSpy = jest.spyOn(logger_1.logger, 'error').
|
|
2218
|
+
const loggerSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
2208
2219
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2209
2220
|
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
2210
2221
|
(0, test_utils_1.postMessageToParent)(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
2211
2222
|
});
|
|
2212
2223
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2213
|
-
expect(baseInstance.notifyAuthFailure).
|
|
2224
|
+
expect(baseInstance.notifyAuthFailure).toHaveBeenCalledWith(authInstance.AuthFailureType.IDLE_SESSION_TIMEOUT);
|
|
2214
2225
|
expect(loggerSpy).toHaveBeenCalledTimes(0);
|
|
2215
2226
|
});
|
|
2216
2227
|
jest.spyOn(authService, 'verifyTokenService').mockClear();
|
|
@@ -2218,7 +2229,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2218
2229
|
});
|
|
2219
2230
|
});
|
|
2220
2231
|
describe('Renders should wait for init to completed', () => {
|
|
2221
|
-
const errorSpy = jest.spyOn(logger_1.logger, 'error').
|
|
2232
|
+
const errorSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
2222
2233
|
beforeEach(() => {
|
|
2223
2234
|
errorSpy.mockClear();
|
|
2224
2235
|
(0, utils_1.resetValueFromWindow)('initFlagKey');
|
|
@@ -2862,7 +2873,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2862
2873
|
});
|
|
2863
2874
|
test('should execute callbacks through executeEvent function', async () => {
|
|
2864
2875
|
let capturedExecuteEvent;
|
|
2865
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
2876
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
2866
2877
|
capturedExecuteEvent = params.executeEvent;
|
|
2867
2878
|
});
|
|
2868
2879
|
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
@@ -2895,7 +2906,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
2895
2906
|
});
|
|
2896
2907
|
test('should call triggerUIPassThrough through getUnsavedAnswerTml function', async () => {
|
|
2897
2908
|
let capturedGetUnsavedAnswerTml;
|
|
2898
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
2909
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
2899
2910
|
capturedGetUnsavedAnswerTml = params.getUnsavedAnswerTml;
|
|
2900
2911
|
});
|
|
2901
2912
|
const mockTmlResponse = { tml: 'test-tml-content' };
|
|
@@ -3045,7 +3056,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3045
3056
|
});
|
|
3046
3057
|
test('should pass eventPort to executeCallbacks', async () => {
|
|
3047
3058
|
let capturedExecuteEvent;
|
|
3048
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3059
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
3049
3060
|
capturedExecuteEvent = params.executeEvent;
|
|
3050
3061
|
});
|
|
3051
3062
|
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
@@ -3078,7 +3089,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3078
3089
|
});
|
|
3079
3090
|
test('should handle getUnsavedAnswerTml with empty response', async () => {
|
|
3080
3091
|
let capturedGetUnsavedAnswerTml;
|
|
3081
|
-
mockHandleInterceptEvent.mockImplementation((params) => {
|
|
3092
|
+
mockHandleInterceptEvent.mockImplementation(async (params) => {
|
|
3082
3093
|
capturedGetUnsavedAnswerTml = params.getUnsavedAnswerTml;
|
|
3083
3094
|
});
|
|
3084
3095
|
mockProcessTrigger.mockResolvedValue([]);
|
|
@@ -3136,4 +3147,257 @@ describe('Unit test case for ts embed', () => {
|
|
|
3136
3147
|
});
|
|
3137
3148
|
});
|
|
3138
3149
|
});
|
|
3150
|
+
describe('Additional Coverage Tests', () => {
|
|
3151
|
+
beforeAll(() => {
|
|
3152
|
+
(0, index_1.init)({
|
|
3153
|
+
thoughtSpotHost: 'tshost',
|
|
3154
|
+
authType: index_1.AuthType.None,
|
|
3155
|
+
});
|
|
3156
|
+
});
|
|
3157
|
+
test('should handle getAuthTokenForCookielessInit with non-cookieless auth', async () => {
|
|
3158
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3159
|
+
const token = await searchEmbed['getAuthTokenForCookielessInit']();
|
|
3160
|
+
expect(token).toBe('');
|
|
3161
|
+
});
|
|
3162
|
+
test('should call setIFrameHeight', async () => {
|
|
3163
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3164
|
+
await searchEmbed.render();
|
|
3165
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3166
|
+
searchEmbed['setIFrameHeight'](500);
|
|
3167
|
+
expect((0, test_utils_1.getIFrameEl)().style.height).toBe('500px');
|
|
3168
|
+
});
|
|
3169
|
+
});
|
|
3170
|
+
test('should test getIframeCenter calculation', async () => {
|
|
3171
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3172
|
+
await searchEmbed.render();
|
|
3173
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3174
|
+
const center = searchEmbed['getIframeCenter']();
|
|
3175
|
+
expect(center).toHaveProperty('iframeCenter');
|
|
3176
|
+
expect(center).toHaveProperty('iframeHeight');
|
|
3177
|
+
expect(center).toHaveProperty('viewPortHeight');
|
|
3178
|
+
});
|
|
3179
|
+
});
|
|
3180
|
+
test('should handle preRender with replaceExistingPreRender=true', async () => {
|
|
3181
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
3182
|
+
const embed1 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3183
|
+
preRenderId: 'test-replace',
|
|
3184
|
+
liveboardId: 'lb1',
|
|
3185
|
+
});
|
|
3186
|
+
await embed1.preRender();
|
|
3187
|
+
const embed2 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3188
|
+
preRenderId: 'test-replace',
|
|
3189
|
+
liveboardId: 'lb2',
|
|
3190
|
+
});
|
|
3191
|
+
await embed2.preRender(false, true);
|
|
3192
|
+
expect(document.getElementById('tsEmbed-pre-render-wrapper-test-replace')).toBeTruthy();
|
|
3193
|
+
});
|
|
3194
|
+
test('should test getIframeSrc base implementation', () => {
|
|
3195
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3196
|
+
expect(searchEmbed.getIframeSrc()).toBe('');
|
|
3197
|
+
});
|
|
3198
|
+
test('should handle createEmbedEventResponder with OnBeforeGetVizDataIntercept', async () => {
|
|
3199
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3200
|
+
const mockPort = { postMessage: jest.fn() };
|
|
3201
|
+
const responder = searchEmbed['createEmbedEventResponder'](mockPort, index_1.EmbedEvent.OnBeforeGetVizDataIntercept);
|
|
3202
|
+
responder({ data: 'test' });
|
|
3203
|
+
expect(mockPort.postMessage).toHaveBeenCalled();
|
|
3204
|
+
});
|
|
3205
|
+
test('should clean up message event listeners', async () => {
|
|
3206
|
+
const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener');
|
|
3207
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3208
|
+
await searchEmbed.render();
|
|
3209
|
+
searchEmbed['unsubscribeToMessageEvents']();
|
|
3210
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('message', expect.any(Function));
|
|
3211
|
+
});
|
|
3212
|
+
});
|
|
3213
|
+
describe('Trigger method edge cases', () => {
|
|
3214
|
+
beforeAll(() => {
|
|
3215
|
+
(0, index_1.init)({
|
|
3216
|
+
thoughtSpotHost: 'tshost',
|
|
3217
|
+
authType: index_1.AuthType.None,
|
|
3218
|
+
});
|
|
3219
|
+
});
|
|
3220
|
+
beforeEach(() => {
|
|
3221
|
+
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
3222
|
+
});
|
|
3223
|
+
test('should handle error when trigger is called with undefined messageType', async () => {
|
|
3224
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3225
|
+
jest.spyOn(logger_1.logger, 'error');
|
|
3226
|
+
await searchEmbed.render();
|
|
3227
|
+
await (0, test_utils_1.executeAfterWait)(async () => {
|
|
3228
|
+
const result = await searchEmbed.trigger(undefined);
|
|
3229
|
+
expect(result).toBeNull();
|
|
3230
|
+
expect(logger_1.logger.error).toHaveBeenCalledWith(expect.objectContaining({
|
|
3231
|
+
errorType: types_1.ErrorDetailsTypes.VALIDATION_ERROR,
|
|
3232
|
+
code: types_1.EmbedErrorCodes.HOST_EVENT_TYPE_UNDEFINED,
|
|
3233
|
+
}));
|
|
3234
|
+
});
|
|
3235
|
+
});
|
|
3236
|
+
test('should return null when trigger is called before iframe is ready', async () => {
|
|
3237
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockRejectedValueOnce(new Error('Auth failed'));
|
|
3238
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3239
|
+
jest.spyOn(logger_1.logger, 'debug');
|
|
3240
|
+
await searchEmbed.render();
|
|
3241
|
+
await (0, test_utils_1.executeAfterWait)(async () => {
|
|
3242
|
+
const result = await searchEmbed.trigger(types_1.HostEvent.Reload);
|
|
3243
|
+
expect(result).toBeNull();
|
|
3244
|
+
});
|
|
3245
|
+
});
|
|
3246
|
+
});
|
|
3247
|
+
describe('PreRender replaceExistingPreRender scenarios', () => {
|
|
3248
|
+
beforeAll(() => {
|
|
3249
|
+
(0, index_1.init)({
|
|
3250
|
+
thoughtSpotHost: 'tshost',
|
|
3251
|
+
authType: index_1.AuthType.None,
|
|
3252
|
+
});
|
|
3253
|
+
});
|
|
3254
|
+
afterEach(() => {
|
|
3255
|
+
const rootEle = document.getElementById('myRoot');
|
|
3256
|
+
rootEle === null || rootEle === void 0 ? void 0 : rootEle.remove();
|
|
3257
|
+
});
|
|
3258
|
+
test('should skip re-rendering when preRender already exists and replaceExistingPreRender is false', async () => {
|
|
3259
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
3260
|
+
const embed1 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3261
|
+
preRenderId: 'no-replace-test',
|
|
3262
|
+
liveboardId: 'lb1',
|
|
3263
|
+
});
|
|
3264
|
+
await embed1.preRender();
|
|
3265
|
+
await (0, test_utils_1.waitFor)(() => !!(0, test_utils_1.getIFrameEl)());
|
|
3266
|
+
const embed2 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3267
|
+
preRenderId: 'no-replace-test',
|
|
3268
|
+
liveboardId: 'lb2',
|
|
3269
|
+
});
|
|
3270
|
+
const result = await embed2.preRender(false, false);
|
|
3271
|
+
expect(result).toBe(embed2);
|
|
3272
|
+
// The original iframe should still have lb1
|
|
3273
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3274
|
+
expect(iframe.src).toContain('lb1');
|
|
3275
|
+
});
|
|
3276
|
+
});
|
|
3277
|
+
describe('Destroy error handling', () => {
|
|
3278
|
+
beforeAll(() => {
|
|
3279
|
+
(0, index_1.init)({
|
|
3280
|
+
thoughtSpotHost: 'tshost',
|
|
3281
|
+
authType: index_1.AuthType.None,
|
|
3282
|
+
});
|
|
3283
|
+
});
|
|
3284
|
+
beforeEach(() => {
|
|
3285
|
+
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
3286
|
+
});
|
|
3287
|
+
test('should handle error gracefully when destroy fails', async () => {
|
|
3288
|
+
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
3289
|
+
frameParams: { width: '100%', height: '100%' },
|
|
3290
|
+
});
|
|
3291
|
+
await appEmbed.render();
|
|
3292
|
+
const logSpy = jest.spyOn(logger_1.logger, 'log').mockImplementation(() => { });
|
|
3293
|
+
jest.spyOn(Node.prototype, 'removeChild').mockImplementationOnce(() => {
|
|
3294
|
+
throw new Error('Remove failed');
|
|
3295
|
+
});
|
|
3296
|
+
expect(() => {
|
|
3297
|
+
appEmbed.destroy();
|
|
3298
|
+
}).not.toThrow();
|
|
3299
|
+
expect(logSpy).toHaveBeenCalledWith('Error destroying TS Embed', expect.any(Error));
|
|
3300
|
+
logSpy.mockRestore();
|
|
3301
|
+
});
|
|
3302
|
+
});
|
|
3303
|
+
describe('Fullscreen change handler behavior', () => {
|
|
3304
|
+
beforeAll(() => {
|
|
3305
|
+
(0, index_1.init)({
|
|
3306
|
+
thoughtSpotHost: 'tshost',
|
|
3307
|
+
authType: index_1.AuthType.None,
|
|
3308
|
+
disableFullscreenPresentation: false,
|
|
3309
|
+
});
|
|
3310
|
+
});
|
|
3311
|
+
beforeEach(() => {
|
|
3312
|
+
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
3313
|
+
});
|
|
3314
|
+
test('should trigger ExitPresentMode when exiting fullscreen', async () => {
|
|
3315
|
+
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
3316
|
+
...defaultViewConfig,
|
|
3317
|
+
liveboardId: 'test-lb',
|
|
3318
|
+
});
|
|
3319
|
+
await liveboardEmbed.render();
|
|
3320
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3321
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3322
|
+
expect(iframe).toBeTruthy();
|
|
3323
|
+
});
|
|
3324
|
+
mockProcessTrigger.mockResolvedValue({});
|
|
3325
|
+
liveboardEmbed['setupFullscreenChangeHandler']();
|
|
3326
|
+
Object.defineProperty(document, 'fullscreenElement', {
|
|
3327
|
+
value: null,
|
|
3328
|
+
writable: true,
|
|
3329
|
+
configurable: true,
|
|
3330
|
+
});
|
|
3331
|
+
const event = new Event('fullscreenchange');
|
|
3332
|
+
document.dispatchEvent(event);
|
|
3333
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3334
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(expect.any(Object), types_1.HostEvent.ExitPresentMode, expect.any(String), expect.any(Object));
|
|
3335
|
+
});
|
|
3336
|
+
});
|
|
3337
|
+
test('should not trigger ExitPresentMode when entering fullscreen', async () => {
|
|
3338
|
+
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
3339
|
+
...defaultViewConfig,
|
|
3340
|
+
liveboardId: 'test-lb-fullscreen',
|
|
3341
|
+
});
|
|
3342
|
+
await liveboardEmbed.render();
|
|
3343
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3344
|
+
const iframe = (0, test_utils_1.getIFrameEl)();
|
|
3345
|
+
expect(iframe).toBeTruthy();
|
|
3346
|
+
});
|
|
3347
|
+
mockProcessTrigger.mockClear();
|
|
3348
|
+
mockProcessTrigger.mockResolvedValue({});
|
|
3349
|
+
liveboardEmbed['setupFullscreenChangeHandler']();
|
|
3350
|
+
Object.defineProperty(document, 'fullscreenElement', {
|
|
3351
|
+
value: (0, test_utils_1.getIFrameEl)(),
|
|
3352
|
+
writable: true,
|
|
3353
|
+
configurable: true,
|
|
3354
|
+
});
|
|
3355
|
+
const event = new Event('fullscreenchange');
|
|
3356
|
+
document.dispatchEvent(event);
|
|
3357
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3358
|
+
expect(mockProcessTrigger).not.toHaveBeenCalledWith(expect.any(Object), types_1.HostEvent.ExitPresentMode, expect.any(String), expect.any(Object));
|
|
3359
|
+
});
|
|
3360
|
+
});
|
|
3361
|
+
});
|
|
3362
|
+
describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
3363
|
+
beforeAll(() => {
|
|
3364
|
+
(0, index_1.init)({
|
|
3365
|
+
thoughtSpotHost: 'tshost',
|
|
3366
|
+
authType: index_1.AuthType.None,
|
|
3367
|
+
});
|
|
3368
|
+
});
|
|
3369
|
+
afterEach(() => {
|
|
3370
|
+
const rootEle = document.getElementById('myRoot');
|
|
3371
|
+
rootEle === null || rootEle === void 0 ? void 0 : rootEle.remove();
|
|
3372
|
+
});
|
|
3373
|
+
test('should trigger UpdateEmbedParams when showPreRender connects to existing prerendered component', async () => {
|
|
3374
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
3375
|
+
(0, test_utils_1.mockMessageChannel)();
|
|
3376
|
+
window.ResizeObserver = window.ResizeObserver
|
|
3377
|
+
|| jest.fn().mockImplementation(() => ({
|
|
3378
|
+
disconnect: jest.fn(),
|
|
3379
|
+
observe: jest.fn(),
|
|
3380
|
+
unobserve: jest.fn(),
|
|
3381
|
+
}));
|
|
3382
|
+
const embed1 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3383
|
+
preRenderId: 'update-params-test',
|
|
3384
|
+
liveboardId: 'original-lb',
|
|
3385
|
+
});
|
|
3386
|
+
await embed1.preRender();
|
|
3387
|
+
await (0, test_utils_1.waitFor)(() => !!(0, test_utils_1.getIFrameEl)());
|
|
3388
|
+
embed1.isEmbedContainerLoaded = true;
|
|
3389
|
+
mockProcessTrigger.mockClear();
|
|
3390
|
+
mockProcessTrigger.mockResolvedValue({});
|
|
3391
|
+
const embed2 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3392
|
+
preRenderId: 'update-params-test',
|
|
3393
|
+
liveboardId: 'updated-lb',
|
|
3394
|
+
});
|
|
3395
|
+
embed2.showPreRender();
|
|
3396
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
3397
|
+
expect(mockProcessTrigger).toHaveBeenCalledWith(expect.any(Object), types_1.HostEvent.UpdateEmbedParams, expect.any(String), expect.objectContaining({
|
|
3398
|
+
liveboardId: 'updated-lb',
|
|
3399
|
+
}));
|
|
3400
|
+
});
|
|
3401
|
+
});
|
|
3402
|
+
});
|
|
3139
3403
|
//# sourceMappingURL=ts-embed.spec.js.map
|