@thoughtspot/visual-embed-sdk 1.48.0 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +1 -1
- package/cjs/src/css-variables.d.ts +140 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +62 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +57 -6
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +191 -1
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.js +7 -2
- package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.spec.js +385 -6
- package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/cjs/src/embed/base.d.ts +1 -0
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js +13 -1
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/base.spec.js +21 -0
- package/cjs/src/embed/base.spec.js.map +1 -1
- package/cjs/src/embed/bodyless-conversation.spec.js +86 -0
- package/cjs/src/embed/bodyless-conversation.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +16 -1
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +5 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +26 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +47 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +47 -6
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +129 -1
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.d.ts +85 -0
- package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -0
- package/cjs/src/embed/spotter-viz-utils.js +17 -0
- package/cjs/src/embed/spotter-viz-utils.js.map +1 -0
- package/cjs/src/embed/spotter-viz-utils.spec.d.ts +2 -0
- package/cjs/src/embed/spotter-viz-utils.spec.d.ts.map +1 -0
- package/cjs/src/embed/spotter-viz-utils.spec.js +31 -0
- package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -0
- package/cjs/src/embed/ts-embed.d.ts +58 -38
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +245 -149
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +369 -123
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -1
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/index.d.ts.map +1 -1
- package/cjs/src/react/index.js +3 -0
- package/cjs/src/react/index.js.map +1 -1
- package/cjs/src/types.d.ts +267 -27
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +223 -19
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/authService/tokenizedAuthService.spec.js +6 -7
- package/cjs/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
- package/cjs/src/utils/logger.js +2 -1
- package/cjs/src/utils/logger.js.map +1 -1
- package/cjs/src/utils/logger.spec.d.ts +1 -0
- package/cjs/src/utils/logger.spec.d.ts.map +1 -1
- package/cjs/src/utils/logger.spec.js +10 -9
- package/cjs/src/utils/logger.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +4 -1
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +107 -10
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +163 -4
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-Ck-r09gt.js → index-_UGCSSDR.js} +1 -1
- package/dist/src/css-variables.d.ts +140 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +62 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/base.d.ts +1 -0
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +16 -1
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +47 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-viz-utils.d.ts +85 -0
- package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -0
- package/dist/src/embed/spotter-viz-utils.spec.d.ts +2 -0
- package/dist/src/embed/spotter-viz-utils.spec.d.ts.map +1 -0
- package/dist/src/embed/ts-embed.d.ts +58 -38
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +267 -27
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/logger.spec.d.ts +1 -0
- package/dist/src/utils/logger.spec.d.ts.map +1 -1
- package/dist/src/utils.d.ts +4 -1
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +3708 -3226
- package/dist/tsembed-react.js +3358 -2876
- package/dist/tsembed.es.js +3713 -3229
- package/dist/tsembed.js +3708 -3224
- package/dist/visual-embed-sdk-react-full.d.ts +643 -63
- package/dist/visual-embed-sdk-react.d.ts +643 -63
- package/dist/visual-embed-sdk.d.ts +658 -65
- package/lib/package.json +1 -1
- package/lib/src/css-variables.d.ts +140 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +62 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +58 -7
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +192 -2
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.js +7 -2
- package/lib/src/embed/auto-frame-renderer.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.spec.js +387 -8
- package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/lib/src/embed/base.d.ts +1 -0
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js +11 -0
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/base.spec.js +22 -1
- package/lib/src/embed/base.spec.js.map +1 -1
- package/lib/src/embed/bodyless-conversation.spec.js +86 -0
- package/lib/src/embed/bodyless-conversation.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +16 -1
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +5 -1
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +27 -1
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +47 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +48 -7
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +129 -1
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.d.ts +85 -0
- package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -0
- package/lib/src/embed/spotter-viz-utils.js +13 -0
- package/lib/src/embed/spotter-viz-utils.js.map +1 -0
- package/lib/src/embed/spotter-viz-utils.spec.d.ts +2 -0
- package/lib/src/embed/spotter-viz-utils.spec.d.ts.map +1 -0
- package/lib/src/embed/spotter-viz-utils.spec.js +29 -0
- package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -0
- package/lib/src/embed/ts-embed.d.ts +58 -38
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +248 -152
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +369 -123
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -1
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/index.d.ts.map +1 -1
- package/lib/src/react/index.js +3 -0
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/types.d.ts +267 -27
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +223 -19
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/authService/tokenizedAuthService.spec.js +6 -7
- package/lib/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
- package/lib/src/utils/logger.js +2 -1
- package/lib/src/utils/logger.js.map +1 -1
- package/lib/src/utils/logger.spec.d.ts +1 -0
- package/lib/src/utils/logger.spec.d.ts.map +1 -1
- package/lib/src/utils/logger.spec.js +10 -9
- package/lib/src/utils/logger.spec.js.map +1 -1
- package/lib/src/utils.d.ts +4 -1
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +103 -9
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +164 -5
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +658 -65
- package/package.json +1 -1
- package/src/css-variables.ts +175 -1
- package/src/embed/app.spec.ts +247 -3
- package/src/embed/app.ts +125 -5
- package/src/embed/auto-frame-renderer.spec.ts +457 -58
- package/src/embed/auto-frame-renderer.ts +7 -2
- package/src/embed/base.spec.ts +25 -1
- package/src/embed/base.ts +19 -5
- package/src/embed/bodyless-conversation.spec.ts +93 -0
- package/src/embed/conversation.spec.ts +34 -0
- package/src/embed/conversation.ts +22 -1
- package/src/embed/liveboard.spec.ts +149 -1
- package/src/embed/liveboard.ts +102 -6
- package/src/embed/spotter-viz-utils.spec.ts +30 -0
- package/src/embed/spotter-viz-utils.ts +94 -0
- package/src/embed/ts-embed.spec.ts +532 -234
- package/src/embed/ts-embed.ts +383 -257
- package/src/index.ts +3 -0
- package/src/react/index.tsx +3 -0
- package/src/types.ts +284 -23
- package/src/utils/authService/tokenizedAuthService.spec.ts +6 -6
- package/src/utils/logger.spec.ts +11 -9
- package/src/utils/logger.ts +2 -2
- package/src/utils.spec.ts +200 -4
- package/src/utils.ts +128 -9
|
@@ -85,7 +85,7 @@ const getMockAppInitPayload = (data) => {
|
|
|
85
85
|
interceptUrls: [],
|
|
86
86
|
shouldBypassPayloadValidation: undefined,
|
|
87
87
|
useHostEventsV2: undefined,
|
|
88
|
-
embedExpiryInAuthToken: true
|
|
88
|
+
embedExpiryInAuthToken: true,
|
|
89
89
|
};
|
|
90
90
|
return {
|
|
91
91
|
type: index_1.EmbedEvent.APP_INIT,
|
|
@@ -374,7 +374,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
374
374
|
});
|
|
375
375
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
376
376
|
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
377
|
-
reorderedHomepageModules: [
|
|
377
|
+
reorderedHomepageModules: [
|
|
378
|
+
types_1.HomepageModule.MyLibrary,
|
|
379
|
+
types_1.HomepageModule.Watchlist,
|
|
380
|
+
],
|
|
378
381
|
}));
|
|
379
382
|
});
|
|
380
383
|
});
|
|
@@ -520,7 +523,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
520
523
|
});
|
|
521
524
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
522
525
|
expect(mockPort.postMessage).toHaveBeenCalledWith(getMockAppInitPayload({
|
|
523
|
-
hiddenHomeLeftNavItems: [
|
|
526
|
+
hiddenHomeLeftNavItems: [
|
|
527
|
+
types_1.HomeLeftNavItem.Home,
|
|
528
|
+
types_1.HomeLeftNavItem.MonitorSubscription,
|
|
529
|
+
],
|
|
524
530
|
}));
|
|
525
531
|
});
|
|
526
532
|
});
|
|
@@ -748,10 +754,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
748
754
|
customVariablesForThirdPartyTools: {},
|
|
749
755
|
}));
|
|
750
756
|
const customisationContent = mockPort.postMessage.mock.calls[0][0].data.customisations.content;
|
|
751
|
-
expect(customisationContent.stringIDsUrl)
|
|
752
|
-
|
|
753
|
-
expect(customisationContent.stringIDs)
|
|
754
|
-
.toEqual({
|
|
757
|
+
expect(customisationContent.stringIDsUrl).toBe('https://sample-string-ids-url.com');
|
|
758
|
+
expect(customisationContent.stringIDs).toEqual({
|
|
755
759
|
'liveboard.header.title': 'Dashboard name',
|
|
756
760
|
});
|
|
757
761
|
});
|
|
@@ -761,7 +765,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
761
765
|
type: index_1.EmbedEvent.APP_INIT,
|
|
762
766
|
data: {},
|
|
763
767
|
};
|
|
764
|
-
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {
|
|
768
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {
|
|
769
|
+
...defaultViewConfig,
|
|
770
|
+
exposeTranslationIDs: true,
|
|
771
|
+
});
|
|
765
772
|
searchEmbed.render();
|
|
766
773
|
const mockPort = {
|
|
767
774
|
postMessage: jest.fn(),
|
|
@@ -802,16 +809,16 @@ describe('Unit test case for ts embed', () => {
|
|
|
802
809
|
name: 'Valid Action',
|
|
803
810
|
target: types_1.CustomActionTarget.LIVEBOARD,
|
|
804
811
|
position: types_1.CustomActionsPosition.PRIMARY,
|
|
805
|
-
metadataIds: { liveboardIds: ['lb123'] }
|
|
812
|
+
metadataIds: { liveboardIds: ['lb123'] },
|
|
806
813
|
},
|
|
807
814
|
{
|
|
808
815
|
id: 'action2',
|
|
809
816
|
name: 'Another Valid Action',
|
|
810
817
|
target: types_1.CustomActionTarget.VIZ,
|
|
811
818
|
position: types_1.CustomActionsPosition.MENU,
|
|
812
|
-
metadataIds: { vizIds: ['viz456'] }
|
|
813
|
-
}
|
|
814
|
-
]
|
|
819
|
+
metadataIds: { vizIds: ['viz456'] },
|
|
820
|
+
},
|
|
821
|
+
],
|
|
815
822
|
});
|
|
816
823
|
searchEmbed.render();
|
|
817
824
|
const mockPort = {
|
|
@@ -837,15 +844,15 @@ describe('Unit test case for ts embed', () => {
|
|
|
837
844
|
name: 'Another Valid Action',
|
|
838
845
|
target: types_1.CustomActionTarget.VIZ,
|
|
839
846
|
position: types_1.CustomActionsPosition.MENU,
|
|
840
|
-
metadataIds: { vizIds: ['viz456'] }
|
|
847
|
+
metadataIds: { vizIds: ['viz456'] },
|
|
841
848
|
},
|
|
842
849
|
{
|
|
843
850
|
id: 'action1',
|
|
844
851
|
name: 'Valid Action',
|
|
845
852
|
target: types_1.CustomActionTarget.LIVEBOARD,
|
|
846
853
|
position: types_1.CustomActionsPosition.PRIMARY,
|
|
847
|
-
metadataIds: { liveboardIds: ['lb123'] }
|
|
848
|
-
}
|
|
854
|
+
metadataIds: { liveboardIds: ['lb123'] },
|
|
855
|
+
},
|
|
849
856
|
],
|
|
850
857
|
customVariablesForThirdPartyTools: {},
|
|
851
858
|
}));
|
|
@@ -858,14 +865,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
858
865
|
id: 'action1',
|
|
859
866
|
name: 'Valid Action',
|
|
860
867
|
target: types_1.CustomActionTarget.LIVEBOARD,
|
|
861
|
-
position: types_1.CustomActionsPosition.PRIMARY
|
|
868
|
+
position: types_1.CustomActionsPosition.PRIMARY,
|
|
862
869
|
}),
|
|
863
870
|
expect.objectContaining({
|
|
864
871
|
id: 'action2',
|
|
865
872
|
name: 'Another Valid Action',
|
|
866
873
|
target: types_1.CustomActionTarget.VIZ,
|
|
867
|
-
position: types_1.CustomActionsPosition.MENU
|
|
868
|
-
})
|
|
874
|
+
position: types_1.CustomActionsPosition.MENU,
|
|
875
|
+
}),
|
|
869
876
|
]));
|
|
870
877
|
// Verify actions are sorted by name (alphabetically)
|
|
871
878
|
expect(appInitData.customActions[0].name).toBe('Another Valid Action');
|
|
@@ -919,7 +926,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
919
926
|
type: index_1.EmbedEvent.APP_INIT,
|
|
920
927
|
data: {},
|
|
921
928
|
};
|
|
922
|
-
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {
|
|
929
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {
|
|
930
|
+
...defaultViewConfig,
|
|
931
|
+
preRenderId: 'test',
|
|
932
|
+
});
|
|
923
933
|
searchEmbed.preRender();
|
|
924
934
|
const mockPort = {
|
|
925
935
|
postMessage: jest.fn(),
|
|
@@ -970,7 +980,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
970
980
|
type: index_1.EmbedEvent.AuthExpire,
|
|
971
981
|
data: {},
|
|
972
982
|
};
|
|
973
|
-
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {
|
|
983
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {
|
|
984
|
+
...defaultViewConfig,
|
|
985
|
+
preRenderId: 'test',
|
|
986
|
+
});
|
|
974
987
|
jest.spyOn(baseInstance, 'notifyAuthFailure');
|
|
975
988
|
searchEmbed.preRender();
|
|
976
989
|
const loggerSpy = jest.spyOn(logger_1.logger, 'error').mockImplementation(() => { });
|
|
@@ -1110,9 +1123,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
1110
1123
|
// resetCachedPreauthInfo();
|
|
1111
1124
|
let mockGetPreauthInfo = null;
|
|
1112
1125
|
if (overrideOrgId) {
|
|
1113
|
-
mockGetPreauthInfo = jest
|
|
1126
|
+
mockGetPreauthInfo = jest
|
|
1127
|
+
.spyOn(sessionInfoService, 'getPreauthInfo')
|
|
1128
|
+
.mockImplementation(jest.fn());
|
|
1114
1129
|
}
|
|
1115
|
-
const mockPreauthInfoFetch = jest
|
|
1130
|
+
const mockPreauthInfoFetch = jest
|
|
1131
|
+
.spyOn(authService, 'fetchPreauthInfoService')
|
|
1132
|
+
.mockResolvedValueOnce({
|
|
1116
1133
|
ok: true,
|
|
1117
1134
|
headers: new Headers({ 'content-type': 'application/json' }),
|
|
1118
1135
|
json: async () => ({
|
|
@@ -1147,14 +1164,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
1147
1164
|
};
|
|
1148
1165
|
};
|
|
1149
1166
|
test('should call InfoSuccess Event on preauth call success', async () => {
|
|
1150
|
-
const { mockPreauthInfoFetch, iFrame
|
|
1167
|
+
const { mockPreauthInfoFetch, iFrame } = await setup(true);
|
|
1151
1168
|
expect(mockPreauthInfoFetch).toHaveBeenCalledTimes(1);
|
|
1152
1169
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1153
1170
|
expect(mockProcessTrigger).toHaveBeenCalledWith(iFrame, types_1.HostEvent.InfoSuccess, 'http://tshost', expect.objectContaining({ info: expect.any(Object) }), undefined);
|
|
1154
1171
|
});
|
|
1155
1172
|
});
|
|
1156
1173
|
test('should not call InfoSuccess Event if overrideOrgId is true', async () => {
|
|
1157
|
-
const { mockGetPreauthInfo
|
|
1174
|
+
const { mockGetPreauthInfo } = await setup(true, 123);
|
|
1158
1175
|
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(0);
|
|
1159
1176
|
});
|
|
1160
1177
|
});
|
|
@@ -1187,14 +1204,17 @@ describe('Unit test case for ts embed', () => {
|
|
|
1187
1204
|
const isAppEmbedWithPrimaryNavbar = embedType === 'AppEmbed' && showPrimaryNavbar === true;
|
|
1188
1205
|
const shouldDisableCache = overrideOrgId || disablePreauthCache || isAppEmbedWithPrimaryNavbar;
|
|
1189
1206
|
if (shouldDisableCache) {
|
|
1190
|
-
mockGetPreauthInfo = jest
|
|
1207
|
+
mockGetPreauthInfo = jest
|
|
1208
|
+
.spyOn(sessionInfoService, 'getPreauthInfo')
|
|
1191
1209
|
.mockImplementation(jest.fn());
|
|
1192
1210
|
}
|
|
1193
1211
|
else {
|
|
1194
|
-
mockGetPreauthInfo = jest
|
|
1212
|
+
mockGetPreauthInfo = jest
|
|
1213
|
+
.spyOn(sessionInfoService, 'getPreauthInfo')
|
|
1195
1214
|
.mockResolvedValue({ info: { test: 'data' } });
|
|
1196
1215
|
}
|
|
1197
|
-
const mockPreauthInfoFetch = jest
|
|
1216
|
+
const mockPreauthInfoFetch = jest
|
|
1217
|
+
.spyOn(authService, 'fetchPreauthInfoService')
|
|
1198
1218
|
.mockResolvedValueOnce({
|
|
1199
1219
|
ok: true,
|
|
1200
1220
|
headers: new Headers({ 'content-type': 'application/json' }),
|
|
@@ -1666,8 +1686,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1666
1686
|
},
|
|
1667
1687
|
});
|
|
1668
1688
|
await appEmbed.render();
|
|
1669
|
-
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}`
|
|
1670
|
-
|
|
1689
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}` +
|
|
1690
|
+
`&foo=bar&baz=1&bool=true${defaultParamsPost}#/home`);
|
|
1671
1691
|
});
|
|
1672
1692
|
it('should set the additional flags correctly on the iframe src from init and view config', async () => {
|
|
1673
1693
|
(0, index_1.init)({
|
|
@@ -1691,8 +1711,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1691
1711
|
},
|
|
1692
1712
|
});
|
|
1693
1713
|
await appEmbed.render();
|
|
1694
|
-
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}`
|
|
1695
|
-
|
|
1714
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}` +
|
|
1715
|
+
`&foo=bar&foo2=bar2&foo3=false&baz=1&bool=true${defaultParamsPost}#/home`);
|
|
1696
1716
|
});
|
|
1697
1717
|
it('Sets the showAlerts param', async () => {
|
|
1698
1718
|
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1703,8 +1723,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1703
1723
|
showAlerts: true,
|
|
1704
1724
|
});
|
|
1705
1725
|
await appEmbed.render();
|
|
1706
|
-
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}`
|
|
1707
|
-
|
|
1726
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}` +
|
|
1727
|
+
`&showAlerts=true${defaultParamsPost}#/home`);
|
|
1708
1728
|
});
|
|
1709
1729
|
it('Sets the locale param', async () => {
|
|
1710
1730
|
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1715,8 +1735,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1715
1735
|
locale: 'ja-JP',
|
|
1716
1736
|
});
|
|
1717
1737
|
await appEmbed.render();
|
|
1718
|
-
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}`
|
|
1719
|
-
|
|
1738
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}` +
|
|
1739
|
+
`&locale=ja-JP${defaultParamsPost}#/home`);
|
|
1720
1740
|
});
|
|
1721
1741
|
it('Sets both params when enableLinkOverridesV2 is set', async () => {
|
|
1722
1742
|
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1730,7 +1750,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
1730
1750
|
await liveboardEmbed.render();
|
|
1731
1751
|
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&${test_utils_1.defaultParamsForPinboardEmbed}&enableLinkOverridesV2=true&linkOverride=true${defaultParamsPost}#/embed/viz/test-lb`);
|
|
1732
1752
|
});
|
|
1733
|
-
it('
|
|
1753
|
+
it('Auto-upgrades V1 linkOverride to V2 (sends both flags)', async () => {
|
|
1734
1754
|
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1735
1755
|
frameParams: {
|
|
1736
1756
|
width: '100%',
|
|
@@ -1740,7 +1760,40 @@ describe('Unit test case for ts embed', () => {
|
|
|
1740
1760
|
linkOverride: true,
|
|
1741
1761
|
});
|
|
1742
1762
|
await liveboardEmbed.render();
|
|
1743
|
-
|
|
1763
|
+
const src = (0, test_utils_1.getIFrameSrc)();
|
|
1764
|
+
expect(src).toContain('linkOverride=true');
|
|
1765
|
+
expect(src).toContain('enableLinkOverridesV2=true');
|
|
1766
|
+
});
|
|
1767
|
+
it('Auto-disables V2 link overrides when disableRedirectionLinksInNewTab is true', async () => {
|
|
1768
|
+
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1769
|
+
frameParams: {
|
|
1770
|
+
width: '100%',
|
|
1771
|
+
height: '100%',
|
|
1772
|
+
},
|
|
1773
|
+
liveboardId: 'test-lb',
|
|
1774
|
+
enableLinkOverridesV2: true,
|
|
1775
|
+
disableRedirectionLinksInNewTab: true,
|
|
1776
|
+
});
|
|
1777
|
+
await liveboardEmbed.render();
|
|
1778
|
+
const src = (0, test_utils_1.getIFrameSrc)();
|
|
1779
|
+
expect(src).not.toContain('enableLinkOverridesV2=true');
|
|
1780
|
+
expect(src).not.toContain('linkOverride=true');
|
|
1781
|
+
expect(src).toContain('disableRedirectionLinksInNewTab=true');
|
|
1782
|
+
});
|
|
1783
|
+
it('Auto-disables V1 link override when disableRedirectionLinksInNewTab is true', async () => {
|
|
1784
|
+
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1785
|
+
frameParams: {
|
|
1786
|
+
width: '100%',
|
|
1787
|
+
height: '100%',
|
|
1788
|
+
},
|
|
1789
|
+
liveboardId: 'test-lb',
|
|
1790
|
+
linkOverride: true,
|
|
1791
|
+
disableRedirectionLinksInNewTab: true,
|
|
1792
|
+
});
|
|
1793
|
+
await liveboardEmbed.render();
|
|
1794
|
+
const src = (0, test_utils_1.getIFrameSrc)();
|
|
1795
|
+
expect(src).not.toContain('linkOverride=true');
|
|
1796
|
+
expect(src).toContain('disableRedirectionLinksInNewTab=true');
|
|
1744
1797
|
});
|
|
1745
1798
|
it('Sets the iconSprite url', async () => {
|
|
1746
1799
|
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1753,8 +1806,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
1753
1806
|
},
|
|
1754
1807
|
});
|
|
1755
1808
|
await appEmbed.render();
|
|
1756
|
-
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}`
|
|
1757
|
-
|
|
1809
|
+
(0, test_utils_1.expectUrlMatchesWithParams)((0, test_utils_1.getIFrameSrc)(), `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&${test_utils_1.defaultParamsForPinboardEmbed}` +
|
|
1810
|
+
`&iconSprite=iconSprite.com${defaultParamsPost}#/home`);
|
|
1758
1811
|
});
|
|
1759
1812
|
it('inserts as sibling of root node if configured', async () => {
|
|
1760
1813
|
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
@@ -1987,22 +2040,26 @@ describe('Unit test case for ts embed', () => {
|
|
|
1987
2040
|
tsEmbedDiv.style.width = '100px';
|
|
1988
2041
|
tsEmbedDiv.style.height = '100px';
|
|
1989
2042
|
let resizeObserverCb;
|
|
1990
|
-
window.ResizeObserver =
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
2043
|
+
window.ResizeObserver =
|
|
2044
|
+
window.ResizeObserver ||
|
|
2045
|
+
jest.fn().mockImplementation((resizeObserverCbParam) => {
|
|
2046
|
+
resizeObserverCb = resizeObserverCbParam;
|
|
2047
|
+
return {
|
|
2048
|
+
disconnect: jest.fn(),
|
|
2049
|
+
observe: jest.fn(),
|
|
2050
|
+
unobserve: jest.fn(),
|
|
2051
|
+
};
|
|
2052
|
+
});
|
|
1999
2053
|
// show preRender
|
|
2000
2054
|
const warnSpy = jest.spyOn(logger_1.logger, 'warn');
|
|
2001
2055
|
libEmbed.showPreRender();
|
|
2002
2056
|
expect(warnSpy).toHaveBeenCalledTimes(1);
|
|
2057
|
+
// The ResizeObserver now tracks the placeholder inside this.el,
|
|
2058
|
+
// not this.el itself, so pass it as the target.
|
|
2059
|
+
const preRenderPlaceholder = tsEmbedDiv.firstElementChild;
|
|
2003
2060
|
resizeObserverCb([
|
|
2004
2061
|
{
|
|
2005
|
-
target:
|
|
2062
|
+
target: preRenderPlaceholder,
|
|
2006
2063
|
contentRect: { height: 297, width: 987 },
|
|
2007
2064
|
},
|
|
2008
2065
|
]);
|
|
@@ -2053,12 +2110,13 @@ describe('Unit test case for ts embed', () => {
|
|
|
2053
2110
|
});
|
|
2054
2111
|
it('should set overflow:hidden when hidePreRender and remove when showPreRender', async () => {
|
|
2055
2112
|
(0, test_utils_1.createRootEleForEmbed)();
|
|
2056
|
-
window.ResizeObserver =
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2113
|
+
window.ResizeObserver =
|
|
2114
|
+
window.ResizeObserver ||
|
|
2115
|
+
jest.fn().mockImplementation(() => ({
|
|
2116
|
+
disconnect: jest.fn(),
|
|
2117
|
+
observe: jest.fn(),
|
|
2118
|
+
unobserve: jest.fn(),
|
|
2119
|
+
}));
|
|
2062
2120
|
const libEmbed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
2063
2121
|
preRenderId: 'overflow-test',
|
|
2064
2122
|
liveboardId: 'myLiveboardId',
|
|
@@ -2084,27 +2142,28 @@ describe('Unit test case for ts embed', () => {
|
|
|
2084
2142
|
it('it should connect with another object', async () => {
|
|
2085
2143
|
(0, test_utils_1.createRootEleForEmbed)();
|
|
2086
2144
|
(0, test_utils_1.mockMessageChannel)();
|
|
2087
|
-
window.ResizeObserver =
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2145
|
+
window.ResizeObserver =
|
|
2146
|
+
window.ResizeObserver ||
|
|
2147
|
+
jest.fn().mockImplementation(() => ({
|
|
2148
|
+
disconnect: jest.fn(),
|
|
2149
|
+
observe: jest.fn(),
|
|
2150
|
+
unobserve: jest.fn(),
|
|
2151
|
+
}));
|
|
2093
2152
|
const libEmbed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
2094
2153
|
preRenderId: 'i-am-preRendered',
|
|
2095
2154
|
liveboardId: 'myLiveboardId',
|
|
2096
2155
|
});
|
|
2097
2156
|
libEmbed.preRender();
|
|
2098
2157
|
await (0, test_utils_1.waitFor)(() => !!(0, test_utils_1.getIFrameEl)());
|
|
2099
|
-
const warnSpy = jest.spyOn(logger_1.logger, 'warn');
|
|
2100
2158
|
const newEmbed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
2101
2159
|
preRenderId: 'i-am-preRendered',
|
|
2102
2160
|
liveboardId: 'awdawda',
|
|
2103
2161
|
hiddenActions: [types_1.Action.AddFilter],
|
|
2104
2162
|
frameParams: { height: 90 },
|
|
2105
2163
|
});
|
|
2106
|
-
newEmbed.showPreRender();
|
|
2107
|
-
|
|
2164
|
+
await newEmbed.showPreRender();
|
|
2165
|
+
// Verify newEmbed successfully connected to the existing preRender
|
|
2166
|
+
expect(newEmbed.isPreRenderConnected()).toBe(true);
|
|
2108
2167
|
});
|
|
2109
2168
|
it('showPreRender should not preRender if not available', async () => {
|
|
2110
2169
|
(0, test_utils_1.createRootEleForEmbed)();
|
|
@@ -2255,7 +2314,10 @@ describe('Unit test case for ts embed', () => {
|
|
|
2255
2314
|
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
2256
2315
|
});
|
|
2257
2316
|
test('Pre-render should wait for init to complete', async () => {
|
|
2258
|
-
const lib = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
2317
|
+
const lib = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
2318
|
+
preRenderId: 'test',
|
|
2319
|
+
liveboardId: 'test',
|
|
2320
|
+
});
|
|
2259
2321
|
lib.preRender();
|
|
2260
2322
|
await (0, test_utils_1.executeAfterWait)(() => {
|
|
2261
2323
|
expect(errorSpy).toHaveBeenCalledWith(errors_1.ERROR_MESSAGE.RENDER_CALLED_BEFORE_INIT);
|
|
@@ -2485,7 +2547,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
2485
2547
|
expect(authToken.getAuthenticationToken).toHaveBeenCalledWith(expect.any(Object), true);
|
|
2486
2548
|
// Check that logger.error was called with the token refresh
|
|
2487
2549
|
// error
|
|
2488
|
-
const errorCalls = logger_1.logger.error.mock.calls.filter((call) => {
|
|
2550
|
+
const errorCalls = logger_1.logger.error.mock.calls.filter((call) => {
|
|
2551
|
+
var _a, _b;
|
|
2552
|
+
return ((_a = call[0]) === null || _a === void 0 ? void 0 : _a.includes(errors_1.ERROR_MESSAGE.INVALID_TOKEN_ERROR)) &&
|
|
2553
|
+
((_b = call[0]) === null || _b === void 0 ? void 0 : _b.includes('Token fetch failed'));
|
|
2554
|
+
});
|
|
2489
2555
|
expect(errorCalls.length).toBeGreaterThan(0);
|
|
2490
2556
|
expect(processData.processAuthFailure).toHaveBeenCalledWith(error, expect.any(Element));
|
|
2491
2557
|
expect(mockPort.postMessage).not.toHaveBeenCalled();
|
|
@@ -2647,8 +2713,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
2647
2713
|
test('should return getPreRenderObj and log if same object', () => {
|
|
2648
2714
|
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2649
2715
|
const loggerSpy = jest.spyOn(logger_1.logger, 'info');
|
|
2650
|
-
//
|
|
2651
|
-
searchEmbed.
|
|
2716
|
+
// getPreRenderObj reads the embed reference from preRenderWrapper
|
|
2717
|
+
searchEmbed.preRenderWrapper = {
|
|
2652
2718
|
[searchEmbed['embedNodeKey']]: searchEmbed,
|
|
2653
2719
|
};
|
|
2654
2720
|
const result = searchEmbed['getPreRenderObj']();
|
|
@@ -2697,7 +2763,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
2697
2763
|
test('should return context when embed container is already loaded', async () => {
|
|
2698
2764
|
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2699
2765
|
searchEmbed.isEmbedContainerLoaded = true;
|
|
2700
|
-
const triggerSpy = jest
|
|
2766
|
+
const triggerSpy = jest
|
|
2767
|
+
.spyOn(searchEmbed, 'trigger')
|
|
2701
2768
|
.mockResolvedValue(mockContext);
|
|
2702
2769
|
const context = await searchEmbed.getCurrentContext();
|
|
2703
2770
|
expect(context).toEqual(mockContext);
|
|
@@ -2706,7 +2773,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
2706
2773
|
test('should wait for embed container to load before returning context', async () => {
|
|
2707
2774
|
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
2708
2775
|
searchEmbed.isEmbedContainerLoaded = false;
|
|
2709
|
-
const triggerSpy = jest
|
|
2776
|
+
const triggerSpy = jest
|
|
2777
|
+
.spyOn(searchEmbed, 'trigger')
|
|
2710
2778
|
.mockResolvedValue(mockContext);
|
|
2711
2779
|
const contextPromise = searchEmbed.getCurrentContext();
|
|
2712
2780
|
// Context should not be resolved yet
|
|
@@ -2892,9 +2960,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
2892
2960
|
});
|
|
2893
2961
|
await appEmbed.render();
|
|
2894
2962
|
jest.spyOn(appEmbed, 'trigger').mockRejectedValue(new Error('trigger failed'));
|
|
2895
|
-
const removeChildSpy = jest
|
|
2963
|
+
const removeChildSpy = jest
|
|
2964
|
+
.spyOn(Node.prototype, 'removeChild')
|
|
2965
|
+
.mockImplementation(() => (0, test_utils_1.getRootEl)());
|
|
2896
2966
|
appEmbed.destroy();
|
|
2897
|
-
await new Promise(resolve => setTimeout(resolve, 50));
|
|
2967
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
2898
2968
|
expect(removeChildSpy).toHaveBeenCalled();
|
|
2899
2969
|
embedConfig.setEmbedConfig(originalEmbedConfig);
|
|
2900
2970
|
});
|
|
@@ -2919,7 +2989,9 @@ describe('Unit test case for ts embed', () => {
|
|
|
2919
2989
|
});
|
|
2920
2990
|
await appEmbed.render();
|
|
2921
2991
|
const triggerSpy = jest.spyOn(appEmbed, 'trigger').mockResolvedValue(null);
|
|
2922
|
-
const removeChildSpy = jest
|
|
2992
|
+
const removeChildSpy = jest
|
|
2993
|
+
.spyOn(Node.prototype, 'removeChild')
|
|
2994
|
+
.mockImplementation(() => (0, test_utils_1.getRootEl)());
|
|
2923
2995
|
appEmbed.destroy();
|
|
2924
2996
|
expect(triggerSpy).toHaveBeenCalledWith(types_1.HostEvent.DestroyEmbed);
|
|
2925
2997
|
expect(removeChildSpy).toHaveBeenCalled();
|
|
@@ -2938,12 +3010,14 @@ describe('Unit test case for ts embed', () => {
|
|
|
2938
3010
|
});
|
|
2939
3011
|
await appEmbed.render();
|
|
2940
3012
|
const triggerSpy = jest.spyOn(appEmbed, 'trigger').mockResolvedValue(null);
|
|
2941
|
-
const removeChildSpy = jest
|
|
3013
|
+
const removeChildSpy = jest
|
|
3014
|
+
.spyOn(Node.prototype, 'removeChild')
|
|
3015
|
+
.mockImplementation(() => (0, test_utils_1.getRootEl)());
|
|
2942
3016
|
appEmbed.destroy();
|
|
2943
3017
|
// Should be called immediately when config is enabled
|
|
2944
3018
|
expect(triggerSpy).toHaveBeenCalledWith(types_1.HostEvent.DestroyEmbed);
|
|
2945
3019
|
// Wait for the timeout to complete
|
|
2946
|
-
await new Promise(resolve => setTimeout(resolve, 1100));
|
|
3020
|
+
await new Promise((resolve) => setTimeout(resolve, 1100));
|
|
2947
3021
|
expect(removeChildSpy).toHaveBeenCalled();
|
|
2948
3022
|
});
|
|
2949
3023
|
it('should handle Promise.race with successful cleanup completion', async () => {
|
|
@@ -2960,11 +3034,15 @@ describe('Unit test case for ts embed', () => {
|
|
|
2960
3034
|
});
|
|
2961
3035
|
await appEmbed.render();
|
|
2962
3036
|
// Mock trigger to resolve quickly (before timeout)
|
|
2963
|
-
const triggerSpy = jest
|
|
2964
|
-
|
|
3037
|
+
const triggerSpy = jest
|
|
3038
|
+
.spyOn(appEmbed, 'trigger')
|
|
3039
|
+
.mockImplementation(() => new Promise((resolve) => setTimeout(() => resolve(null), 100)));
|
|
3040
|
+
const removeChildSpy = jest
|
|
3041
|
+
.spyOn(Node.prototype, 'removeChild')
|
|
3042
|
+
.mockImplementation(() => (0, test_utils_1.getRootEl)());
|
|
2965
3043
|
appEmbed.destroy();
|
|
2966
3044
|
// Wait for the trigger to complete
|
|
2967
|
-
await new Promise(resolve => setTimeout(resolve, 200));
|
|
3045
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
2968
3046
|
expect(triggerSpy).toHaveBeenCalledWith(types_1.HostEvent.DestroyEmbed);
|
|
2969
3047
|
expect(removeChildSpy).toHaveBeenCalled();
|
|
2970
3048
|
});
|
|
@@ -2982,11 +3060,15 @@ describe('Unit test case for ts embed', () => {
|
|
|
2982
3060
|
});
|
|
2983
3061
|
await appEmbed.render();
|
|
2984
3062
|
// Mock trigger to take longer than timeout
|
|
2985
|
-
const triggerSpy = jest
|
|
2986
|
-
|
|
3063
|
+
const triggerSpy = jest
|
|
3064
|
+
.spyOn(appEmbed, 'trigger')
|
|
3065
|
+
.mockImplementation(() => new Promise((resolve) => setTimeout(() => resolve(null), 500)));
|
|
3066
|
+
const removeChildSpy = jest
|
|
3067
|
+
.spyOn(Node.prototype, 'removeChild')
|
|
3068
|
+
.mockImplementation(() => (0, test_utils_1.getRootEl)());
|
|
2987
3069
|
appEmbed.destroy();
|
|
2988
3070
|
// Wait for the timeout to complete
|
|
2989
|
-
await new Promise(resolve => setTimeout(resolve, 200));
|
|
3071
|
+
await new Promise((resolve) => setTimeout(resolve, 200));
|
|
2990
3072
|
expect(triggerSpy).toHaveBeenCalledWith(types_1.HostEvent.DestroyEmbed);
|
|
2991
3073
|
expect(removeChildSpy).toHaveBeenCalled();
|
|
2992
3074
|
});
|
|
@@ -3014,11 +3096,11 @@ describe('Unit test case for ts embed', () => {
|
|
|
3014
3096
|
body: JSON.stringify({
|
|
3015
3097
|
variables: {
|
|
3016
3098
|
session: { sessionId: 'session-123' },
|
|
3017
|
-
contextBookId: 'viz-456'
|
|
3018
|
-
}
|
|
3019
|
-
})
|
|
3020
|
-
}
|
|
3021
|
-
})
|
|
3099
|
+
contextBookId: 'viz-456',
|
|
3100
|
+
},
|
|
3101
|
+
}),
|
|
3102
|
+
},
|
|
3103
|
+
}),
|
|
3022
3104
|
};
|
|
3023
3105
|
const mockPort = {
|
|
3024
3106
|
postMessage: jest.fn(),
|
|
@@ -3049,8 +3131,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3049
3131
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3050
3132
|
data: JSON.stringify({
|
|
3051
3133
|
input: '/prism/?op=GetChartWithData',
|
|
3052
|
-
init: {}
|
|
3053
|
-
})
|
|
3134
|
+
init: {},
|
|
3135
|
+
}),
|
|
3054
3136
|
};
|
|
3055
3137
|
const mockPort = {
|
|
3056
3138
|
postMessage: jest.fn(),
|
|
@@ -3082,8 +3164,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3082
3164
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3083
3165
|
data: JSON.stringify({
|
|
3084
3166
|
input: '/prism/?op=GetChartWithData',
|
|
3085
|
-
init: {}
|
|
3086
|
-
})
|
|
3167
|
+
init: {},
|
|
3168
|
+
}),
|
|
3087
3169
|
};
|
|
3088
3170
|
const mockPort = {
|
|
3089
3171
|
postMessage: jest.fn(),
|
|
@@ -3100,7 +3182,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3100
3182
|
// handleInterceptEvent
|
|
3101
3183
|
const result = await capturedGetUnsavedAnswerTml({
|
|
3102
3184
|
sessionId: 'session-123',
|
|
3103
|
-
vizId: 'viz-456'
|
|
3185
|
+
vizId: 'viz-456',
|
|
3104
3186
|
});
|
|
3105
3187
|
expect(mockProcessTrigger).toHaveBeenCalled();
|
|
3106
3188
|
const callArgs = mockProcessTrigger.mock.calls[0];
|
|
@@ -3110,8 +3192,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3110
3192
|
type: 'getUnsavedAnswerTML',
|
|
3111
3193
|
parameters: {
|
|
3112
3194
|
sessionId: 'session-123',
|
|
3113
|
-
vizId: 'viz-456'
|
|
3114
|
-
}
|
|
3195
|
+
vizId: 'viz-456',
|
|
3196
|
+
},
|
|
3115
3197
|
});
|
|
3116
3198
|
expect(result).toEqual(mockTmlResponse);
|
|
3117
3199
|
});
|
|
@@ -3128,8 +3210,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3128
3210
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3129
3211
|
data: JSON.stringify({
|
|
3130
3212
|
input: '/api/test',
|
|
3131
|
-
init: {}
|
|
3132
|
-
})
|
|
3213
|
+
init: {},
|
|
3214
|
+
}),
|
|
3133
3215
|
};
|
|
3134
3216
|
const mockPort = {
|
|
3135
3217
|
postMessage: jest.fn(),
|
|
@@ -3153,8 +3235,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3153
3235
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3154
3236
|
data: JSON.stringify({
|
|
3155
3237
|
input: '/prism/?op=GetChartWithData',
|
|
3156
|
-
init: {}
|
|
3157
|
-
})
|
|
3238
|
+
init: {},
|
|
3239
|
+
}),
|
|
3158
3240
|
};
|
|
3159
3241
|
const mockPort = {
|
|
3160
3242
|
postMessage: jest.fn(),
|
|
@@ -3195,15 +3277,15 @@ describe('Unit test case for ts embed', () => {
|
|
|
3195
3277
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3196
3278
|
data: JSON.stringify({
|
|
3197
3279
|
input: '/prism/?op=GetChartWithData',
|
|
3198
|
-
init: {}
|
|
3199
|
-
})
|
|
3280
|
+
init: {},
|
|
3281
|
+
}),
|
|
3200
3282
|
};
|
|
3201
3283
|
const mockEventData2 = {
|
|
3202
3284
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3203
3285
|
data: JSON.stringify({
|
|
3204
3286
|
input: '/prism/?op=LoadContextBook',
|
|
3205
|
-
init: {}
|
|
3206
|
-
})
|
|
3287
|
+
init: {},
|
|
3288
|
+
}),
|
|
3207
3289
|
};
|
|
3208
3290
|
const mockPort = {
|
|
3209
3291
|
postMessage: jest.fn(),
|
|
@@ -3232,8 +3314,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3232
3314
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3233
3315
|
data: JSON.stringify({
|
|
3234
3316
|
input: '/prism/?op=GetChartWithData',
|
|
3235
|
-
init: {}
|
|
3236
|
-
})
|
|
3317
|
+
init: {},
|
|
3318
|
+
}),
|
|
3237
3319
|
};
|
|
3238
3320
|
const mockPort = {
|
|
3239
3321
|
postMessage: jest.fn(),
|
|
@@ -3264,8 +3346,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3264
3346
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3265
3347
|
data: JSON.stringify({
|
|
3266
3348
|
input: '/prism/?op=GetChartWithData',
|
|
3267
|
-
init: {}
|
|
3268
|
-
})
|
|
3349
|
+
init: {},
|
|
3350
|
+
}),
|
|
3269
3351
|
};
|
|
3270
3352
|
const mockPort = {
|
|
3271
3353
|
postMessage: jest.fn(),
|
|
@@ -3278,7 +3360,7 @@ describe('Unit test case for ts embed', () => {
|
|
|
3278
3360
|
expect(capturedGetUnsavedAnswerTml).toBeDefined();
|
|
3279
3361
|
const result = await capturedGetUnsavedAnswerTml({
|
|
3280
3362
|
sessionId: 'session-123',
|
|
3281
|
-
vizId: 'viz-456'
|
|
3363
|
+
vizId: 'viz-456',
|
|
3282
3364
|
});
|
|
3283
3365
|
expect(result).toBeUndefined();
|
|
3284
3366
|
});
|
|
@@ -3293,8 +3375,8 @@ describe('Unit test case for ts embed', () => {
|
|
|
3293
3375
|
type: index_1.EmbedEvent.ApiIntercept,
|
|
3294
3376
|
data: JSON.stringify({
|
|
3295
3377
|
input: '/prism/?op=LoadContextBook',
|
|
3296
|
-
init: {}
|
|
3297
|
-
})
|
|
3378
|
+
init: {},
|
|
3379
|
+
}),
|
|
3298
3380
|
};
|
|
3299
3381
|
const mockPort = {
|
|
3300
3382
|
postMessage: jest.fn(),
|
|
@@ -3528,12 +3610,13 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3528
3610
|
const setupPreRenderTest = async (preRenderId, initialConfig) => {
|
|
3529
3611
|
(0, test_utils_1.createRootEleForEmbed)();
|
|
3530
3612
|
(0, test_utils_1.mockMessageChannel)();
|
|
3531
|
-
window.ResizeObserver =
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3613
|
+
window.ResizeObserver =
|
|
3614
|
+
window.ResizeObserver ||
|
|
3615
|
+
jest.fn().mockImplementation(() => ({
|
|
3616
|
+
disconnect: jest.fn(),
|
|
3617
|
+
observe: jest.fn(),
|
|
3618
|
+
unobserve: jest.fn(),
|
|
3619
|
+
}));
|
|
3537
3620
|
const embed1 = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3538
3621
|
preRenderId,
|
|
3539
3622
|
...initialConfig,
|
|
@@ -3684,7 +3767,8 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3684
3767
|
authType: index_1.AuthType.None,
|
|
3685
3768
|
});
|
|
3686
3769
|
});
|
|
3687
|
-
// Matches the structure produced by createValidationError /
|
|
3770
|
+
// Matches the structure produced by createValidationError /
|
|
3771
|
+
// embedErrorDetails
|
|
3688
3772
|
const makeNestedValidationData = (message = 'invalid payload') => ({
|
|
3689
3773
|
type: index_1.EmbedEvent.Error,
|
|
3690
3774
|
data: {
|
|
@@ -3694,7 +3778,8 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3694
3778
|
error: message,
|
|
3695
3779
|
},
|
|
3696
3780
|
});
|
|
3697
|
-
// Matches the flat structure where errorType sits at the top level of
|
|
3781
|
+
// Matches the flat structure where errorType sits at the top level of
|
|
3782
|
+
// data
|
|
3698
3783
|
const makeFlatValidationData = (message = 'invalid payload') => ({
|
|
3699
3784
|
errorType: types_1.EmbedErrorCodes.HOST_EVENT_VALIDATION,
|
|
3700
3785
|
message,
|
|
@@ -3735,14 +3820,20 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3735
3820
|
});
|
|
3736
3821
|
test('delivers Error event to handler when useHostEventsV2 is true and shouldBypassPayloadValidation is undefined', () => {
|
|
3737
3822
|
const errorHandler = jest.fn();
|
|
3738
|
-
const embed = makeEmbed({
|
|
3823
|
+
const embed = makeEmbed({
|
|
3824
|
+
useHostEventsV2: true,
|
|
3825
|
+
shouldBypassPayloadValidation: undefined,
|
|
3826
|
+
});
|
|
3739
3827
|
embed.on(index_1.EmbedEvent.Error, errorHandler);
|
|
3740
3828
|
embed.executeCallbacks(index_1.EmbedEvent.Error, makeNestedValidationData());
|
|
3741
3829
|
expect(errorHandler).toHaveBeenCalled();
|
|
3742
3830
|
});
|
|
3743
3831
|
test('delivers Error event to handler when useHostEventsV2 is true and shouldBypassPayloadValidation is false', () => {
|
|
3744
3832
|
const errorHandler = jest.fn();
|
|
3745
|
-
const embed = makeEmbed({
|
|
3833
|
+
const embed = makeEmbed({
|
|
3834
|
+
useHostEventsV2: true,
|
|
3835
|
+
shouldBypassPayloadValidation: false,
|
|
3836
|
+
});
|
|
3746
3837
|
embed.on(index_1.EmbedEvent.Error, errorHandler);
|
|
3747
3838
|
embed.executeCallbacks(index_1.EmbedEvent.Error, makeNestedValidationData());
|
|
3748
3839
|
expect(errorHandler).toHaveBeenCalled();
|
|
@@ -3750,7 +3841,10 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3750
3841
|
test('skips Error event when useHostEventsV2 is false regardless of shouldBypassPayloadValidation', () => {
|
|
3751
3842
|
jest.spyOn(logger_1.logger, 'warn');
|
|
3752
3843
|
const errorHandler = jest.fn();
|
|
3753
|
-
const embed = makeEmbed({
|
|
3844
|
+
const embed = makeEmbed({
|
|
3845
|
+
useHostEventsV2: false,
|
|
3846
|
+
shouldBypassPayloadValidation: undefined,
|
|
3847
|
+
});
|
|
3754
3848
|
embed.on(index_1.EmbedEvent.Error, errorHandler);
|
|
3755
3849
|
embed.executeCallbacks(index_1.EmbedEvent.Error, makeNestedValidationData());
|
|
3756
3850
|
expect(errorHandler).not.toHaveBeenCalled();
|
|
@@ -3766,7 +3860,10 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3766
3860
|
test('skips Error event when useHostEventsV2 is false and shouldBypassPayloadValidation is true', () => {
|
|
3767
3861
|
jest.spyOn(logger_1.logger, 'warn');
|
|
3768
3862
|
const errorHandler = jest.fn();
|
|
3769
|
-
const embed = makeEmbed({
|
|
3863
|
+
const embed = makeEmbed({
|
|
3864
|
+
useHostEventsV2: false,
|
|
3865
|
+
shouldBypassPayloadValidation: true,
|
|
3866
|
+
});
|
|
3770
3867
|
embed.on(index_1.EmbedEvent.Error, errorHandler);
|
|
3771
3868
|
embed.executeCallbacks(index_1.EmbedEvent.Error, makeNestedValidationData());
|
|
3772
3869
|
expect(errorHandler).not.toHaveBeenCalled();
|
|
@@ -3791,14 +3888,20 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3791
3888
|
});
|
|
3792
3889
|
test('delivers Error event to EmbedEvent.ALL handler when not skipped', () => {
|
|
3793
3890
|
const allHandler = jest.fn();
|
|
3794
|
-
const embed = makeEmbed({
|
|
3891
|
+
const embed = makeEmbed({
|
|
3892
|
+
useHostEventsV2: true,
|
|
3893
|
+
shouldBypassPayloadValidation: false,
|
|
3894
|
+
});
|
|
3795
3895
|
embed.on(index_1.EmbedEvent.ALL, allHandler);
|
|
3796
3896
|
embed.executeCallbacks(index_1.EmbedEvent.Error, makeNestedValidationData());
|
|
3797
3897
|
expect(allHandler).toHaveBeenCalled();
|
|
3798
3898
|
});
|
|
3799
3899
|
test('does not skip non-Error events even with HOST_EVENT_VALIDATION error code', () => {
|
|
3800
3900
|
const customActionHandler = jest.fn();
|
|
3801
|
-
const embed = makeEmbed({
|
|
3901
|
+
const embed = makeEmbed({
|
|
3902
|
+
useHostEventsV2: true,
|
|
3903
|
+
shouldBypassPayloadValidation: false,
|
|
3904
|
+
});
|
|
3802
3905
|
embed.on(index_1.EmbedEvent.CustomAction, customActionHandler);
|
|
3803
3906
|
embed.executeCallbacks(index_1.EmbedEvent.CustomAction, {
|
|
3804
3907
|
data: { code: types_1.EmbedErrorCodes.HOST_EVENT_VALIDATION },
|
|
@@ -3807,7 +3910,10 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3807
3910
|
});
|
|
3808
3911
|
test('does not skip Error events with unrelated error codes', () => {
|
|
3809
3912
|
const errorHandler = jest.fn();
|
|
3810
|
-
const embed = makeEmbed({
|
|
3913
|
+
const embed = makeEmbed({
|
|
3914
|
+
useHostEventsV2: true,
|
|
3915
|
+
shouldBypassPayloadValidation: false,
|
|
3916
|
+
});
|
|
3811
3917
|
embed.on(index_1.EmbedEvent.Error, errorHandler);
|
|
3812
3918
|
embed.executeCallbacks(index_1.EmbedEvent.Error, {
|
|
3813
3919
|
errorType: 'SOME_OTHER_ERROR',
|
|
@@ -3816,5 +3922,145 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
3816
3922
|
expect(errorHandler).toHaveBeenCalled();
|
|
3817
3923
|
});
|
|
3818
3924
|
});
|
|
3925
|
+
describe('constructor init-path branching (SCAL-315058)', () => {
|
|
3926
|
+
beforeEach(() => {
|
|
3927
|
+
(0, index_1.init)({
|
|
3928
|
+
thoughtSpotHost: 'tshost',
|
|
3929
|
+
authType: index_1.AuthType.None,
|
|
3930
|
+
});
|
|
3931
|
+
});
|
|
3932
|
+
it('sets hostElement from domSelector', () => {
|
|
3933
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3934
|
+
expect(embed.hostElement).toBe((0, test_utils_1.getRootEl)());
|
|
3935
|
+
});
|
|
3936
|
+
it('skips isReadyForRenderPromise when init already completed', () => {
|
|
3937
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(true);
|
|
3938
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3939
|
+
expect(embed.shouldWaitForRenderPromise).toBe(false);
|
|
3940
|
+
expect(embed.isReadyForRenderPromise).toBeUndefined();
|
|
3941
|
+
});
|
|
3942
|
+
it('sets isReadyForRenderPromise when init not yet completed', () => {
|
|
3943
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(false);
|
|
3944
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3945
|
+
expect(embed.shouldWaitForRenderPromise).toBe(true);
|
|
3946
|
+
expect(embed.isReadyForRenderPromise).toBeInstanceOf(Promise);
|
|
3947
|
+
});
|
|
3948
|
+
it('afterInit runs synchronously when init already completed', () => {
|
|
3949
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(true);
|
|
3950
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3951
|
+
// thoughtSpotHost is set by afterInit;
|
|
3952
|
+
// must be non-empty after constructor
|
|
3953
|
+
expect(embed.thoughtSpotHost).toBeTruthy();
|
|
3954
|
+
});
|
|
3955
|
+
it('does not set isReadyForRenderPromise when shouldWaitForRenderPromise is false', () => {
|
|
3956
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(true);
|
|
3957
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3958
|
+
expect(embed.shouldWaitForRenderPromise).toBe(false);
|
|
3959
|
+
// isReadyForRenderPromise must be undefined
|
|
3960
|
+
// so no unnecessary await occurs
|
|
3961
|
+
expect(embed.isReadyForRenderPromise).toBeUndefined();
|
|
3962
|
+
});
|
|
3963
|
+
it('shouldWaitForRenderPromise flips to false after promise settles', async () => {
|
|
3964
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(false);
|
|
3965
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3966
|
+
expect(embed.shouldWaitForRenderPromise).toBe(true);
|
|
3967
|
+
await embed.isReadyForRenderPromise;
|
|
3968
|
+
expect(embed.shouldWaitForRenderPromise).toBe(false);
|
|
3969
|
+
});
|
|
3970
|
+
it('calls throwInitError when getInitPromise rejects', async () => {
|
|
3971
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(false);
|
|
3972
|
+
jest.spyOn(baseInstance, 'getInitPromise').mockReturnValue(Promise.reject(new Error('init failed')));
|
|
3973
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3974
|
+
const throwInitErrorSpy = jest.spyOn(embed, 'throwInitError');
|
|
3975
|
+
await embed.isReadyForRenderPromise;
|
|
3976
|
+
expect(throwInitErrorSpy).toHaveBeenCalled();
|
|
3977
|
+
});
|
|
3978
|
+
it('shouldWaitForRenderPromise flips to false even when getInitPromise rejects', async () => {
|
|
3979
|
+
jest.spyOn(baseInstance, 'getIsInitCompleted').mockReturnValue(false);
|
|
3980
|
+
jest.spyOn(baseInstance, 'getInitPromise').mockReturnValue(Promise.reject(new Error('init failed')));
|
|
3981
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3982
|
+
await embed.isReadyForRenderPromise;
|
|
3983
|
+
expect(embed.shouldWaitForRenderPromise).toBe(false);
|
|
3984
|
+
});
|
|
3985
|
+
});
|
|
3986
|
+
describe('preRender ID object includes placeHolder (SCAL-315058)', () => {
|
|
3987
|
+
beforeAll(() => {
|
|
3988
|
+
(0, index_1.init)({
|
|
3989
|
+
thoughtSpotHost: 'tshost',
|
|
3990
|
+
authType: index_1.AuthType.None,
|
|
3991
|
+
});
|
|
3992
|
+
});
|
|
3993
|
+
it('getPreRenderIds returns placeHolder key', () => {
|
|
3994
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
3995
|
+
const embed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
3996
|
+
preRenderId: 'ph-test',
|
|
3997
|
+
liveboardId: 'lb-id',
|
|
3998
|
+
});
|
|
3999
|
+
const ids = embed.getPreRenderIds();
|
|
4000
|
+
expect(ids.placeHolder).toBe('tsEmbed-pre-render-placeholder-ph-test');
|
|
4001
|
+
});
|
|
4002
|
+
});
|
|
4003
|
+
describe('isPreRenderConnected logic (SCAL-315058)', () => {
|
|
4004
|
+
beforeAll(() => {
|
|
4005
|
+
(0, index_1.init)({
|
|
4006
|
+
thoughtSpotHost: 'tshost',
|
|
4007
|
+
authType: index_1.AuthType.None,
|
|
4008
|
+
});
|
|
4009
|
+
});
|
|
4010
|
+
it('returns false when preRenderWrapper is absent', () => {
|
|
4011
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
4012
|
+
const embed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
4013
|
+
preRenderId: 'conn-test',
|
|
4014
|
+
liveboardId: 'lb-id',
|
|
4015
|
+
});
|
|
4016
|
+
expect(embed.isPreRenderConnected()).toBe(false);
|
|
4017
|
+
});
|
|
4018
|
+
it('returns true once preRenderWrapper and preRenderChild are set', () => {
|
|
4019
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
4020
|
+
const embed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
4021
|
+
preRenderId: 'conn-test-2',
|
|
4022
|
+
liveboardId: 'lb-id',
|
|
4023
|
+
});
|
|
4024
|
+
embed.preRenderWrapper = document.createElement('div');
|
|
4025
|
+
embed.preRenderChild = document.createElement('div');
|
|
4026
|
+
expect(embed.isPreRenderConnected()).toBe(true);
|
|
4027
|
+
});
|
|
4028
|
+
});
|
|
4029
|
+
describe('showPreRender inserts placeholder into hostElement (SCAL-315058)', () => {
|
|
4030
|
+
beforeAll(() => {
|
|
4031
|
+
// Clear spy implementations that may have leaked from prior
|
|
4032
|
+
// describe blocks (e.g. getIsInitCompleted/getInitPromise mocks set
|
|
4033
|
+
// in 'constructor init-path branching' persist across describes
|
|
4034
|
+
// because clearAllMocks only clears call history, not
|
|
4035
|
+
// implementations).
|
|
4036
|
+
jest.restoreAllMocks();
|
|
4037
|
+
jest.spyOn(authInstance, 'postLoginService').mockResolvedValue(undefined);
|
|
4038
|
+
(0, index_1.init)({
|
|
4039
|
+
thoughtSpotHost: 'tshost',
|
|
4040
|
+
authType: index_1.AuthType.None,
|
|
4041
|
+
});
|
|
4042
|
+
window.ResizeObserver = jest.fn().mockImplementation(() => ({
|
|
4043
|
+
disconnect: jest.fn(),
|
|
4044
|
+
observe: jest.fn(),
|
|
4045
|
+
unobserve: jest.fn(),
|
|
4046
|
+
}));
|
|
4047
|
+
});
|
|
4048
|
+
it('showPreRender creates a placeholder element with the correct id', async () => {
|
|
4049
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
4050
|
+
const embed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
4051
|
+
preRenderId: 'ph-lifecycle-test',
|
|
4052
|
+
liveboardId: 'lb-id',
|
|
4053
|
+
});
|
|
4054
|
+
await embed.preRender();
|
|
4055
|
+
await (0, test_utils_1.waitFor)(() => !!document.querySelector('#tsEmbed-pre-render-child-ph-lifecycle-test'));
|
|
4056
|
+
await embed.showPreRender();
|
|
4057
|
+
const placeholderEle = embed.getPreRenderPlaceHolderElement();
|
|
4058
|
+
expect(placeholderEle).not.toBeNull();
|
|
4059
|
+
expect(placeholderEle.id).toBe('tsEmbed-pre-render-placeholder-ph-lifecycle-test');
|
|
4060
|
+
// placeholder is attached to a parent element (inside hostElement)
|
|
4061
|
+
expect(placeholderEle.parentElement).not.toBeNull();
|
|
4062
|
+
embed.destroy();
|
|
4063
|
+
});
|
|
4064
|
+
});
|
|
3819
4065
|
});
|
|
3820
4066
|
//# sourceMappingURL=ts-embed.spec.js.map
|