UNPKG

doku-nodejs-library

Version:
128 lines (107 loc) 4.86 kB
const Snap = require("../_modules/snap"); const TokenController = require('../_controllers/tokenController'); const DirectDebitController = require('../_controllers/directDebitController'); const CheckStatusDirectDebitRequestDTO = require('../_models/checkStatusDirectDebitRequestDTO'); const {CheckStatusResponseDTO} = require('../_models/checkStatusDirectDebitResponseDTO'); jest.mock('../_controllers/tokenController'); jest.mock('../_controllers/directDebitController'); describe("Check Status - Validation request", () => { test('Should successfully validate check status Direct Debit when all params are valid', () => { const validDto = new CheckStatusDirectDebitRequestDTO( "2020102900000000000001", "2020102977770000000009", "30443786930722726463280097920912", "55", "2020-12-21T14:56:11+07:00", { value: "12345678.00", currency: "IDR" }, "23489182303312", "23489182303312", "183908924912387", { deviceId: "12345679237", channel: "DIRECT_DEBIT_ALLO_SNAP" } ); expect(() => validDto.validateCheckStatusRequestDto()).not.toThrow(); }); test('Should throw an error when serviceCode is null', () => { const invalidDto = new CheckStatusDirectDebitRequestDTO( "2020102900000000000001", "2020102977770000000009", "30443786930722726463280097920912", null, "2020-12-21T14:56:11+07:00", { value: "12345678.00", currency: "IDR" }, "23489182303312", "23489182303312", "183908924912387", { deviceId: "12345679237", channel: "DIRECT_DEBIT_ALLO_SNAP" } ); expect(() => invalidDto.validateCheckStatusRequestDto()).toThrow("Validation failed: \"serviceCode\" must be a string"); }); }); describe("Check Status - Process", () => { let snap; let mockTokenController; let mockDirectDebitController; const createMockTokenController = () => { const controller = new TokenController(); controller.isTokenInvalid = jest.fn().mockReturnValue(false); return controller; }; const createMockDirectDebitController = () => { const controller = new DirectDebitController(); const expectedResponse = new CheckStatusResponseDTO( "2005500", ); controller.doCheckStatus = jest.fn().mockResolvedValue(expectedResponse); return controller; }; const createCheckStatusRequestDto = () => { return new CheckStatusDirectDebitRequestDTO({ OriginalPartnerReferenceNo: "2020102900000000000001", OriginalReferenceNo: "2020102977770000000009", OriginalExternalId: "30443786930722726463280097920912", ServiceCode: "55", TransactionDate: "2020-12-21T14:56:11+07:00", Amount: { value: "12345678.00", currency: "IDR" }, MerchantId: "23489182303312", SubMerchantId: "23489182303312", ExternalStoreId: "183908924912387", AdditionalInfo: { DeviceId: "2020-12-21T14:56:11+07:00", Channel: "DIRECT_DEBIT_ALLO_SNAP", }, }); }; beforeEach(() => { snap = new Snap({ tokenB2B: 'validToken', tokenB2b2c: 'validTokenB2B2C', tokenExpiresIn: 3600, tokenGeneratedTimestamp: Date.now(), privateKey: 'privateKey', clientId: 'clientId', secretKey: 'secretKey', isProduction: false, }); mockTokenController = createMockTokenController(); mockDirectDebitController = createMockDirectDebitController(); TokenController.mockImplementation(() => mockTokenController); DirectDebitController.mockImplementation(() => mockDirectDebitController); }); test('should successfully perform check status when all params are valid', async () => { const checkStatusRequestDto = createCheckStatusRequestDto(); checkStatusRequestDto.validateCheckStatusRequestDto = jest.fn(); const response = await snap.doCheckStatus(checkStatusRequestDto); expect(checkStatusRequestDto.validateCheckStatusRequestDto).toHaveBeenCalled(); expect(mockTokenController.isTokenInvalid).toHaveBeenCalledWith(snap.tokenB2B, snap.tokenExpiresIn, snap.tokenGeneratedTimestamp); expect(mockDirectDebitController.doCheckStatus).toHaveBeenCalledWith( checkStatusRequestDto, snap.clientId, snap.tokenB2B, snap.secretKey, snap.isProduction ); expect(response).toEqual(expect.objectContaining({ responseCode: '2005500', })); }); });