import MockAdapter from 'axios-mock-adapter'; import { instance, instanceBff } from '../factory/request'; import { login, loginWithSMS, linkUser, getClientID, //getUAID, getUserProfile, getBalance, makePayment, PaymentQuery, } from '../factory/api'; import linkUserRes from './mock/api/linkUserRes.mock.json'; import getUserProfileRes from './mock/api/getUserProfile.mock.json'; import getBalanceRes from './mock/api/getBalance.mock.json'; import makePaymentRes from './mock/api/makePayment.mock.json'; const mockBff = new MockAdapter(instanceBff); const mockMiniApp = new MockAdapter(instance); describe('Bff apis tests', () => { let signInRes: any; beforeEach(() => { signInRes = { header: { resultCode: 'S0000', resultMessage: '', }, payload: { accessToken: '9214284d-68d1-4463-9e49-481b00558535', refreshToken: 'e70b6b52-f7e7-48f3-827d-074168c07d6d', }, }; }); it('sign in successfully', async () => { mockBff.onPost('/signIn').reply(200, signInRes); const res: any = await login({ password: 'Asdf1234', phoneNumber: '08018881777', }); expect(res.status).toBe(200); expect(res.data).toEqual(signInRes); }); it('sign in with sms successfully', async () => { mockBff.onPost('/signInWithSms').reply(200, signInRes); const res: any = await loginWithSMS({ otpReferenceId: '179950699feac9808548b47fc83a79a45e9f39879c653f7d103131fbae295093b8748e', otp: '1234', type: 'PAYPAY', }); expect(res.status).toBe(200); expect(res.data).toEqual(signInRes); }); }); describe('Mini app apis tests', () => { //let getUAIDRes: any; beforeEach(() => { /*getUAIDRes = { ...linkUserRes, };*/ }); it('link user successfully', async () => { mockMiniApp .onPost(`/v1/users/link?clientId=${getClientID()}`) .reply(200, linkUserRes); const res: any = await linkUser(); expect(res.status).toBe(200); expect(res.data).toEqual(linkUserRes); }); /*TODO: it('getUAID successfully', async () => { mockMiniApp.onGet(`v1/users/id`).reply(200, getUAIDRes); const res: any = await getUAID(); expect(res).toEqual({ jws: getUAIDRes.unsigned.data.userAuthorizationId }); });*/ it('getUserProfile successfully', async () => { mockMiniApp.onGet(`/v1/users/profile`).reply(200, getUserProfileRes); const res: any = await getUserProfile(); expect(res.status).toBe(200); expect(res.data).toEqual(getUserProfileRes); }); it('getBalance successfully', async () => { mockMiniApp.onGet(`/v1/payment/balance`).reply(200, getBalanceRes); const res: any = await getBalance(); expect(res.status).toBe(200); expect(res.data).toEqual(getBalanceRes); }); it('makePayment successfully', async () => { const queryParams: PaymentQuery = { clientId: getClientID(), merchant: '205273937735622656', agreeSimilarTransaction: true, }; let queryStr = ''; queryStr = Object.keys(queryParams).reduce((resStr, key) => { return resStr + `${key}=${queryParams[key as keyof PaymentQuery]}&`; }, queryStr); mockMiniApp.onPost(`/v1/payment?${queryStr}`).reply(200, makePaymentRes); const res: any = await makePayment(queryParams, { merchantPaymentId: '7615c171-a97d-4cc1-b749-b7644929c5b9-TEST-BY-ME-AGAIN', amount: { amount: 100, currency: 'JPY' }, paymentMethodId: '32210450', requestedAt: Math.round(Date.now() / 1000), storeId: 'storeId', terminalId: 'storeId', orderReceiptNumber: 'orderReceiptNumber', orderDescription: 'orderDescription', orderItems: [ { name: 'item 1', category: 'cateogyr 1', quantity: 1, productId: 'product id 1', unitPrice: { amount: { amount: 20, currency: 'JPY' }, currency: 'JPY', }, }, ], }); expect(res.status).toBe(200); expect(res.data).toEqual(makePaymentRes); }); });