Files
nebula.js/commands/serve/web/hooks/__tests__/useOpenApp.test.js
Tobias Åström 48736a8684 chore: update enigma (#1169)
* chore: update enigma

* chore: update schemas as well
2023-03-21 14:53:25 +01:00

154 lines
5.0 KiB
JavaScript

import { renderHook, act } from '@testing-library/react';
import * as ENIGMA from 'enigma.js';
import * as SenseUtilities from 'enigma.js/sense-utilities';
import qixSchema from 'enigma.js/schemas/12.1657.0.json';
import { useOpenApp } from '../useOpenApp';
import * as getAuthInstanceModule from '../../connect';
jest.mock('enigma.js');
jest.mock('enigma.js/sense-utilities');
describe('useOpenApp()', () => {
let renderResult;
let app;
let info;
let buildUrlMock;
let enigmaOpenDocMock;
let enigmaOpenMock;
let enigmaCreateMock;
let getAuthInstanceMock;
let generateWebsocketUrlMock;
let clientId;
let webIntegrationId;
let host;
let appId;
let windowFetchSpy;
beforeEach(() => {
host = 'some.host.in.eu.qlikdev.com';
clientId = 'xxx__client_id__xxx';
webIntegrationId = 'xxx__web_integration_id__xxx';
appId = 'SOME_APP_ID';
info = {};
buildUrlMock = jest.fn().mockReturnValue('ws://someGeneratedUrl:withPort');
jest.spyOn(SenseUtilities, 'buildUrl').mockImplementation(buildUrlMock);
enigmaOpenDocMock = jest.fn().mockReturnValue();
enigmaOpenMock = jest.fn().mockReturnValue({
openDoc: enigmaOpenDocMock,
});
enigmaCreateMock = jest.fn().mockReturnValue({
open: enigmaOpenMock,
});
jest.spyOn(ENIGMA, 'create').mockImplementation(enigmaCreateMock);
generateWebsocketUrlMock = jest
.fn()
.mockResolvedValue(
`wss://${host}/app=${appId}&qlik-csrf-token=SOME_CSRF_TOKEN&qlik-web-integration-id=${webIntegrationId}`
);
getAuthInstanceMock = jest.fn().mockResolvedValue({
generateWebsocketUrl: generateWebsocketUrlMock,
});
jest.spyOn(getAuthInstanceModule, 'getAuthInstance').mockImplementation(getAuthInstanceMock);
windowFetchSpy = jest.spyOn(window, 'fetch');
});
afterEach(() => {
jest.restoreAllMocks();
jest.resetAllMocks();
});
test('should not try to open app if there was no info', async () => {
app = { isLocalApp: true };
enigmaOpenDocMock.mockReturnValue(app);
await act(async () => {
renderResult = renderHook(() => useOpenApp({ info: null }));
});
expect(enigmaCreateMock).not.toBeCalled();
expect(enigmaOpenMock).not.toBeCalled();
expect(enigmaOpenDocMock).not.toBeCalled();
});
test('should return expected result from hook when tring to connect with localhost', async () => {
app = { isLocalApp: true };
enigmaOpenDocMock.mockReturnValue(app);
info = {
enigma: {
appId: 'someAppID',
},
};
await act(async () => {
renderResult = renderHook(() => useOpenApp({ info }));
});
expect(enigmaCreateMock).toHaveBeenCalledTimes(1);
expect(enigmaCreateMock).toHaveBeenCalledWith({ schema: qixSchema, url: 'ws://someGeneratedUrl:withPort' });
expect(enigmaOpenMock).toHaveBeenCalledTimes(1);
expect(enigmaOpenDocMock).toHaveBeenCalledTimes(1);
expect(enigmaOpenDocMock).toHaveBeenCalledWith(info.enigma.appId);
expect(renderResult.result.current).toEqual({
waiting: false,
setApp: expect.any(Function),
app,
});
});
test('should return expected result from hook when tring to connect with web integration id', async () => {
app = { isSDEwithIntegrationId: true };
enigmaOpenDocMock.mockReturnValue(app);
info = { webIntegrationId, enigma: { appId, host } };
await act(async () => {
renderResult = renderHook(() => useOpenApp({ info }));
});
expect(enigmaCreateMock).toHaveBeenCalledTimes(1);
expect(enigmaCreateMock).toHaveBeenCalledWith({
schema: qixSchema,
url: `wss://${host}/app=${appId}&qlik-csrf-token=SOME_CSRF_TOKEN&qlik-web-integration-id=${webIntegrationId}`,
});
expect(enigmaOpenMock).toHaveBeenCalledTimes(1);
expect(enigmaOpenDocMock).toHaveBeenCalledTimes(1);
expect(enigmaOpenDocMock).toHaveBeenCalledWith(info.enigma.appId);
expect(renderResult.result.current).toEqual({
waiting: false,
setApp: expect.any(Function),
app,
});
});
test('should return expected result from hook when tring to connect with client id', async () => {
const webSocketUrl = `wss://${host}/app=${appId}&qlik-csrf-token=SOME_CSRF_TOKEN&qlik-client-id=${clientId}`;
windowFetchSpy.mockResolvedValue({
ok: true,
json: async () => ({ webSocketUrl }),
});
app = { isSDEwithClientId: true };
enigmaOpenDocMock.mockReturnValue(app);
info = { clientId, enigma: { appId, host } };
await act(async () => {
renderResult = renderHook(() => useOpenApp({ info }));
});
expect(enigmaCreateMock).toHaveBeenCalledTimes(1);
expect(enigmaCreateMock).toHaveBeenCalledWith({
schema: qixSchema,
url: webSocketUrl,
});
expect(enigmaOpenMock).toHaveBeenCalledTimes(1);
expect(enigmaOpenDocMock).toHaveBeenCalledTimes(1);
expect(enigmaOpenDocMock).toHaveBeenCalledWith(info.enigma.appId);
expect(renderResult.result.current).toEqual({
waiting: false,
setApp: expect.any(Function),
app,
});
});
});