64 lines
2.2 KiB
JavaScript
64 lines
2.2 KiB
JavaScript
const mockOrderFindByPk = jest.fn();
|
|
const mockOrderFindOne = jest.fn();
|
|
const mockPaymentCreate = jest.fn();
|
|
|
|
jest.mock('../../models/migration', () => ({
|
|
Order: { findByPk: mockOrderFindByPk, findOne: mockOrderFindOne },
|
|
Payment: { create: mockPaymentCreate }
|
|
}));
|
|
|
|
const paymentLogger = require('../../app/helpers/payment_logger.helper');
|
|
|
|
describe('PaymentLoggerHelper', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
it('should log a payment successfully', async () => {
|
|
const midtransResponse = {
|
|
order_id: 'INV-EXT-001',
|
|
gross_amount: '10000.00',
|
|
transaction_status: 'settlement',
|
|
payment_type: 'credit_card',
|
|
status_message: 'Success'
|
|
};
|
|
const requestPayload = { order_id: 'u-123' };
|
|
|
|
mockOrderFindByPk.mockResolvedValue({ id: 'u-123', total: 10000, user_id: 1 });
|
|
mockPaymentCreate.mockResolvedValue({ id: 'p-123' });
|
|
|
|
const result = await paymentLogger.log(midtransResponse, requestPayload);
|
|
|
|
expect(mockOrderFindByPk).toHaveBeenCalledWith('u-123');
|
|
expect(mockPaymentCreate).toHaveBeenCalledWith(expect.objectContaining({
|
|
status: 'SUCCESS',
|
|
channel_code: 'credit_card',
|
|
channel_type: 'CREDIT_CARD'
|
|
}));
|
|
expect(result.id).toBe('p-123');
|
|
});
|
|
|
|
it('should map bank transfer types correctly', async () => {
|
|
const midtransResponse = { order_id: 'INV-EXT', payment_type: 'bank_transfer', transaction_status: 'pending' };
|
|
mockOrderFindOne.mockResolvedValue({ id: 'u-123', total: 10000 });
|
|
|
|
await paymentLogger.log(midtransResponse);
|
|
|
|
expect(mockPaymentCreate).toHaveBeenCalledWith(expect.objectContaining({
|
|
channel_type: 'BANK'
|
|
}));
|
|
});
|
|
|
|
it('should return null if order not found', async () => {
|
|
mockOrderFindByPk.mockResolvedValue(null);
|
|
mockOrderFindOne.mockResolvedValue(null);
|
|
|
|
const consoleSpy = jest.spyOn(console, 'warn').mockImplementation();
|
|
const result = await paymentLogger.log({ order_id: 'none' });
|
|
|
|
expect(result).toBeNull();
|
|
expect(consoleSpy).toHaveBeenCalled();
|
|
consoleSpy.mockRestore();
|
|
});
|
|
});
|