const mockCharge = jest.fn(); jest.mock('../../app/core/midtrans.service', () => ({ getCoreApi: jest.fn().mockReturnValue({ charge: mockCharge, transaction: { status: jest.fn(), refund: jest.fn(), cancel: jest.fn() } }), getSnap: jest.fn().mockReturnValue({ createTransaction: jest.fn() }) })); jest.mock('../../models/migration', () => ({ Order: { findByPk: jest.fn(), findOne: jest.fn(), update: jest.fn() }, Payment: { findOne: jest.fn(), create: jest.fn(), update: jest.fn() } })); const eWalletService = require('../../app/modules/e-wallet/services/e-wallet.service'); describe('EWalletService', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should create a gopay transaction successfully', async () => { const payload = { order_id: 'u-123', external_id: 'INV-G-001', amount: 25000 }; mockCharge.mockResolvedValue({ status_code: '201' }); const result = await eWalletService.createTransaction(payload, 'gopay'); expect(mockCharge).toHaveBeenCalled(); expect(result.status_code).toBe('201'); }); it('should create a shopeepay transaction successfully', async () => { const payload = { order_id: 'u-123', external_id: 'INV-S-001', amount: 15000 }; mockCharge.mockResolvedValue({ status_code: '201' }); const result = await eWalletService.createTransaction(payload, 'shopeepay'); expect(mockCharge).toHaveBeenCalled(); }); });