import * as api from '../../factory/api'; import BridgeFunction from '../../model/bridge/bridgeFunction'; import GetBalance from '../../model/bridge/getBalance'; import { MiniAppCBType } from '../../model/miniAppApi'; import { MiniAppError, MiniAppErrorType } from '../../model/miniAppError'; import * as permission from '../../model/permission'; import { BridgeCallbackHandlerMock } from './bridgeCallbackHandlerMock.test'; jest.mock('./../../model/permission'); jest.mock('./../../factory/api'); let call: BridgeFunction; let cbHandler: BridgeCallbackHandlerMock; beforeAll(() => { call = new GetBalance(); cbHandler = new BridgeCallbackHandlerMock(); call.cbHandler = cbHandler; }); afterEach(() => { cbHandler.messages.length = 0; }); test('GetBalance - checkPermission denied fail', async () => { const mock = jest.spyOn(permission, 'checkPermission'); mock.mockReturnValue(Promise.resolve(permission.PermissionStatus.denied)); await call.execute(null); expect(cbHandler.messages.length).toBe(2); expect(cbHandler.messages[0]).toStrictEqual({ type: MiniAppCBType.fail, payload: new MiniAppError(MiniAppErrorType.insufficientScope), }); expect(cbHandler.messages[1]).toStrictEqual({ type: MiniAppCBType.complete }); }); test('GetBalance - checkPermission granted fail', async () => { const mock = jest.spyOn(permission, 'checkPermission'); mock.mockReturnValue(Promise.resolve(permission.PermissionStatus.granted)); await call.execute(null); expect(cbHandler.messages.length).toBe(2); expect(cbHandler.messages[0]).toStrictEqual({ type: MiniAppCBType.fail, payload: new MiniAppError(MiniAppErrorType.serverError), }); expect(cbHandler.messages[1]).toStrictEqual({ type: MiniAppCBType.complete }); }); test('GetBalance - checkPermission granted success', async () => { const permissionMock = jest.spyOn(permission, 'checkPermission'); const getBalanceMock = jest.spyOn(api, 'getBalance'); permissionMock.mockReturnValue( Promise.resolve(permission.PermissionStatus.granted) ); getBalanceMock.mockReturnValue( Promise.resolve({ data: { unsigned: { resultInfo: { code: 'SUCCESS' } } }, }) ); await call.execute(null); expect(cbHandler.messages.length).toBe(2); expect(cbHandler.messages[0]).toStrictEqual({ type: MiniAppCBType.success, payload: { balance: undefined }, }); expect(cbHandler.messages[1]).toStrictEqual({ type: MiniAppCBType.complete }); });