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