UNPKG

@thoughtspot/visual-embed-sdk

Version:
159 lines 6.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mockSessionInfo = exports.getHashQueryParams = exports.createRootEleForEmbed = exports.expectUrlMatch = exports.expectUrlToHaveParamsWithValues = exports.expectUrlMatchesWithParams = exports.mockMessageChannel = exports.messageChannelMock = exports.fixedEncodeURI = exports.EVENT_WAIT_TIME = exports.executeAfterWait = exports.postMessageToParent = exports.waitFor = exports.getIFrameSrc = exports.getAllIframeEl = exports.getIFrameEl = exports.getRootEl2 = exports.getRootEl = exports.getDocumentBody = exports.defaultParamsForPinboardEmbed = exports.defaultParams = exports.defaultParamsWithoutHiddenActions = void 0; const lodash_1 = require("lodash"); const package_json_1 = require("../../package.json"); const types_1 = require("../types"); /** Initialises fetch to the global object */ if (!global.fetch.mockResponse) { console.log('mocking fetch'); global.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve({ mixpanelAccessToken: '' }), })); } exports.defaultParamsWithoutHiddenActions = `hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${package_json_1.version}&authType=${types_1.AuthType.None}&blockNonEmbedFullAppAccess=true`; exports.defaultParams = `&${exports.defaultParamsWithoutHiddenActions}&hideAction=[%22${types_1.Action.ReportError}%22]`; exports.defaultParamsForPinboardEmbed = `hostAppUrl=local-host&viewPortHeight=768&viewPortWidth=1024&sdkVersion=${package_json_1.version}&authType=None&blockNonEmbedFullAppAccess=true&hideAction=[%22${types_1.Action.ReportError}%22]`; const getDocumentBody = () => '<div id="embed"></div><div id="embed-2"></div>'; exports.getDocumentBody = getDocumentBody; const getRootEl = () => document.getElementById('embed'); exports.getRootEl = getRootEl; const getRootEl2 = () => document.getElementById('embed-2'); exports.getRootEl2 = getRootEl2; const getIFrameEl = (container = document) => container.querySelector('iframe'); exports.getIFrameEl = getIFrameEl; const getAllIframeEl = () => document.querySelectorAll('iframe'); exports.getAllIframeEl = getAllIframeEl; const getIFrameSrc = (container = document) => (0, exports.getIFrameEl)(container).src; exports.getIFrameSrc = getIFrameSrc; const waitFor = (fn) => new Promise((resolve) => { const interval = setInterval(() => { const value = fn(); if (value) { clearInterval(interval); resolve(); } }, 100); }); exports.waitFor = waitFor; /** * jsdom does not set event source, therefore we do it * programmatically and use dispatchEvent instead of the * postMessage API * Reference: https://github.com/jsdom/jsdom/issues/2745 * @param window * @param data * @param port */ const postMessageToParent = (window, data, port) => { const message = new MessageEvent('message', { data, source: window, ports: [port], }); window.parent.dispatchEvent(message); }; exports.postMessageToParent = postMessageToParent; /** * Execute a given function after a certain time has elapsed * @param fn The function to be executed after the wait period * @param waitTime The wait period in milliseconds */ const executeAfterWait = (fn, waitTime = 0) => new Promise((resolve, reject) => { setTimeout(() => { const value = fn(); resolve(value); }, waitTime); }); exports.executeAfterWait = executeAfterWait; /** * Time (in milliseconds) to wait for async events to be triggered */ exports.EVENT_WAIT_TIME = 1000; /** * * @param str */ function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); } exports.fixedEncodeURI = fixedEncodeURI; /** * MessageChannel is available in Node > 15.0.0. Since the current node * environment's used for github actions is not above 14, we are mocking this * for the current unit tests. */ exports.messageChannelMock = { port1: {}, port2: {}, }; const mockMessageChannel = () => { exports.messageChannelMock.port1.close = jest.fn(); exports.messageChannelMock.port2.onmessage = jest.fn(); window.MessageChannel = function MessageChannelMock() { return exports.messageChannelMock; }; }; exports.mockMessageChannel = mockMessageChannel; const expectUrlMatchesWithParams = (source, target) => { const sourceUrl = new URL(source); const targetUrl = new URL(target); expect(sourceUrl.origin).toBe(targetUrl.origin); expect(sourceUrl.pathname).toBe(targetUrl.pathname); const sourceParamsObj = Object.fromEntries(sourceUrl.searchParams); const targetParamsObj = Object.fromEntries(targetUrl.searchParams); expect(sourceParamsObj).toMatchObject(targetParamsObj); const sourceHashParams = (0, exports.getHashQueryParams)(sourceUrl.hash); const targetHashParams = (0, exports.getHashQueryParams)(targetUrl.hash); expect(sourceHashParams).toMatchObject(targetHashParams); }; exports.expectUrlMatchesWithParams = expectUrlMatchesWithParams; const expectUrlToHaveParamsWithValues = (url, paramsWithValues) => { const urlObj = new URL(url); const urlParams = Object.fromEntries(urlObj.searchParams); const sourceHashParams = (0, exports.getHashQueryParams)(urlObj.hash); const sourceParams = { ...urlParams, ...sourceHashParams, }; Object.entries(paramsWithValues).forEach(([key, value]) => { expect((0, lodash_1.has)(sourceParams, key)).toBeTruthy(); expect(`${sourceParams[key]}`).toBe(`${value}`); }); }; exports.expectUrlToHaveParamsWithValues = expectUrlToHaveParamsWithValues; const expectUrlMatch = (source, target) => { (0, exports.expectUrlMatchesWithParams)(source, target); const sourceUrl = new URL(source); const targetUrl = new URL(target); expect(sourceUrl.hash).toBe(targetUrl.hash); }; exports.expectUrlMatch = expectUrlMatch; const createRootEleForEmbed = () => { const rootEle = document.createElement('div'); rootEle.id = 'myRoot'; const tsEmbedDiv = document.createElement('div'); tsEmbedDiv.id = 'tsEmbedDiv'; rootEle.appendChild(tsEmbedDiv); document.body.appendChild(rootEle); }; exports.createRootEleForEmbed = createRootEleForEmbed; const getHashQueryParams = (hash) => { const params = hash.split('?')[1]; const hashParams = new URLSearchParams(params); return Object.fromEntries(hashParams); }; exports.getHashQueryParams = getHashQueryParams; exports.mockSessionInfo = { userGUID: '1234', mixpanelToken: 'abc123', isPublicUser: false, sessionId: '6588e7d9-710c-453e-a7b4-535fb3a8cbb2', genNo: 3, acSession: { sessionId: 'cb202c48-b14b-4466-8a70-899ea666d46q', genNo: 5, }, }; //# sourceMappingURL=test-utils.js.map