65 lines
2.2 KiB
TypeScript
65 lines
2.2 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import type { Logger } from '@core/shared/domain/Logger';
|
|
import type { Payment } from '@core/payments/domain/entities/Payment';
|
|
import { PaymentType, PaymentStatus, PayerType } from '@core/payments/domain/entities/Payment';
|
|
import { InMemoryPaymentRepository } from './InMemoryPaymentRepository';
|
|
|
|
describe('InMemoryPaymentRepository', () => {
|
|
let repository: InMemoryPaymentRepository;
|
|
let logger: Logger;
|
|
|
|
beforeEach(() => {
|
|
logger = {
|
|
debug: vi.fn(),
|
|
info: vi.fn(),
|
|
warn: vi.fn(),
|
|
error: vi.fn(),
|
|
} as unknown as Logger;
|
|
repository = new InMemoryPaymentRepository(logger);
|
|
});
|
|
|
|
it('creates and finds by filters', async () => {
|
|
const payment: Payment = {
|
|
id: 'pay-1',
|
|
type: PaymentType.SPONSORSHIP,
|
|
amount: 100,
|
|
platformFee: 5,
|
|
netAmount: 95,
|
|
payerId: 'sponsor-1',
|
|
payerType: PayerType.SPONSOR,
|
|
leagueId: 'league-1',
|
|
status: PaymentStatus.PENDING,
|
|
createdAt: new Date('2025-01-01T00:00:00.000Z'),
|
|
};
|
|
|
|
await repository.create(payment);
|
|
|
|
expect((await repository.findById('pay-1'))?.id).toBe('pay-1');
|
|
expect((await repository.findByLeagueId('league-1')).length).toBeGreaterThanOrEqual(1);
|
|
expect((await repository.findByPayerId('sponsor-1')).length).toBeGreaterThanOrEqual(1);
|
|
expect((await repository.findByType(PaymentType.SPONSORSHIP)).length).toBeGreaterThanOrEqual(1);
|
|
|
|
const filtered = await repository.findByFilters({ leagueId: 'league-1', payerId: 'sponsor-1', type: PaymentType.SPONSORSHIP });
|
|
expect(filtered.map(p => p.id)).toContain('pay-1');
|
|
});
|
|
|
|
it('updates', async () => {
|
|
const payment: Payment = {
|
|
id: 'pay-2',
|
|
type: PaymentType.MEMBERSHIP_FEE,
|
|
amount: 50,
|
|
platformFee: 2.5,
|
|
netAmount: 47.5,
|
|
payerId: 'driver-1',
|
|
payerType: PayerType.DRIVER,
|
|
leagueId: 'league-2',
|
|
status: PaymentStatus.PENDING,
|
|
createdAt: new Date('2025-01-02T00:00:00.000Z'),
|
|
};
|
|
|
|
await repository.create(payment);
|
|
const updated = await repository.update({ ...payment, status: PaymentStatus.COMPLETED, completedAt: new Date('2025-01-03T00:00:00.000Z') });
|
|
expect(updated.status).toBe(PaymentStatus.COMPLETED);
|
|
});
|
|
});
|