import { PaymentClient } from '@fundkit/core';
import { vi, describe, test, expect, beforeEach } from 'vitest';
// Mock the provider modules
vi.mock('@fundkit/honeycoin', () => ({
HoneyCoinProvider: vi.fn().mockImplementation(() => ({
collect: vi.fn(),
checkTransactionStatus: vi.fn(),
getSupportedCurrencies: vi.fn().mockReturnValue(['UGX', 'KES', 'TZS']),
})),
}));
describe('Payment Integration Tests', () => {
let client: PaymentClient;
let mockProvider: any;
beforeEach(() => {
const { HoneyCoinProvider } = require('@fundkit/honeycoin');
mockProvider = new HoneyCoinProvider();
client = new PaymentClient({
honeycoin: { apiKey: 'test-key' },
});
});
test('should handle successful collection', async () => {
const mockResponse = {
transactionId: 'tx-12345',
status: 'pending',
amount: 10000,
currency: 'UGX',
};
mockProvider.collect.mockResolvedValue(mockResponse);
const result = await client.collect({
amount: 10000,
currency: 'UGX',
phoneNumber: '+256701234567',
reason: 'Test payment',
});
expect(result.data.transactionId).toBe('tx-12345');
expect(result.provider).toBe('honeycoin');
});
test('should handle provider errors gracefully', async () => {
mockProvider.collect.mockRejectedValue(new Error('Provider API unavailable'));
await expect(
client.collect({
amount: 10000,
currency: 'UGX',
phoneNumber: '+256701234567',
reason: 'Test payment',
})
).rejects.toThrow('Provider API unavailable');
});
});