-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathsettlements.integration.spec.ts
More file actions
54 lines (48 loc) · 2.02 KB
/
Copy pathsettlements.integration.spec.ts
File metadata and controls
54 lines (48 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { SettlementsService } from './settlements.service';
describe('Settlement Flow (integration-ish)', () => {
it('creates settlement and adjusts balances', async () => {
const tx: any = {
settlement: {
create: jest.fn().mockResolvedValue({
id: 'st1',
groupId: 'g1',
payerId: 'u2',
receiverId: 'u1',
amountCents: 500n,
createdAt: new Date('2026-01-01T00:00:00.000Z'),
}),
},
activity: {
create: jest.fn(),
},
balance: {
findUnique: jest.fn().mockResolvedValue(null),
update: jest.fn(),
create: jest.fn(),
},
};
const prisma: any = {
settlement: {
findFirst: jest.fn().mockResolvedValue(null),
findUnique: jest.fn().mockResolvedValue(null),
},
groupMember: {
findMany: jest.fn().mockResolvedValue([{ userId: 'u1' }, { userId: 'u2' }]),
},
$transaction: jest.fn().mockImplementation(async (cb: (client: any) => unknown) => cb(tx)),
};
const balancesService: any = { adjustBalance: jest.fn().mockResolvedValue(undefined) };
const redis: any = { invalidateGroupCache: jest.fn().mockResolvedValue(undefined) };
const notificationsService: any = { sendPushNotification: jest.fn().mockResolvedValue(undefined) };
const realtime: any = { emitToGroup: jest.fn() };
const service = new SettlementsService(prisma, balancesService, redis, notificationsService, realtime);
await service.create('g1', 'u2', { payerId: 'u2', receiverId: 'u1', amountCents: '500' });
expect(prisma.groupMember.findMany).toHaveBeenCalled();
expect(prisma.$transaction).toHaveBeenCalled();
expect(tx.settlement.create).toHaveBeenCalled();
expect(tx.activity.create).toHaveBeenCalled();
expect(balancesService.adjustBalance).toHaveBeenCalledTimes(2);
expect(redis.invalidateGroupCache).toHaveBeenCalledWith('g1');
expect(realtime.emitToGroup).toHaveBeenCalledWith('g1', 'settlement_created', expect.any(Object));
});
});