@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
|
@@ -27,6 +27,7 @@ import * as processTriggerInstance from '../utils/processTrigger';
|
|
|
27
27
|
import * as auth from '../auth';
|
|
28
28
|
import * as previewService from '../utils/graphql/preview-service';
|
|
29
29
|
import * as SessionInfoService from '../utils/sessionInfoService';
|
|
30
|
+
import { logger } from '../utils/logger';
|
|
30
31
|
|
|
31
32
|
const defaultViewConfig = {
|
|
32
33
|
frameParams: {
|
|
@@ -57,7 +58,7 @@ beforeAll(() => {
|
|
|
57
58
|
thoughtSpotHost,
|
|
58
59
|
authType: AuthType.None,
|
|
59
60
|
});
|
|
60
|
-
jest.spyOn(auth, 'postLoginService').mockImplementation(() => Promise.resolve(
|
|
61
|
+
jest.spyOn(auth, 'postLoginService').mockImplementation(() => Promise.resolve(undefined));
|
|
61
62
|
});
|
|
62
63
|
|
|
63
64
|
describe('Liveboard/viz embed tests', () => {
|
|
@@ -407,6 +408,70 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
407
408
|
});
|
|
408
409
|
});
|
|
409
410
|
|
|
411
|
+
test('Should add showMaskedFilterChip flag set to true to the iframe src', async () => {
|
|
412
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
413
|
+
...defaultViewConfig,
|
|
414
|
+
liveboardId,
|
|
415
|
+
showMaskedFilterChip: true,
|
|
416
|
+
} as LiveboardViewConfig);
|
|
417
|
+
|
|
418
|
+
liveboardEmbed.render();
|
|
419
|
+
await executeAfterWait(() => {
|
|
420
|
+
expectUrlMatchesWithParams(
|
|
421
|
+
getIFrameSrc(),
|
|
422
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&showMaskedFilterChip=true${prefixParams}#/embed/viz/${liveboardId}`,
|
|
423
|
+
);
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
test('Should add showMaskedFilterChip flag set to false to the iframe src', async () => {
|
|
428
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
429
|
+
...defaultViewConfig,
|
|
430
|
+
liveboardId,
|
|
431
|
+
showMaskedFilterChip: false,
|
|
432
|
+
} as LiveboardViewConfig);
|
|
433
|
+
|
|
434
|
+
liveboardEmbed.render();
|
|
435
|
+
await executeAfterWait(() => {
|
|
436
|
+
expectUrlMatchesWithParams(
|
|
437
|
+
getIFrameSrc(),
|
|
438
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&showMaskedFilterChip=false${prefixParams}#/embed/viz/${liveboardId}`,
|
|
439
|
+
);
|
|
440
|
+
});
|
|
441
|
+
});
|
|
442
|
+
|
|
443
|
+
test('Should add isLiveboardMasterpiecesEnabled flag set to true to the iframe src', async () => {
|
|
444
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
445
|
+
...defaultViewConfig,
|
|
446
|
+
liveboardId,
|
|
447
|
+
isLiveboardMasterpiecesEnabled: true,
|
|
448
|
+
} as LiveboardViewConfig);
|
|
449
|
+
|
|
450
|
+
liveboardEmbed.render();
|
|
451
|
+
await executeAfterWait(() => {
|
|
452
|
+
expectUrlMatchesWithParams(
|
|
453
|
+
getIFrameSrc(),
|
|
454
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isLiveboardMasterpiecesEnabled=true${prefixParams}#/embed/viz/${liveboardId}`,
|
|
455
|
+
);
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
test('Should add isLiveboardMasterpiecesEnabled flag set to false to the iframe src', async () => {
|
|
460
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
461
|
+
...defaultViewConfig,
|
|
462
|
+
liveboardId,
|
|
463
|
+
isLiveboardMasterpiecesEnabled: false,
|
|
464
|
+
} as LiveboardViewConfig);
|
|
465
|
+
|
|
466
|
+
liveboardEmbed.render();
|
|
467
|
+
await executeAfterWait(() => {
|
|
468
|
+
expectUrlMatchesWithParams(
|
|
469
|
+
getIFrameSrc(),
|
|
470
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParams}&isLiveboardMasterpiecesEnabled=false${prefixParams}#/embed/viz/${liveboardId}`,
|
|
471
|
+
);
|
|
472
|
+
});
|
|
473
|
+
});
|
|
474
|
+
|
|
410
475
|
test('Should add hideIrrelevantFiltersAtTabLevel flag to the iframe src', async () => {
|
|
411
476
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
412
477
|
...defaultViewConfig,
|
|
@@ -679,7 +744,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
679
744
|
});
|
|
680
745
|
});
|
|
681
746
|
test('should process the trigger, for vizEmbed', async () => {
|
|
682
|
-
const mockProcessTrigger = spyOn(processTriggerInstance, 'processTrigger');
|
|
747
|
+
const mockProcessTrigger = jest.spyOn(processTriggerInstance, 'processTrigger').mockImplementation(jest.fn());
|
|
683
748
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
684
749
|
enableVizTransformations: true,
|
|
685
750
|
...defaultViewConfig,
|
|
@@ -689,7 +754,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
689
754
|
liveboardEmbed.render();
|
|
690
755
|
await executeAfterWait(async () => {
|
|
691
756
|
await liveboardEmbed.trigger(HostEvent.Pin);
|
|
692
|
-
expect(mockProcessTrigger).
|
|
757
|
+
expect(mockProcessTrigger).toHaveBeenCalled();
|
|
693
758
|
});
|
|
694
759
|
});
|
|
695
760
|
|
|
@@ -756,7 +821,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
756
821
|
});
|
|
757
822
|
});
|
|
758
823
|
|
|
759
|
-
test('navigateToLiveboard should trigger the navigate event with the correct path', async (
|
|
824
|
+
test('navigateToLiveboard should trigger the navigate event with the correct path', async () => {
|
|
760
825
|
mockMessageChannel();
|
|
761
826
|
// mock getSessionInfo
|
|
762
827
|
|
|
@@ -766,7 +831,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
766
831
|
} as LiveboardViewConfig);
|
|
767
832
|
const onSpy = jest.spyOn(liveboardEmbed, 'trigger');
|
|
768
833
|
await liveboardEmbed.prerenderGeneric();
|
|
769
|
-
executeAfterWait(() => {
|
|
834
|
+
await executeAfterWait(() => {
|
|
770
835
|
const iframe = getIFrameEl();
|
|
771
836
|
postMessageToParent(iframe.contentWindow, {
|
|
772
837
|
type: EmbedEvent.APP_INIT,
|
|
@@ -777,13 +842,12 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
777
842
|
liveboardEmbed.navigateToLiveboard('lb1', 'viz1');
|
|
778
843
|
});
|
|
779
844
|
|
|
780
|
-
executeAfterWait(() => {
|
|
845
|
+
await executeAfterWait(() => {
|
|
781
846
|
expect(onSpy).toHaveBeenCalledWith(HostEvent.Navigate, 'embed/viz/lb1/viz1');
|
|
782
|
-
done();
|
|
783
847
|
}, 1002);
|
|
784
848
|
});
|
|
785
849
|
|
|
786
|
-
test('navigateToLiveboard with preRender', async (
|
|
850
|
+
test('navigateToLiveboard with preRender', async () => {
|
|
787
851
|
mockMessageChannel();
|
|
788
852
|
|
|
789
853
|
// mock getSessionInfo
|
|
@@ -793,7 +857,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
793
857
|
currentOrgId: 1,
|
|
794
858
|
privileges: [],
|
|
795
859
|
mixpanelToken: '1234567890',
|
|
796
|
-
});
|
|
860
|
+
} as any);
|
|
797
861
|
mockGetSessionInfo();
|
|
798
862
|
|
|
799
863
|
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
@@ -802,7 +866,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
802
866
|
} as LiveboardViewConfig);
|
|
803
867
|
const onSpy = jest.spyOn(liveboardEmbed, 'trigger');
|
|
804
868
|
await liveboardEmbed.prerenderGeneric();
|
|
805
|
-
executeAfterWait(() => {
|
|
869
|
+
await executeAfterWait(() => {
|
|
806
870
|
const iframe = getIFrameEl();
|
|
807
871
|
postMessageToParent(iframe.contentWindow, {
|
|
808
872
|
type: EmbedEvent.APP_INIT,
|
|
@@ -811,10 +875,9 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
811
875
|
type: EmbedEvent.AuthInit,
|
|
812
876
|
});
|
|
813
877
|
});
|
|
814
|
-
executeAfterWait(() => {
|
|
878
|
+
await executeAfterWait(() => {
|
|
815
879
|
liveboardEmbed.navigateToLiveboard('lb1', 'viz1');
|
|
816
880
|
expect(onSpy).toHaveBeenCalledWith(HostEvent.Navigate, 'embed/viz/lb1/viz1');
|
|
817
|
-
done();
|
|
818
881
|
}, 1002);
|
|
819
882
|
});
|
|
820
883
|
test('should set runtime parametere values in url params', async () => {
|
|
@@ -894,7 +957,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
894
957
|
const result = liveboardEmbed.trigger(HostEvent.SetActiveTab, {
|
|
895
958
|
tabId: newActiveTabId,
|
|
896
959
|
});
|
|
897
|
-
expect(mockProcessTrigger).not.
|
|
960
|
+
expect(mockProcessTrigger).not.toHaveBeenCalled();
|
|
898
961
|
});
|
|
899
962
|
});
|
|
900
963
|
|
|
@@ -924,14 +987,14 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
924
987
|
authType: AuthType.None,
|
|
925
988
|
});
|
|
926
989
|
});
|
|
927
|
-
test('it should preRender generic with liveboard id is not passed', async (
|
|
990
|
+
test('it should preRender generic with liveboard id is not passed', async () => {
|
|
928
991
|
const consoleSpy = jest.spyOn(console, 'error');
|
|
929
992
|
const libEmbed = new LiveboardEmbed(getRootEl(), {
|
|
930
993
|
preRenderId: 'testPreRender',
|
|
931
994
|
});
|
|
932
995
|
const prerenderGenericSpy = jest.spyOn(libEmbed, 'prerenderGeneric');
|
|
933
996
|
await libEmbed.preRender();
|
|
934
|
-
executeAfterWait(() => {
|
|
997
|
+
await executeAfterWait(() => {
|
|
935
998
|
const iFrame = document.getElementById(
|
|
936
999
|
libEmbed.getPreRenderIds().child,
|
|
937
1000
|
) as HTMLIFrameElement;
|
|
@@ -941,8 +1004,6 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
941
1004
|
expect(iFrame.src).toMatch(/http:\/\/tshost\/.*&isLiveboardEmbed=true.*#$/);
|
|
942
1005
|
|
|
943
1006
|
expect(consoleSpy).toHaveBeenCalledTimes(0);
|
|
944
|
-
|
|
945
|
-
done();
|
|
946
1007
|
});
|
|
947
1008
|
});
|
|
948
1009
|
|
|
@@ -990,7 +1051,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
990
1051
|
});
|
|
991
1052
|
});
|
|
992
1053
|
|
|
993
|
-
test('it should navigateToLiveboard with liveboard id is not passed with EmbedListenerReady event', async (
|
|
1054
|
+
test('it should navigateToLiveboard with liveboard id is not passed with EmbedListenerReady event', async () => {
|
|
994
1055
|
mockMessageChannel();
|
|
995
1056
|
const consoleSpy = jest.spyOn(console, 'error');
|
|
996
1057
|
const testPreRenderId = 'testPreRender';
|
|
@@ -1035,7 +1096,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1035
1096
|
const navigateToLiveboardSpy = jest.spyOn(newLibEmbed, 'navigateToLiveboard');
|
|
1036
1097
|
await newLibEmbed.showPreRender();
|
|
1037
1098
|
|
|
1038
|
-
executeAfterWait(() => {
|
|
1099
|
+
await executeAfterWait(() => {
|
|
1039
1100
|
const iFrame = document.getElementById(
|
|
1040
1101
|
libEmbed.getPreRenderIds().child,
|
|
1041
1102
|
) as HTMLIFrameElement;
|
|
@@ -1045,12 +1106,10 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1045
1106
|
expect(iFrame.src).toMatch(/http:\/\/tshost\/.*&isLiveboardEmbed=true.*#$/);
|
|
1046
1107
|
|
|
1047
1108
|
expect(consoleSpy).toHaveBeenCalledTimes(0);
|
|
1048
|
-
|
|
1049
|
-
done();
|
|
1050
1109
|
});
|
|
1051
1110
|
});
|
|
1052
1111
|
|
|
1053
|
-
test('it should navigateToLiveboard with liveboard id is not passed with AuthInit event', async (
|
|
1112
|
+
test('it should navigateToLiveboard with liveboard id is not passed with AuthInit event', async () => {
|
|
1054
1113
|
mockMessageChannel();
|
|
1055
1114
|
const consoleSpy = jest.spyOn(console, 'error');
|
|
1056
1115
|
const testPreRenderId = 'testPreRender';
|
|
@@ -1104,7 +1163,6 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1104
1163
|
expect(navigateToLiveboardSpy).toHaveBeenCalledWith(testLiveboardId, 'testVizId', 'testActiveTabId');
|
|
1105
1164
|
expect(iFrame.src).toMatch(/http:\/\/tshost\/.*&isLiveboardEmbed=true.*#$/);
|
|
1106
1165
|
expect(consoleSpy).toHaveBeenCalledTimes(0);
|
|
1107
|
-
done();
|
|
1108
1166
|
}, 1005);
|
|
1109
1167
|
});
|
|
1110
1168
|
|
|
@@ -1213,6 +1271,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1213
1271
|
liveboardId,
|
|
1214
1272
|
fullHeight: true,
|
|
1215
1273
|
lazyLoadingForFullHeight: true,
|
|
1274
|
+
lazyLoadingMargin: '10px',
|
|
1216
1275
|
} as LiveboardViewConfig);
|
|
1217
1276
|
|
|
1218
1277
|
await liveboardEmbed.render();
|
|
@@ -1266,6 +1325,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1266
1325
|
liveboardId,
|
|
1267
1326
|
fullHeight: true,
|
|
1268
1327
|
lazyLoadingForFullHeight: true,
|
|
1328
|
+
lazyLoadingMargin: '10px',
|
|
1269
1329
|
} as LiveboardViewConfig);
|
|
1270
1330
|
|
|
1271
1331
|
await liveboardEmbed.render();
|
|
@@ -1284,6 +1344,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1284
1344
|
liveboardId,
|
|
1285
1345
|
fullHeight: true,
|
|
1286
1346
|
lazyLoadingForFullHeight: true,
|
|
1347
|
+
lazyLoadingMargin: '10px',
|
|
1287
1348
|
} as LiveboardViewConfig);
|
|
1288
1349
|
|
|
1289
1350
|
const mockTrigger = jest.spyOn(liveboardEmbed, 'trigger');
|
|
@@ -1316,6 +1377,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1316
1377
|
liveboardId,
|
|
1317
1378
|
fullHeight: true,
|
|
1318
1379
|
lazyLoadingForFullHeight: true,
|
|
1380
|
+
lazyLoadingMargin: '10px',
|
|
1319
1381
|
} as LiveboardViewConfig);
|
|
1320
1382
|
|
|
1321
1383
|
const mockTrigger = jest.spyOn(liveboardEmbed, 'trigger');
|
|
@@ -1341,6 +1403,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1341
1403
|
liveboardId,
|
|
1342
1404
|
fullHeight: true,
|
|
1343
1405
|
lazyLoadingForFullHeight: true,
|
|
1406
|
+
lazyLoadingMargin: '10px',
|
|
1344
1407
|
} as LiveboardViewConfig);
|
|
1345
1408
|
|
|
1346
1409
|
await liveboardEmbed.render();
|
|
@@ -1362,6 +1425,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1362
1425
|
liveboardId,
|
|
1363
1426
|
fullHeight: true,
|
|
1364
1427
|
lazyLoadingForFullHeight: true,
|
|
1428
|
+
lazyLoadingMargin: '10px',
|
|
1365
1429
|
} as LiveboardViewConfig);
|
|
1366
1430
|
|
|
1367
1431
|
await liveboardEmbed.render();
|
|
@@ -1390,6 +1454,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1390
1454
|
liveboardId,
|
|
1391
1455
|
fullHeight: true,
|
|
1392
1456
|
lazyLoadingForFullHeight: true,
|
|
1457
|
+
lazyLoadingMargin: '10px',
|
|
1393
1458
|
} as LiveboardViewConfig);
|
|
1394
1459
|
|
|
1395
1460
|
// Set the iframe before render
|
|
@@ -1448,7 +1513,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1448
1513
|
...defaultViewConfig,
|
|
1449
1514
|
});
|
|
1450
1515
|
|
|
1451
|
-
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').
|
|
1516
|
+
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').mockImplementation(() => Promise.resolve(undefined));
|
|
1452
1517
|
|
|
1453
1518
|
// Mock embed container as not loaded initially
|
|
1454
1519
|
liveboardEmbed.isEmbedContainerLoaded = false;
|
|
@@ -1480,7 +1545,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1480
1545
|
};
|
|
1481
1546
|
|
|
1482
1547
|
jest.spyOn(liveboardEmbed as any, 'getPreRenderObj').mockReturnValue(mockPreRenderObj as any);
|
|
1483
|
-
jest.spyOn(liveboardEmbed, 'navigateToLiveboard').
|
|
1548
|
+
jest.spyOn(liveboardEmbed, 'navigateToLiveboard').mockImplementation(() => Promise.resolve(undefined));
|
|
1484
1549
|
|
|
1485
1550
|
// Mock embed container as not loaded initially
|
|
1486
1551
|
liveboardEmbed.isEmbedContainerLoaded = false;
|
|
@@ -1508,7 +1573,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1508
1573
|
...defaultViewConfig,
|
|
1509
1574
|
});
|
|
1510
1575
|
|
|
1511
|
-
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').
|
|
1576
|
+
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').mockImplementation(() => Promise.resolve(undefined));
|
|
1512
1577
|
|
|
1513
1578
|
// Mock embed container as already loaded
|
|
1514
1579
|
liveboardEmbed.isEmbedContainerLoaded = true;
|
|
@@ -1529,7 +1594,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1529
1594
|
});
|
|
1530
1595
|
|
|
1531
1596
|
jest.spyOn(liveboardEmbed as any, 'getPreRenderObj').mockReturnValue(null);
|
|
1532
|
-
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').
|
|
1597
|
+
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').mockImplementation(() => Promise.resolve(undefined));
|
|
1533
1598
|
|
|
1534
1599
|
// Mock embed container as not loaded initially
|
|
1535
1600
|
liveboardEmbed.isEmbedContainerLoaded = false;
|
|
@@ -1557,7 +1622,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1557
1622
|
...defaultViewConfig,
|
|
1558
1623
|
});
|
|
1559
1624
|
|
|
1560
|
-
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').
|
|
1625
|
+
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').mockImplementation(() => Promise.resolve(undefined));
|
|
1561
1626
|
|
|
1562
1627
|
// Mock embed container as already loaded
|
|
1563
1628
|
liveboardEmbed.isEmbedContainerLoaded = true;
|
|
@@ -1575,7 +1640,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1575
1640
|
...defaultViewConfig,
|
|
1576
1641
|
});
|
|
1577
1642
|
|
|
1578
|
-
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').
|
|
1643
|
+
const navigateToLiveboardSpy = jest.spyOn(liveboardEmbed, 'navigateToLiveboard').mockImplementation(() => Promise.resolve(undefined));
|
|
1579
1644
|
|
|
1580
1645
|
// Mock embed container as already loaded
|
|
1581
1646
|
liveboardEmbed.isEmbedContainerLoaded = true;
|
|
@@ -1587,4 +1652,47 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
1587
1652
|
expect(navigateToLiveboardSpy).toHaveBeenCalledWith(liveboardId, undefined, undefined);
|
|
1588
1653
|
});
|
|
1589
1654
|
});
|
|
1655
|
+
|
|
1656
|
+
describe('Liveboard Embed Default Height and Minimum Height Handling', () => {
|
|
1657
|
+
test('should set default height to 800 when minimum height is provided', async () => {
|
|
1658
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
1659
|
+
liveboardId,
|
|
1660
|
+
...defaultViewConfig,
|
|
1661
|
+
fullHeight: true,
|
|
1662
|
+
defaultHeight: 700,
|
|
1663
|
+
minimumHeight: 800,
|
|
1664
|
+
});
|
|
1665
|
+
await liveboardEmbed.render();
|
|
1666
|
+
expect(liveboardEmbed['defaultHeight']).toBe(800);
|
|
1667
|
+
});
|
|
1668
|
+
test('should set default height to 700 when default height is provided', async () => {
|
|
1669
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
1670
|
+
liveboardId,
|
|
1671
|
+
...defaultViewConfig,
|
|
1672
|
+
fullHeight: true,
|
|
1673
|
+
defaultHeight: 700,
|
|
1674
|
+
});
|
|
1675
|
+
await liveboardEmbed.render();
|
|
1676
|
+
expect(liveboardEmbed['defaultHeight']).toBe(700);
|
|
1677
|
+
});
|
|
1678
|
+
test('should set default height to 800 when minimum height is provided but default height is not', async () => {
|
|
1679
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
1680
|
+
liveboardId,
|
|
1681
|
+
...defaultViewConfig,
|
|
1682
|
+
fullHeight: true,
|
|
1683
|
+
minimumHeight: 800,
|
|
1684
|
+
});
|
|
1685
|
+
await liveboardEmbed.render();
|
|
1686
|
+
expect(liveboardEmbed['defaultHeight']).toBe(800);
|
|
1687
|
+
});
|
|
1688
|
+
test('should set default height to 500 when neither default height nor minimum height is provided', async () => {
|
|
1689
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
1690
|
+
liveboardId,
|
|
1691
|
+
...defaultViewConfig,
|
|
1692
|
+
fullHeight: true,
|
|
1693
|
+
});
|
|
1694
|
+
await liveboardEmbed.render();
|
|
1695
|
+
expect(liveboardEmbed['defaultHeight']).toBe(500);
|
|
1696
|
+
});
|
|
1697
|
+
});
|
|
1590
1698
|
});
|
package/src/embed/liveboard.ts
CHANGED
|
@@ -20,8 +20,10 @@ import {
|
|
|
20
20
|
SearchLiveboardCommonViewConfig as LiveboardOtherViewConfig,
|
|
21
21
|
BaseViewConfig,
|
|
22
22
|
LiveboardAppEmbedViewConfig,
|
|
23
|
+
ErrorDetailsTypes,
|
|
24
|
+
EmbedErrorCodes,
|
|
23
25
|
} from '../types';
|
|
24
|
-
import { calculateVisibleElementData, getQueryParamString, isUndefined } from '../utils';
|
|
26
|
+
import { calculateVisibleElementData, getQueryParamString, isUndefined, isValidCssMargin } from '../utils';
|
|
25
27
|
import { getAuthPromise } from './base';
|
|
26
28
|
import { TsEmbed, V1Embed } from './ts-embed';
|
|
27
29
|
import { addPreviewStylesIfNotPresent } from '../utils/global-styles';
|
|
@@ -65,6 +67,7 @@ export interface LiveboardViewConfig extends BaseViewConfig, LiveboardOtherViewC
|
|
|
65
67
|
* Supported embed types: `LiveboardEmbed`
|
|
66
68
|
* @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1
|
|
67
69
|
* @default 500
|
|
70
|
+
* @deprecated Use `minimumHeight` instead.
|
|
68
71
|
* @example
|
|
69
72
|
* ```js
|
|
70
73
|
* const embed = new LiveboardEmbed('#embed', {
|
|
@@ -75,6 +78,23 @@ export interface LiveboardViewConfig extends BaseViewConfig, LiveboardOtherViewC
|
|
|
75
78
|
* ```
|
|
76
79
|
*/
|
|
77
80
|
defaultHeight?: number;
|
|
81
|
+
/**
|
|
82
|
+
* This is the minimum height (in pixels) for a full-height Liveboard.
|
|
83
|
+
* Setting this height helps resolve issues with empty Liveboards and
|
|
84
|
+
* other screens navigable from a Liveboard.
|
|
85
|
+
*
|
|
86
|
+
* @version SDK: 1.44.2 | ThoughtSpot: 26.0.2.cl
|
|
87
|
+
* @default 500
|
|
88
|
+
* @example
|
|
89
|
+
* ```js
|
|
90
|
+
* const embed = new LiveboardEmbed('#embed', {
|
|
91
|
+
* ... // other liveboard view config
|
|
92
|
+
* fullHeight: true,
|
|
93
|
+
* minimumHeight: 600,
|
|
94
|
+
* });
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
minimumHeight?: number;
|
|
78
98
|
/**
|
|
79
99
|
* @Deprecated If set to true, the context menu in visualizations will be enabled.
|
|
80
100
|
* @example
|
|
@@ -467,6 +487,7 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
467
487
|
enableVizTransformations,
|
|
468
488
|
fullHeight,
|
|
469
489
|
defaultHeight,
|
|
490
|
+
minimumHeight,
|
|
470
491
|
visibleVizs,
|
|
471
492
|
liveboardV2,
|
|
472
493
|
vizId,
|
|
@@ -480,6 +501,8 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
480
501
|
showLiveboardVerifiedBadge = true,
|
|
481
502
|
showLiveboardReverifyBanner = true,
|
|
482
503
|
hideIrrelevantChipsInLiveboardTabs = false,
|
|
504
|
+
showMaskedFilterChip = false,
|
|
505
|
+
isLiveboardMasterpiecesEnabled = false,
|
|
483
506
|
isEnhancedFilterInteractivityEnabled = false,
|
|
484
507
|
enableAskSage,
|
|
485
508
|
enable2ColumnLayout,
|
|
@@ -505,12 +528,12 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
505
528
|
params[Param.fullHeight] = true;
|
|
506
529
|
if (this.viewConfig.lazyLoadingForFullHeight) {
|
|
507
530
|
params[Param.IsLazyLoadingForEmbedEnabled] = true;
|
|
508
|
-
|
|
531
|
+
if (isValidCssMargin(this.viewConfig.lazyLoadingMargin)) {
|
|
532
|
+
params[Param.RootMarginForLazyLoad] = this.viewConfig.lazyLoadingMargin;
|
|
533
|
+
}
|
|
509
534
|
}
|
|
510
535
|
}
|
|
511
|
-
|
|
512
|
-
this.defaultHeight = defaultHeight;
|
|
513
|
-
}
|
|
536
|
+
this.defaultHeight = minimumHeight || defaultHeight || this.defaultHeight;
|
|
514
537
|
if (enableVizTransformations !== undefined) {
|
|
515
538
|
params[Param.EnableVizTransformations] = enableVizTransformations.toString();
|
|
516
539
|
}
|
|
@@ -589,6 +612,8 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
589
612
|
params[Param.ShowLiveboardVerifiedBadge] = showLiveboardVerifiedBadge;
|
|
590
613
|
params[Param.ShowLiveboardReverifyBanner] = showLiveboardReverifyBanner;
|
|
591
614
|
params[Param.HideIrrelevantFiltersInTab] = hideIrrelevantChipsInLiveboardTabs;
|
|
615
|
+
params[Param.ShowMaskedFilterChip] = showMaskedFilterChip;
|
|
616
|
+
params[Param.IsLiveboardMasterpiecesEnabled] = isLiveboardMasterpiecesEnabled;
|
|
592
617
|
params[Param.IsEnhancedFilterInteractivityEnabled] = isEnhancedFilterInteractivityEnabled;
|
|
593
618
|
params[Param.DataPanelV2Enabled] = dataPanelV2;
|
|
594
619
|
params[Param.EnableCustomColumnGroups] = enableCustomColumnGroups;
|
|
@@ -642,7 +667,12 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
642
667
|
const liveboardId = this.viewConfig.liveboardId ?? this.viewConfig.pinboardId;
|
|
643
668
|
|
|
644
669
|
if (!liveboardId) {
|
|
645
|
-
this.handleError(
|
|
670
|
+
this.handleError({
|
|
671
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
672
|
+
message: ERROR_MESSAGE.LIVEBOARD_VIZ_ID_VALIDATION,
|
|
673
|
+
code: EmbedErrorCodes.LIVEBOARD_ID_MISSING,
|
|
674
|
+
error: ERROR_MESSAGE.LIVEBOARD_VIZ_ID_VALIDATION,
|
|
675
|
+
});
|
|
646
676
|
}
|
|
647
677
|
return `${this.getRootIframeSrc()}${this.getIframeSuffixSrc(
|
|
648
678
|
liveboardId,
|
|
@@ -31,7 +31,7 @@ beforeAll(() => {
|
|
|
31
31
|
thoughtSpotHost,
|
|
32
32
|
authType: AuthType.None,
|
|
33
33
|
});
|
|
34
|
-
jest.spyOn(auth, 'postLoginService').
|
|
34
|
+
jest.spyOn(auth, 'postLoginService').mockImplementation(() => Promise.resolve(undefined));
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
describe('Pinboard/viz embed tests', () => {
|
package/src/embed/sage.spec.ts
CHANGED
|
@@ -28,8 +28,8 @@ beforeAll(() => {
|
|
|
28
28
|
thoughtSpotHost,
|
|
29
29
|
authType: AuthType.None,
|
|
30
30
|
});
|
|
31
|
-
spyOn(window, 'alert');
|
|
32
|
-
jest.spyOn(authInstance, 'postLoginService').
|
|
31
|
+
jest.spyOn(window, 'alert');
|
|
32
|
+
jest.spyOn(authInstance, 'postLoginService').mockImplementation(() => Promise.resolve(true as any));
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
describe('Sage embed tests', () => {
|
package/src/embed/search.spec.ts
CHANGED
|
@@ -40,8 +40,8 @@ beforeAll(() => {
|
|
|
40
40
|
thoughtSpotHost,
|
|
41
41
|
authType: AuthType.None,
|
|
42
42
|
});
|
|
43
|
-
jest.spyOn(authInstance, 'postLoginService').mockImplementation(() => Promise.resolve(
|
|
44
|
-
spyOn(window, 'alert');
|
|
43
|
+
jest.spyOn(authInstance, 'postLoginService').mockImplementation(() => Promise.resolve(undefined));
|
|
44
|
+
jest.spyOn(window, 'alert').mockImplementation(() => {});
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
describe('Search embed tests', () => {
|
|
@@ -666,3 +666,134 @@ describe('Search embed tests', () => {
|
|
|
666
666
|
expect(getIFrameSrc().includes('executeSearch')).toBeFalsy();
|
|
667
667
|
});
|
|
668
668
|
});
|
|
669
|
+
|
|
670
|
+
// Add these tests to src/embed/search.spec.ts
|
|
671
|
+
|
|
672
|
+
// ============================================
|
|
673
|
+
// SearchEmbed tests for uncovered lines 427, 430
|
|
674
|
+
// ============================================
|
|
675
|
+
|
|
676
|
+
// TEST 1: hideResults parameter (line 427)
|
|
677
|
+
test('should pass hideResult parameter when hideResults is true', async () => {
|
|
678
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
679
|
+
...defaultViewConfig,
|
|
680
|
+
hideResults: true,
|
|
681
|
+
});
|
|
682
|
+
searchEmbed.render();
|
|
683
|
+
await executeAfterWait(() => {
|
|
684
|
+
const iframeSrc = getIFrameSrc();
|
|
685
|
+
expect(iframeSrc).toContain('hideResult=true');
|
|
686
|
+
});
|
|
687
|
+
});
|
|
688
|
+
|
|
689
|
+
// TEST 2: forceTable parameter (line 430)
|
|
690
|
+
test('should pass forceTable parameter when forceTable is true', async () => {
|
|
691
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {
|
|
692
|
+
...defaultViewConfig,
|
|
693
|
+
forceTable: true,
|
|
694
|
+
});
|
|
695
|
+
searchEmbed.render();
|
|
696
|
+
await executeAfterWait(() => {
|
|
697
|
+
const iframeSrc = getIFrameSrc();
|
|
698
|
+
expect(iframeSrc).toContain('forceTable=true');
|
|
699
|
+
});
|
|
700
|
+
});
|
|
701
|
+
|
|
702
|
+
describe('SearchBarEmbed tests', () => {
|
|
703
|
+
test('should pass dataSources parameter when dataSources array is provided', async () => {
|
|
704
|
+
const searchBarEmbed = new SearchBarEmbed(getRootEl() as any, {
|
|
705
|
+
...defaultViewConfig,
|
|
706
|
+
dataSources: ['source-1', 'source-2'],
|
|
707
|
+
});
|
|
708
|
+
searchBarEmbed.render();
|
|
709
|
+
await executeAfterWait(() => {
|
|
710
|
+
const iframeSrc = getIFrameSrc();
|
|
711
|
+
expect(iframeSrc).toContain('dataSources');
|
|
712
|
+
expect(iframeSrc).toContain('source-1');
|
|
713
|
+
});
|
|
714
|
+
});
|
|
715
|
+
|
|
716
|
+
test('should pass dataSource parameter when single dataSource is provided', async () => {
|
|
717
|
+
const searchBarEmbed = new SearchBarEmbed(getRootEl() as any, {
|
|
718
|
+
...defaultViewConfig,
|
|
719
|
+
dataSource: 'single-source-id',
|
|
720
|
+
});
|
|
721
|
+
searchBarEmbed.render();
|
|
722
|
+
await executeAfterWait(() => {
|
|
723
|
+
const iframeSrc = getIFrameSrc();
|
|
724
|
+
expect(iframeSrc).toContain('dataSources');
|
|
725
|
+
expect(iframeSrc).toContain('single-source-id');
|
|
726
|
+
});
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
test('should pass searchTokenString and executeSearch when searchOptions provided', async () => {
|
|
730
|
+
const searchBarEmbed = new SearchBarEmbed(getRootEl() as any, {
|
|
731
|
+
...defaultViewConfig,
|
|
732
|
+
searchOptions: {
|
|
733
|
+
searchTokenString: '[revenue][region]',
|
|
734
|
+
executeSearch: true,
|
|
735
|
+
},
|
|
736
|
+
});
|
|
737
|
+
searchBarEmbed.render();
|
|
738
|
+
await executeAfterWait(() => {
|
|
739
|
+
const iframeSrc = getIFrameSrc();
|
|
740
|
+
expect(iframeSrc).toContain('searchTokenString');
|
|
741
|
+
expect(iframeSrc).toContain('executeSearch=true');
|
|
742
|
+
});
|
|
743
|
+
});
|
|
744
|
+
|
|
745
|
+
test('should set useLastSelectedSources to false when dataSource is provided', async () => {
|
|
746
|
+
const searchBarEmbed = new SearchBarEmbed(getRootEl() as any, {
|
|
747
|
+
...defaultViewConfig,
|
|
748
|
+
dataSource: 'my-source',
|
|
749
|
+
useLastSelectedSources: true, // This should be overridden to false
|
|
750
|
+
});
|
|
751
|
+
searchBarEmbed.render();
|
|
752
|
+
await executeAfterWait(() => {
|
|
753
|
+
const iframeSrc = getIFrameSrc();
|
|
754
|
+
expect(iframeSrc).toContain('useLastSelectedSources=false');
|
|
755
|
+
});
|
|
756
|
+
});
|
|
757
|
+
|
|
758
|
+
test('should include searchOptions in APP_INIT when excludeSearchTokenStringFromURL is true', async () => {
|
|
759
|
+
const searchOptions = {
|
|
760
|
+
searchTokenString: '[quantity][product]',
|
|
761
|
+
executeSearch: true,
|
|
762
|
+
};
|
|
763
|
+
const searchBarEmbed = new SearchBarEmbed(getRootEl() as any, {
|
|
764
|
+
...defaultViewConfig,
|
|
765
|
+
searchOptions,
|
|
766
|
+
excludeSearchTokenStringFromURL: true,
|
|
767
|
+
});
|
|
768
|
+
|
|
769
|
+
const mockEmbedEventPayload = {
|
|
770
|
+
type: EmbedEvent.APP_INIT,
|
|
771
|
+
data: {},
|
|
772
|
+
};
|
|
773
|
+
|
|
774
|
+
searchBarEmbed.render();
|
|
775
|
+
|
|
776
|
+
const mockPort: any = {
|
|
777
|
+
postMessage: jest.fn(),
|
|
778
|
+
};
|
|
779
|
+
|
|
780
|
+
await executeAfterWait(() => {
|
|
781
|
+
const iframe = getIFrameEl();
|
|
782
|
+
postMessageToParent(iframe.contentWindow, mockEmbedEventPayload, mockPort);
|
|
783
|
+
});
|
|
784
|
+
|
|
785
|
+
expect(getIFrameSrc().includes('searchTokenString')).toBeFalsy();
|
|
786
|
+
|
|
787
|
+
await executeAfterWait(() => {
|
|
788
|
+
expect(mockPort.postMessage).toHaveBeenCalledWith({
|
|
789
|
+
type: EmbedEvent.APP_INIT,
|
|
790
|
+
data: expect.objectContaining({
|
|
791
|
+
searchOptions: {
|
|
792
|
+
searchTokenString: '[quantity][product]',
|
|
793
|
+
executeSearch: true,
|
|
794
|
+
},
|
|
795
|
+
}),
|
|
796
|
+
});
|
|
797
|
+
});
|
|
798
|
+
});
|
|
799
|
+
});
|
|
@@ -13,9 +13,9 @@ import * as authInstance from '../auth';
|
|
|
13
13
|
describe('Trigger', () => {
|
|
14
14
|
beforeEach(() => {
|
|
15
15
|
document.body.innerHTML = getDocumentBody();
|
|
16
|
-
jest.spyOn(authInstance, 'postLoginService').
|
|
16
|
+
jest.spyOn(authInstance, 'postLoginService').mockImplementation(() => Promise.resolve(true as any));
|
|
17
17
|
});
|
|
18
|
-
test('should trigger the event', async (
|
|
18
|
+
test('should trigger the event', async () => {
|
|
19
19
|
init({
|
|
20
20
|
thoughtSpotHost: 'https://tshost',
|
|
21
21
|
authType: AuthType.None,
|
|
@@ -36,7 +36,6 @@ describe('Trigger', () => {
|
|
|
36
36
|
type: HostEvent.DownloadAsCsv,
|
|
37
37
|
data: { vizId: 'testId' },
|
|
38
38
|
}), 'https://tshost', expect.anything());
|
|
39
|
-
done();
|
|
40
39
|
});
|
|
41
40
|
});
|
|
42
41
|
});
|