@thoughtspot/visual-embed-sdk 1.12.0-alpha.2 → 1.12.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/CHANGELOG.md +19 -6
- package/README.md +1 -1
- package/dist/src/auth.d.ts +4 -1
- package/dist/src/auth.spec.d.ts +1 -0
- package/dist/src/embed/liveboard.d.ts +7 -1
- package/dist/src/embed/search.d.ts +5 -0
- package/dist/src/embed/searchEmbed-basic-auth.spec.d.ts +1 -0
- package/dist/src/embed/ts-embed.d.ts +2 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/types.d.ts +19 -2
- package/dist/src/utils.d.ts +1 -0
- package/dist/tsembed.es.js +54 -7
- package/dist/tsembed.js +54 -7
- package/lib/package.json +4 -2
- package/lib/src/auth.d.ts +4 -1
- package/lib/src/auth.js +10 -2
- package/lib/src/auth.js.map +1 -1
- package/lib/src/auth.spec.d.ts +1 -0
- package/lib/src/auth.spec.js +4 -1
- package/lib/src/auth.spec.js.map +1 -1
- package/lib/src/embed/app.spec.js +4 -3
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/embed.spec.js +2 -0
- package/lib/src/embed/embed.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +1 -0
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +7 -1
- package/lib/src/embed/liveboard.js +12 -0
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +18 -4
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/pinboard.spec.js +4 -3
- package/lib/src/embed/pinboard.spec.js.map +1 -1
- package/lib/src/embed/search.d.ts +5 -0
- package/lib/src/embed/search.js +10 -2
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +9 -1
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts +1 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js +90 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
- package/lib/src/embed/ts-embed.d.ts +2 -1
- package/lib/src/embed/ts-embed.js +7 -5
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +12 -5
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts +1 -0
- package/lib/src/errors.js +1 -0
- package/lib/src/errors.js.map +1 -1
- package/lib/src/react/index.js +3 -2
- package/lib/src/react/index.js.map +1 -1
- package/lib/src/react/index.spec.js +3 -2
- package/lib/src/react/index.spec.js.map +1 -1
- package/lib/src/types.d.ts +19 -2
- package/lib/src/types.js +11 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils.d.ts +1 -0
- package/lib/src/utils.js +8 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +16 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +36 -5
- package/package.json +4 -2
- package/src/auth.spec.ts +10 -1
- package/src/auth.ts +11 -2
- package/src/embed/app.spec.ts +4 -3
- package/src/embed/embed.spec.ts +2 -0
- package/src/embed/events.spec.ts +1 -0
- package/src/embed/liveboard.spec.ts +27 -4
- package/src/embed/liveboard.ts +13 -0
- package/src/embed/pinboard.spec.ts +4 -3
- package/src/embed/search.spec.ts +11 -1
- package/src/embed/search.ts +20 -1
- package/src/embed/searchEmbed-basic-auth.spec.ts +110 -0
- package/src/embed/ts-embed.spec.ts +19 -5
- package/src/embed/ts-embed.ts +8 -5
- package/src/errors.ts +2 -0
- package/src/react/index.spec.tsx +4 -2
- package/src/react/index.tsx +3 -2
- package/src/types.ts +17 -0
- package/src/utils.spec.ts +21 -0
- package/src/utils.ts +13 -0
package/lib/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/lib/src/utils.spec.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @jest-environment node
|
|
3
3
|
*/
|
|
4
|
-
import { getQueryParamString, getFilterQuery, getCssDimension, getEncodedQueryParamsString, appendToUrlHash, getRedirectUrl, } from './utils';
|
|
4
|
+
import { getQueryParamString, getFilterQuery, getCssDimension, getEncodedQueryParamsString, appendToUrlHash, getRedirectUrl, checkReleaseVersionInBeta, } from './utils';
|
|
5
5
|
import { RuntimeFilterOp } from './types';
|
|
6
6
|
describe('unit test for utils', () => {
|
|
7
7
|
test('getQueryParamString', () => {
|
|
@@ -71,5 +71,20 @@ describe('unit test for utils', () => {
|
|
|
71
71
|
expect(getEncodedQueryParamsString('')).toBe('');
|
|
72
72
|
expect(getEncodedQueryParamsString('test')).toBe('dGVzdA');
|
|
73
73
|
});
|
|
74
|
+
test('when cluster has dev version', () => {
|
|
75
|
+
expect(checkReleaseVersionInBeta('dev', false)).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
test('when cluster is above 8.3.0.sw software version', () => {
|
|
78
|
+
expect(checkReleaseVersionInBeta('8.8.0.sw', false)).toBe(false);
|
|
79
|
+
});
|
|
80
|
+
test('when cluster is bellow 8.0.0.sw software version', () => {
|
|
81
|
+
expect(checkReleaseVersionInBeta('7.2.1.sw', false)).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
test('when suppressBetaWarning is true and ReleaseVersionBeta is 7.0.1', () => {
|
|
84
|
+
expect(checkReleaseVersionInBeta('7.0.1', true)).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
test('when suppressBetaWarning is false ReleaseVersionBeta is 7.0.1', () => {
|
|
87
|
+
expect(checkReleaseVersionInBeta('7.0.1', false)).toBe(true);
|
|
88
|
+
});
|
|
74
89
|
});
|
|
75
90
|
//# sourceMappingURL=utils.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/utils.spec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../src/utils.spec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACH,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,eAAe,EACf,cAAc,EACd,yBAAyB,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACjC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CACF,mBAAmB,CAAC;YAChB,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,IAAI;SACZ,CAAC,CACL,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzB,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,kCAAkC;QAClC,MAAM,CACF,mBAAmB,CAAC;YAChB,GAAG,EAAE,SAAS;YACd,GAAG,EAAE,KAAK;SACb,CAAC,CACL,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CACF,cAAc,CAAC;YACX;gBACI,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,eAAe,CAAC,EAAE;gBAC5B,MAAM,EAAE,CAAC,KAAK,CAAC;aAClB;SACJ,CAAC,CACL,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG;YACZ;gBACI,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,eAAe,CAAC,EAAE;gBAC5B,MAAM,EAAE,CAAC,EAAE,CAAC;aACf;YACD;gBACI,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,eAAe,CAAC,MAAM;gBAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;aAClB;YACD;gBACI,UAAU,EAAE,KAAK;gBACjB,QAAQ,EAAE,eAAe,CAAC,QAAQ;gBAClC,MAAM,EAAE,CAAC,KAAK,CAAC;aAClB;SACJ,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAChC,2FAA2F,CAC9F,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,eAAe,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAC1D,6BAA6B,CAChC,CAAC;QACF,MAAM,CAAC,eAAe,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CACtD,wBAAwB,CAC3B,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CACzD,6BAA6B,CAChC,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CACrD,wBAAwB,CAC3B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE;gBAC7C,GAAG,EAAE,GAAG,EAAE,CAAC,oBAAoB;aAClC,CAAC,CAAC;YAEH,MAAM,CACF,cAAc,CAAC,qBAAqB,EAAE,UAAU,EAAE,MAAM,CAAC,CAC5D,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAE1C,MAAM,CACF,cAAc,CAAC,0BAA0B,EAAE,UAAU,EAAE,OAAO,CAAC,CAClE,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,yBAAyB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,yBAAyB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -207,7 +207,7 @@ declare module '@thoughtspot/visual-embed-sdk/embed/liveboard' {
|
|
|
207
207
|
* @summary Liveboard & visualization embed
|
|
208
208
|
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
|
|
209
209
|
*/
|
|
210
|
-
import { DOMSelector } from '@thoughtspot/visual-embed-sdk/types';
|
|
210
|
+
import { DOMSelector, HostEvent } from '@thoughtspot/visual-embed-sdk/types';
|
|
211
211
|
import { V1Embed, ViewConfig } from '@thoughtspot/visual-embed-sdk/embed/ts-embed';
|
|
212
212
|
/**
|
|
213
213
|
* The configuration for the embedded Liveboard or visualization page view.
|
|
@@ -278,6 +278,12 @@ declare module '@thoughtspot/visual-embed-sdk/embed/liveboard' {
|
|
|
278
278
|
export class LiveboardEmbed extends V1Embed {
|
|
279
279
|
protected viewConfig: LiveboardViewConfig;
|
|
280
280
|
constructor(domSelector: DOMSelector, viewConfig: LiveboardViewConfig);
|
|
281
|
+
/**
|
|
282
|
+
* Triggers an event to the embedded app
|
|
283
|
+
* @param messageType The event type
|
|
284
|
+
* @param data The payload to send with the message
|
|
285
|
+
*/
|
|
286
|
+
trigger(messageType: HostEvent, data?: any): Promise<any>;
|
|
281
287
|
/**
|
|
282
288
|
* Render an embedded ThoughtSpot Liveboard or visualization
|
|
283
289
|
* @param renderOptions An object specifying the Liveboard ID,
|
|
@@ -339,8 +345,13 @@ declare module '@thoughtspot/visual-embed-sdk/embed/search' {
|
|
|
339
345
|
* using raw answer data.
|
|
340
346
|
*/
|
|
341
347
|
hideResults?: boolean;
|
|
348
|
+
/**
|
|
349
|
+
* If set to true, expands all the data sources panel.
|
|
350
|
+
*/
|
|
351
|
+
expandAllDataSource?: boolean;
|
|
342
352
|
/**
|
|
343
353
|
* If set to true, the Search Assist feature is enabled.
|
|
354
|
+
* @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl
|
|
344
355
|
*/
|
|
345
356
|
enableSearchAssist?: boolean;
|
|
346
357
|
/**
|
|
@@ -391,7 +402,6 @@ declare module '@thoughtspot/visual-embed-sdk/auth' {
|
|
|
391
402
|
export let loggedInStatus: boolean;
|
|
392
403
|
export let samlAuthWindow: Window;
|
|
393
404
|
export let samlCompletionPromise: Promise<void>;
|
|
394
|
-
export let sessionInfo: any;
|
|
395
405
|
export const SSO_REDIRECTION_MARKER_GUID = "5e16222e-ef02-43e9-9fbd-24226bf3ce5b";
|
|
396
406
|
export const EndPoints: {
|
|
397
407
|
AUTH_VERIFICATION: string;
|
|
@@ -412,6 +422,10 @@ declare module '@thoughtspot/visual-embed-sdk/auth' {
|
|
|
412
422
|
SUCCESS = "SUCCESS",
|
|
413
423
|
LOGOUT = "LOGOUT"
|
|
414
424
|
}
|
|
425
|
+
/**
|
|
426
|
+
* Return releaseVersion if available
|
|
427
|
+
*/
|
|
428
|
+
export function getReleaseVersion(): string;
|
|
415
429
|
/**
|
|
416
430
|
* Return sessionInfo if available else make a loggedIn check to fetch the sessionInfo
|
|
417
431
|
*/
|
|
@@ -601,6 +615,12 @@ declare module '@thoughtspot/visual-embed-sdk/types' {
|
|
|
601
615
|
* @version SDK: 1.10.4 | ThoughtSpot: *
|
|
602
616
|
*/
|
|
603
617
|
detectCookieAccessSlow?: boolean;
|
|
618
|
+
/**
|
|
619
|
+
* Hide beta alert warning message for SearchEmbed.
|
|
620
|
+
*
|
|
621
|
+
* @version SDK: 1.12.0 | ThoughtSpot: *
|
|
622
|
+
*/
|
|
623
|
+
suppressSearchEmbedBetaWarning?: boolean;
|
|
604
624
|
}
|
|
605
625
|
/**
|
|
606
626
|
* MessagePayload: Embed event payload: message type, data and status (start/end)
|
|
@@ -1015,7 +1035,14 @@ declare module '@thoughtspot/visual-embed-sdk/types' {
|
|
|
1015
1035
|
* Gets the current pinboard content.
|
|
1016
1036
|
* @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl
|
|
1017
1037
|
*/
|
|
1018
|
-
getExportRequestForCurrentPinboard = "getExportRequestForCurrentPinboard"
|
|
1038
|
+
getExportRequestForCurrentPinboard = "getExportRequestForCurrentPinboard",
|
|
1039
|
+
/**
|
|
1040
|
+
* Fires the pin action on an embedded object
|
|
1041
|
+
* @param - incase of liveboard embed, takes in an object with vizId as a key
|
|
1042
|
+
* can be left empty for search and viz embeds
|
|
1043
|
+
* @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl
|
|
1044
|
+
*/
|
|
1045
|
+
Pin = "pin"
|
|
1019
1046
|
}
|
|
1020
1047
|
/**
|
|
1021
1048
|
* The different visual modes that the data sources panel within
|
|
@@ -1209,7 +1236,11 @@ declare module '@thoughtspot/visual-embed-sdk/types' {
|
|
|
1209
1236
|
/**
|
|
1210
1237
|
* @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl
|
|
1211
1238
|
*/
|
|
1212
|
-
CreateMonitor = "createMonitor"
|
|
1239
|
+
CreateMonitor = "createMonitor",
|
|
1240
|
+
/**
|
|
1241
|
+
* @version SDK: 1.11.1 | ThoughtSpot: 8.3.0.cl
|
|
1242
|
+
*/
|
|
1243
|
+
ReportError = "reportError"
|
|
1213
1244
|
}
|
|
1214
1245
|
export interface SessionInterface {
|
|
1215
1246
|
sessionId: string;
|
|
@@ -1260,7 +1291,7 @@ declare module '@thoughtspot/visual-embed-sdk/embed/ts-embed' {
|
|
|
1260
1291
|
* This parameters will be passed on the iframe
|
|
1261
1292
|
* as is.
|
|
1262
1293
|
*/
|
|
1263
|
-
[key: string]: string | number | boolean;
|
|
1294
|
+
[key: string]: string | number | boolean | undefined;
|
|
1264
1295
|
}
|
|
1265
1296
|
/**
|
|
1266
1297
|
* The configuration object for an embedded view.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thoughtspot/visual-embed-sdk",
|
|
3
|
-
"version": "1.12.0
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "ThoughtSpot Embed SDK",
|
|
5
5
|
"module": "lib/src/index.js",
|
|
6
6
|
"main": "dist/tsembed.js",
|
|
@@ -45,7 +45,9 @@
|
|
|
45
45
|
"algoliasearch": "^4.10.5",
|
|
46
46
|
"classnames": "^2.3.1",
|
|
47
47
|
"eventemitter3": "^4.0.7",
|
|
48
|
-
"
|
|
48
|
+
"html-react-parser": "^1.4.12",
|
|
49
|
+
"mixpanel-browser": "^2.45.0",
|
|
50
|
+
"use-deep-compare-effect": "^1.8.1"
|
|
49
51
|
},
|
|
50
52
|
"devDependencies": {
|
|
51
53
|
"@mdx-js/mdx": "^1.6.22",
|
package/src/auth.spec.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as authInstance from './auth';
|
|
2
2
|
import * as authService from './utils/authService';
|
|
3
|
+
import * as checkReleaseVersionInBetaInstance from './utils';
|
|
3
4
|
import { AuthType, EmbedConfig } from './types';
|
|
4
5
|
import { executeAfterWait } from './test/test-utils';
|
|
5
6
|
|
|
@@ -8,7 +9,7 @@ const username = 'tsuser';
|
|
|
8
9
|
const password = '12345678';
|
|
9
10
|
const samalLoginUrl = `${thoughtSpotHost}/callosum/v1/saml/login?targetURLPath=%235e16222e-ef02-43e9-9fbd-24226bf3ce5b`;
|
|
10
11
|
|
|
11
|
-
const embedConfig: any = {
|
|
12
|
+
export const embedConfig: any = {
|
|
12
13
|
doTokenAuthSuccess: (token: string) => ({
|
|
13
14
|
thoughtSpotHost,
|
|
14
15
|
username,
|
|
@@ -242,6 +243,10 @@ describe('Unit test for auth', () => {
|
|
|
242
243
|
});
|
|
243
244
|
|
|
244
245
|
it('when user is loggedIn', async () => {
|
|
246
|
+
spyOn(
|
|
247
|
+
checkReleaseVersionInBetaInstance,
|
|
248
|
+
'checkReleaseVersionInBeta',
|
|
249
|
+
);
|
|
245
250
|
jest.spyOn(
|
|
246
251
|
authService,
|
|
247
252
|
'fetchSessionInfoService',
|
|
@@ -280,6 +285,10 @@ describe('Unit test for auth', () => {
|
|
|
280
285
|
});
|
|
281
286
|
|
|
282
287
|
it('when user is loggedIn & isAtSSORedirectUrl is true', async () => {
|
|
288
|
+
spyOn(
|
|
289
|
+
checkReleaseVersionInBetaInstance,
|
|
290
|
+
'checkReleaseVersionInBeta',
|
|
291
|
+
);
|
|
283
292
|
Object.defineProperty(window, 'location', {
|
|
284
293
|
value: {
|
|
285
294
|
href: authInstance.SSO_REDIRECTION_MARKER_GUID,
|
package/src/auth.ts
CHANGED
|
@@ -16,8 +16,8 @@ export let loggedInStatus = false;
|
|
|
16
16
|
export let samlAuthWindow: Window = null;
|
|
17
17
|
// eslint-disable-next-line import/no-mutable-exports
|
|
18
18
|
export let samlCompletionPromise: Promise<void> = null;
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
let sessionInfo: any = null;
|
|
20
|
+
let releaseVersion = '';
|
|
21
21
|
|
|
22
22
|
export const SSO_REDIRECTION_MARKER_GUID =
|
|
23
23
|
'5e16222e-ef02-43e9-9fbd-24226bf3ce5b';
|
|
@@ -55,12 +55,21 @@ async function isLoggedIn(thoughtSpotHost: string): Promise<boolean> {
|
|
|
55
55
|
let response = null;
|
|
56
56
|
try {
|
|
57
57
|
response = await fetchSessionInfoService(authVerificationUrl);
|
|
58
|
+
const sessionInfoResp = await response.json();
|
|
59
|
+
releaseVersion = sessionInfoResp.releaseVersion;
|
|
58
60
|
} catch (e) {
|
|
59
61
|
return false;
|
|
60
62
|
}
|
|
61
63
|
return response.status === 200;
|
|
62
64
|
}
|
|
63
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Return releaseVersion if available
|
|
68
|
+
*/
|
|
69
|
+
export function getReleaseVersion() {
|
|
70
|
+
return releaseVersion;
|
|
71
|
+
}
|
|
72
|
+
|
|
64
73
|
/**
|
|
65
74
|
* Return sessionInfo if available else make a loggedIn check to fetch the sessionInfo
|
|
66
75
|
*/
|
package/src/embed/app.spec.ts
CHANGED
|
@@ -19,8 +19,9 @@ const defaultViewConfig = {
|
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
21
|
const thoughtSpotHost = 'tshost';
|
|
22
|
-
const
|
|
23
|
-
const
|
|
22
|
+
const defaultParamsWithoutHiddenActions = `&hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}`;
|
|
23
|
+
const defaultParams = `${defaultParamsWithoutHiddenActions}&hideAction=[%22${Action.ReportError}%22]`;
|
|
24
|
+
const defaultParamsForPinboardEmbed = `hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}&hideAction=[%22${Action.ReportError}%22]`;
|
|
24
25
|
const defaultParamsPost = '&isPinboardV2Enabled=false';
|
|
25
26
|
|
|
26
27
|
beforeAll(() => {
|
|
@@ -155,7 +156,7 @@ describe('App embed tests', () => {
|
|
|
155
156
|
appEmbed.render();
|
|
156
157
|
await executeAfterWait(() => {
|
|
157
158
|
expect(getIFrameSrc()).toBe(
|
|
158
|
-
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=false&profileAndHelpInNavBarHidden=false${
|
|
159
|
+
`http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=false&profileAndHelpInNavBarHidden=false${defaultParamsWithoutHiddenActions}&disableAction=[%22save%22,%22update%22]&disableHint=Access%20denied&hideAction=[%22${Action.ReportError}%22,%22download%22]${defaultParamsPost}#/home`,
|
|
159
160
|
);
|
|
160
161
|
});
|
|
161
162
|
});
|
package/src/embed/embed.spec.ts
CHANGED
|
@@ -20,6 +20,7 @@ beforeAll(() => {
|
|
|
20
20
|
thoughtSpotHost,
|
|
21
21
|
authType: AuthType.None,
|
|
22
22
|
});
|
|
23
|
+
spyOn(window, 'alert');
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
describe('test view config', () => {
|
|
@@ -48,6 +49,7 @@ describe('test view config', () => {
|
|
|
48
49
|
});
|
|
49
50
|
|
|
50
51
|
test('trying to register event handler after render should throw error', async () => {
|
|
52
|
+
spyOn(console, 'error');
|
|
51
53
|
const onErrorSpy = jest.fn();
|
|
52
54
|
const searchEmbed = new SearchEmbed(getRootEl(), defaultViewConfig);
|
|
53
55
|
searchEmbed
|
package/src/embed/events.spec.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { LiveboardEmbed, LiveboardViewConfig } from './liveboard';
|
|
2
2
|
import { init } from '../index';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
Action,
|
|
5
|
+
AuthType,
|
|
6
|
+
EmbedEvent,
|
|
7
|
+
HostEvent,
|
|
8
|
+
RuntimeFilterOp,
|
|
9
|
+
} from '../types';
|
|
4
10
|
import {
|
|
5
11
|
executeAfterWait,
|
|
6
12
|
getDocumentBody,
|
|
@@ -8,6 +14,7 @@ import {
|
|
|
8
14
|
getRootEl,
|
|
9
15
|
} from '../test/test-utils';
|
|
10
16
|
import { version } from '../../package.json';
|
|
17
|
+
import * as processTriggerInstance from '../utils/processTrigger';
|
|
11
18
|
|
|
12
19
|
const defaultViewConfig = {
|
|
13
20
|
frameParams: {
|
|
@@ -18,7 +25,8 @@ const defaultViewConfig = {
|
|
|
18
25
|
const liveboardId = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
|
|
19
26
|
const vizId = '6e73f724-660e-11eb-ae93-0242ac130002';
|
|
20
27
|
const thoughtSpotHost = 'tshost';
|
|
21
|
-
const
|
|
28
|
+
const defaultParamsSansHideAction = `&hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}`;
|
|
29
|
+
const defaultParams = `${defaultParamsSansHideAction}&hideAction=[%22${Action.ReportError}%22]`;
|
|
22
30
|
const prefixParams = '&isLiveboardEmbed=true&isPinboardV2Enabled=false';
|
|
23
31
|
|
|
24
32
|
beforeAll(() => {
|
|
@@ -60,7 +68,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
60
68
|
liveboardEmbed.render();
|
|
61
69
|
await executeAfterWait(() => {
|
|
62
70
|
expect(getIFrameSrc()).toBe(
|
|
63
|
-
`http://${thoughtSpotHost}/?embedApp=true${
|
|
71
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParamsSansHideAction}&disableAction=[%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]&disableHint=Action%20denied&hideAction=[%22${Action.ReportError}%22]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
64
72
|
);
|
|
65
73
|
});
|
|
66
74
|
});
|
|
@@ -78,7 +86,7 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
78
86
|
liveboardEmbed.render();
|
|
79
87
|
await executeAfterWait(() => {
|
|
80
88
|
expect(getIFrameSrc()).toBe(
|
|
81
|
-
`http://${thoughtSpotHost}/?embedApp=true${
|
|
89
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParamsSansHideAction}&hideAction=[%22${Action.ReportError}%22,%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${liveboardId}`,
|
|
82
90
|
);
|
|
83
91
|
});
|
|
84
92
|
});
|
|
@@ -209,4 +217,19 @@ describe('Liveboard/viz embed tests', () => {
|
|
|
209
217
|
);
|
|
210
218
|
});
|
|
211
219
|
});
|
|
220
|
+
test('should process the trigger, for vizEmbed', async () => {
|
|
221
|
+
const mockProcessTrigger = spyOn(
|
|
222
|
+
processTriggerInstance,
|
|
223
|
+
'processTrigger',
|
|
224
|
+
);
|
|
225
|
+
const liveboardEmbed = new LiveboardEmbed(getRootEl(), {
|
|
226
|
+
enableVizTransformations: true,
|
|
227
|
+
...defaultViewConfig,
|
|
228
|
+
vizId: '1234',
|
|
229
|
+
liveboardId,
|
|
230
|
+
} as LiveboardViewConfig);
|
|
231
|
+
liveboardEmbed.render();
|
|
232
|
+
const result = await liveboardEmbed.trigger(HostEvent.Pin);
|
|
233
|
+
expect(mockProcessTrigger).toBeCalled();
|
|
234
|
+
});
|
|
212
235
|
});
|
package/src/embed/liveboard.ts
CHANGED
|
@@ -194,6 +194,19 @@ export class LiveboardEmbed extends V1Embed {
|
|
|
194
194
|
}
|
|
195
195
|
};
|
|
196
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Triggers an event to the embedded app
|
|
199
|
+
* @param messageType The event type
|
|
200
|
+
* @param data The payload to send with the message
|
|
201
|
+
*/
|
|
202
|
+
public trigger(messageType: HostEvent, data: any = {}): Promise<any> {
|
|
203
|
+
const dataWithVizId = data;
|
|
204
|
+
if (this.viewConfig.vizId) {
|
|
205
|
+
dataWithVizId.vizId = this.viewConfig.vizId;
|
|
206
|
+
}
|
|
207
|
+
return super.trigger(messageType, dataWithVizId);
|
|
208
|
+
}
|
|
209
|
+
|
|
197
210
|
/**
|
|
198
211
|
* Render an embedded ThoughtSpot Liveboard or visualization
|
|
199
212
|
* @param renderOptions An object specifying the Liveboard ID,
|
|
@@ -18,7 +18,8 @@ const defaultViewConfig = {
|
|
|
18
18
|
const pinboardId = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
|
|
19
19
|
const vizId = '6e73f724-660e-11eb-ae93-0242ac130002';
|
|
20
20
|
const thoughtSpotHost = 'tshost';
|
|
21
|
-
const
|
|
21
|
+
const defaultParamsWithoutHideActions = `&hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}`;
|
|
22
|
+
const defaultParams = `${defaultParamsWithoutHideActions}&hideAction=[%22${Action.ReportError}%22]`;
|
|
22
23
|
const prefixParams = '&isLiveboardEmbed=true&isPinboardV2Enabled=false';
|
|
23
24
|
|
|
24
25
|
beforeAll(() => {
|
|
@@ -60,7 +61,7 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
60
61
|
pinboardEmbed.render();
|
|
61
62
|
await executeAfterWait(() => {
|
|
62
63
|
expect(getIFrameSrc()).toBe(
|
|
63
|
-
`http://${thoughtSpotHost}/?embedApp=true${
|
|
64
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParamsWithoutHideActions}&disableAction=[%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]&disableHint=Action%20denied&hideAction=[%22${Action.ReportError}%22]${prefixParams}#/embed/viz/${pinboardId}`,
|
|
64
65
|
);
|
|
65
66
|
});
|
|
66
67
|
});
|
|
@@ -78,7 +79,7 @@ describe('Pinboard/viz embed tests', () => {
|
|
|
78
79
|
pinboardEmbed.render();
|
|
79
80
|
await executeAfterWait(() => {
|
|
80
81
|
expect(getIFrameSrc()).toBe(
|
|
81
|
-
`http://${thoughtSpotHost}/?embedApp=true${
|
|
82
|
+
`http://${thoughtSpotHost}/?embedApp=true${defaultParamsWithoutHideActions}&hideAction=[%22${Action.ReportError}%22,%22${Action.DownloadAsCsv}%22,%22${Action.DownloadAsPdf}%22,%22${Action.DownloadAsXlsx}%22]${prefixParams}#/embed/viz/${pinboardId}`,
|
|
82
83
|
);
|
|
83
84
|
});
|
|
84
85
|
});
|
package/src/embed/search.spec.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SearchEmbed, HiddenActionItemByDefaultForSearchEmbed } from './search';
|
|
2
|
+
import * as authInstance from '../auth';
|
|
2
3
|
import { init } from '../index';
|
|
3
4
|
import { Action, AuthType } from '../types';
|
|
4
5
|
import {
|
|
@@ -20,7 +21,10 @@ const answerId = 'eca215d4-0d2c-4a55-90e3-d81ef6848ae0';
|
|
|
20
21
|
const thoughtSpotHost = 'tshost';
|
|
21
22
|
const defaultParams = `hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${version}`;
|
|
22
23
|
const hideBydefault = `&hideAction=${fixedEncodeURI(
|
|
23
|
-
JSON.stringify(
|
|
24
|
+
JSON.stringify([
|
|
25
|
+
Action.ReportError,
|
|
26
|
+
...HiddenActionItemByDefaultForSearchEmbed,
|
|
27
|
+
]),
|
|
24
28
|
)}`;
|
|
25
29
|
const defaultParamsWithHiddenActions = defaultParams + hideBydefault;
|
|
26
30
|
const prefixParams = '&isSearchEmbed=true';
|
|
@@ -30,11 +34,15 @@ beforeAll(() => {
|
|
|
30
34
|
thoughtSpotHost,
|
|
31
35
|
authType: AuthType.None,
|
|
32
36
|
});
|
|
37
|
+
spyOn(window, 'alert');
|
|
33
38
|
});
|
|
34
39
|
|
|
35
40
|
describe('Search embed tests', () => {
|
|
36
41
|
beforeEach(() => {
|
|
37
42
|
document.body.innerHTML = getDocumentBody();
|
|
43
|
+
jest.spyOn(authInstance, 'getReleaseVersion').mockReturnValue(
|
|
44
|
+
'7.4.0.sw',
|
|
45
|
+
);
|
|
38
46
|
});
|
|
39
47
|
|
|
40
48
|
test('should render', async () => {
|
|
@@ -197,6 +205,7 @@ describe('Search embed tests', () => {
|
|
|
197
205
|
searchEmbed.render();
|
|
198
206
|
const hideActionUrl = fixedEncodeURI(
|
|
199
207
|
JSON.stringify([
|
|
208
|
+
Action.ReportError,
|
|
200
209
|
...hiddenActionsForSearch,
|
|
201
210
|
...HiddenActionItemByDefaultForSearchEmbed,
|
|
202
211
|
]),
|
|
@@ -220,6 +229,7 @@ describe('Search embed tests', () => {
|
|
|
220
229
|
searchEmbed.render();
|
|
221
230
|
const hideActionUrl = fixedEncodeURI(
|
|
222
231
|
JSON.stringify([
|
|
232
|
+
Action.ReportError,
|
|
223
233
|
...hiddenActionsForSearch,
|
|
224
234
|
...HiddenActionItemByDefaultForSearchEmbed,
|
|
225
235
|
]),
|
package/src/embed/search.ts
CHANGED
|
@@ -8,9 +8,12 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { DataSourceVisualMode, DOMSelector, Param, Action } from '../types';
|
|
11
|
-
import { getQueryParamString } from '../utils';
|
|
11
|
+
import { getQueryParamString, checkReleaseVersionInBeta } from '../utils';
|
|
12
12
|
import { ViewConfig, TsEmbed } from './ts-embed';
|
|
13
13
|
import { version } from '../../package.json';
|
|
14
|
+
import { ERROR_MESSAGE } from '../errors';
|
|
15
|
+
import { getAuthPromise, getEmbedConfig } from './base';
|
|
16
|
+
import { getReleaseVersion } from '../auth';
|
|
14
17
|
|
|
15
18
|
/**
|
|
16
19
|
* Configuration for search options
|
|
@@ -49,8 +52,13 @@ export interface SearchViewConfig extends ViewConfig {
|
|
|
49
52
|
* using raw answer data.
|
|
50
53
|
*/
|
|
51
54
|
hideResults?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* If set to true, expands all the data sources panel.
|
|
57
|
+
*/
|
|
58
|
+
expandAllDataSource?: boolean;
|
|
52
59
|
/**
|
|
53
60
|
* If set to true, the Search Assist feature is enabled.
|
|
61
|
+
* @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl
|
|
54
62
|
*/
|
|
55
63
|
enableSearchAssist?: boolean;
|
|
56
64
|
/**
|
|
@@ -126,6 +134,7 @@ export class SearchEmbed extends TsEmbed {
|
|
|
126
134
|
private getIFrameSrc(answerId: string, dataSources?: string[]) {
|
|
127
135
|
const {
|
|
128
136
|
hideResults,
|
|
137
|
+
expandAllDataSource,
|
|
129
138
|
enableSearchAssist,
|
|
130
139
|
forceTable,
|
|
131
140
|
searchOptions,
|
|
@@ -184,6 +193,16 @@ export class SearchEmbed extends TsEmbed {
|
|
|
184
193
|
|
|
185
194
|
const src = this.getIFrameSrc(answerId, dataSources);
|
|
186
195
|
this.renderIFrame(src, this.viewConfig.frameParams);
|
|
196
|
+
getAuthPromise().then(() => {
|
|
197
|
+
if (
|
|
198
|
+
checkReleaseVersionInBeta(
|
|
199
|
+
getReleaseVersion(),
|
|
200
|
+
getEmbedConfig().suppressSearchEmbedBetaWarning,
|
|
201
|
+
)
|
|
202
|
+
) {
|
|
203
|
+
alert(ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
187
206
|
return this;
|
|
188
207
|
}
|
|
189
208
|
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { SearchEmbed } from './search';
|
|
2
|
+
import * as baseInstance from './base';
|
|
3
|
+
import * as authService from '../utils/authService';
|
|
4
|
+
import * as authInstance from '../auth';
|
|
5
|
+
import * as config from '../config';
|
|
6
|
+
|
|
7
|
+
import { init } from '../index';
|
|
8
|
+
import { AuthType } from '../types';
|
|
9
|
+
import { getDocumentBody, getRootEl } from '../test/test-utils';
|
|
10
|
+
import { mockSessionInfo } from '../auth.spec';
|
|
11
|
+
import { ERROR_MESSAGE } from '../errors';
|
|
12
|
+
|
|
13
|
+
const thoughtSpotHost = 'tshost';
|
|
14
|
+
init({
|
|
15
|
+
thoughtSpotHost,
|
|
16
|
+
authType: AuthType.Basic,
|
|
17
|
+
username: 'tsadmin',
|
|
18
|
+
password: 'admin',
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
describe('Search embed tests when authType is Basic', () => {
|
|
22
|
+
function setupVersion(version: string) {
|
|
23
|
+
jest.spyOn(window, 'addEventListener').mockImplementationOnce(
|
|
24
|
+
(event, handler, options) => {
|
|
25
|
+
handler({
|
|
26
|
+
data: {
|
|
27
|
+
type: 'xyz',
|
|
28
|
+
},
|
|
29
|
+
ports: [3000],
|
|
30
|
+
source: null,
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
);
|
|
34
|
+
jest.spyOn(authService, 'fetchSessionInfoService').mockImplementation(
|
|
35
|
+
async () => ({
|
|
36
|
+
json: () => ({
|
|
37
|
+
...mockSessionInfo,
|
|
38
|
+
releaseVersion: version,
|
|
39
|
+
}),
|
|
40
|
+
status: 200,
|
|
41
|
+
}),
|
|
42
|
+
);
|
|
43
|
+
jest.spyOn(authInstance, 'getReleaseVersion').mockReturnValue(version);
|
|
44
|
+
}
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
document.body.innerHTML = getDocumentBody();
|
|
47
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValue(true);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
jest.clearAllMocks();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('when releaseVersion is bellow 8.4.0.sw', async () => {
|
|
55
|
+
setupVersion('8.0.0.sw');
|
|
56
|
+
const mockAlert = jest.spyOn(window, 'alert');
|
|
57
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {});
|
|
58
|
+
await searchEmbed.render();
|
|
59
|
+
expect(mockAlert).toBeCalledWith(
|
|
60
|
+
ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE,
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test('when releaseVersion is above 8.4.0.sw', async () => {
|
|
65
|
+
setupVersion('8.4.0.sw');
|
|
66
|
+
const mockAlert = jest.spyOn(window, 'alert');
|
|
67
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {});
|
|
68
|
+
await searchEmbed.render();
|
|
69
|
+
expect(mockAlert).not.toBeCalled();
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('releaseVersion is above 8.4.0.sw', async () => {
|
|
73
|
+
setupVersion('8.8.0.sw');
|
|
74
|
+
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(
|
|
75
|
+
() => 'http://tshost',
|
|
76
|
+
);
|
|
77
|
+
const mockAlert = jest.spyOn(window, 'alert');
|
|
78
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {});
|
|
79
|
+
await searchEmbed.render();
|
|
80
|
+
expect(mockAlert).not.toBeCalled();
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('Alert should not appear when suppressSearchEmbedBetaWarning is true and releaseVersion is ts7.dec.cl', async () => {
|
|
84
|
+
setupVersion('ts7.dec.cl');
|
|
85
|
+
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(
|
|
86
|
+
() => 'http://tshost',
|
|
87
|
+
);
|
|
88
|
+
jest.spyOn(baseInstance, 'getEmbedConfig').mockReturnValue({
|
|
89
|
+
suppressSearchEmbedBetaWarning: true,
|
|
90
|
+
});
|
|
91
|
+
const mockAlert = jest.spyOn(window, 'alert');
|
|
92
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {});
|
|
93
|
+
await searchEmbed.render();
|
|
94
|
+
expect(mockAlert).not.toBeCalled();
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test('Alert should not appear when suppressSearchEmbedBetaWarning is true and releaseVersion is 8.4.0.sw', async () => {
|
|
98
|
+
setupVersion('8.4.0.sw');
|
|
99
|
+
jest.spyOn(config, 'getThoughtSpotHost').mockImplementation(
|
|
100
|
+
() => 'http://tshost',
|
|
101
|
+
);
|
|
102
|
+
jest.spyOn(baseInstance, 'getEmbedConfig').mockReturnValue({
|
|
103
|
+
suppressSearchEmbedBetaWarning: true,
|
|
104
|
+
});
|
|
105
|
+
const mockAlert = jest.spyOn(window, 'alert');
|
|
106
|
+
const searchEmbed = new SearchEmbed(getRootEl(), {});
|
|
107
|
+
await searchEmbed.render();
|
|
108
|
+
expect(mockAlert).not.toBeCalled();
|
|
109
|
+
});
|
|
110
|
+
});
|