fix: address code quality issues in session pool, approval, and main
- session.ts: add onReconnect callback so reconnected socket replaces stale pool entry - session-pool.ts: pass onReconnect to update pool on reconnect; add closeAll() to gracefully end WebSocket connections on shutdown - approval.ts: use approved flag so double-approval race (updateMany count=0) returns null instead of sending duplicate forward jobs - main.ts: wrap pool.add() in try/catch to continue if one account fails; replace silent groupMap fallback with explicit error log and early return; call pool.closeAll() before BullMQ shutdown to prevent hanging sockets - Tests: add closeAll() test to session-pool.test.ts; add double-approval race test to approval.test.ts (56 tests total, all passing) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -76,6 +76,29 @@ describe('handleStarReaction', () => {
|
||||
expect(await handleStarReaction(makeReaction(), adminJids, prisma)).toBeNull();
|
||||
});
|
||||
|
||||
it('returns null on double-approval race (updateMany returns count=0)', async () => {
|
||||
const prisma = {
|
||||
message: {
|
||||
findUnique: jest.fn().mockResolvedValue({
|
||||
id: 'msg_1',
|
||||
status: 'PENDING',
|
||||
approval: null,
|
||||
content: 'hello',
|
||||
senderName: 'Alice',
|
||||
sourceGroup: { name: 'UP Parivar Dallas', syncRoutesFrom: [] },
|
||||
}),
|
||||
},
|
||||
$transaction: jest.fn().mockImplementation(async (fn: any) => fn({
|
||||
message: { updateMany: jest.fn().mockResolvedValue({ count: 0 }) },
|
||||
approval: { create: jest.fn().mockResolvedValue({}) },
|
||||
})),
|
||||
} as any;
|
||||
|
||||
const result = await handleStarReaction(makeReaction(), adminJids, prisma);
|
||||
expect(result).toBeNull();
|
||||
expect(prisma.$transaction).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('approves message and returns empty array when no sync routes', async () => {
|
||||
const prisma = {
|
||||
message: {
|
||||
|
||||
Reference in New Issue
Block a user