import axios from 'axios'; import BridgeFunction from '../../model/bridge/bridgeFunction'; import Request from '../../model/bridge/request'; import { MiniAppCBType } from '../../model/miniAppApi'; import { MiniAppError, MiniAppErrorType } from '../../model/miniAppError'; import * as miniAppRequest from '../../model/miniAppRequest'; import { BridgeCallbackHandlerMock } from './bridgeCallbackHandlerMock.test'; jest.mock('./../../model/miniAppRequest'); let call: BridgeFunction; let cbHandler: BridgeCallbackHandlerMock; beforeAll(() => { window.open = jest.fn(); call = new Request(); cbHandler = new BridgeCallbackHandlerMock(); call.cbHandler = cbHandler; }); afterEach(() => { cbHandler.messages.length = 0; }); test('Request - not white list domain error', async () => { await call.execute({ url: 'http://example.com/path/index.html' }, [ 'eats.uber.com', ]); expect(cbHandler.messages.length).toBe(2); expect(cbHandler.messages[0]).toStrictEqual({ type: MiniAppCBType.fail, payload: new MiniAppError(MiniAppErrorType.whiteListError), }); expect(cbHandler.messages[1]).toStrictEqual({ type: MiniAppCBType.complete }); }); test('Request - invalidResponse error', async () => { jest .spyOn(miniAppRequest, 'getRequest') .mockReturnValue(Promise.resolve(axios({}))); await call.execute({ url: 'http://eats.uber.com/path/index.html' }, [ 'eats.uber.com', ]); expect(cbHandler.messages.length).toBe(2); expect(cbHandler.messages[0]).toStrictEqual({ type: MiniAppCBType.fail, payload: new MiniAppError(MiniAppErrorType.invalidResponse), }); expect(cbHandler.messages[1]).toStrictEqual({ type: MiniAppCBType.complete }); }); test('Request - success', async () => { jest.spyOn(miniAppRequest, 'getRequest').mockReturnValue( Promise.resolve({ data: {}, status: 200, statusText: '', headers: '', config: {}, }) ); await call.execute({ url: 'http://eats.uber.com/path/index.html' }, [ 'eats.uber.com', ]); expect(cbHandler.messages.length).toBe(2); expect(cbHandler.messages[0]).toStrictEqual({ type: MiniAppCBType.success, payload: { data: '{}', statusCode: 200, }, }); expect(cbHandler.messages[1]).toStrictEqual({ type: MiniAppCBType.complete }); });