import { syncGroups } from './group-sync'; import { GroupMetadata } from '@whiskeysockets/baileys'; const mockGroups: Record = { '120363043312345678@g.us': { id: '120363043312345678@g.us', subject: 'UP Parivar Dallas', desc: 'Main community group', participants: [], creation: 0, owner: undefined, restrict: false, announce: false, subjectOwner: undefined, subjectTime: 0, size: 0, ephemeralDuration: 0, inviteCode: undefined, }, '999999999@g.us': { id: '999999999@g.us', subject: 'Events Committee', desc: undefined, participants: [], creation: 0, owner: undefined, restrict: false, announce: false, subjectOwner: undefined, subjectTime: 0, size: 0, ephemeralDuration: 0, inviteCode: undefined, }, }; const mockPrisma = { group: { upsert: jest.fn(), }, }; describe('syncGroups', () => { beforeEach(() => jest.clearAllMocks()); it('upserts each group and returns jid→id map', async () => { mockPrisma.group.upsert .mockResolvedValueOnce({ id: 'db-group-1' }) .mockResolvedValueOnce({ id: 'db-group-2' }); const result = await syncGroups(mockGroups, 'account-1', mockPrisma as any); expect(mockPrisma.group.upsert).toHaveBeenCalledTimes(2); expect(result.get('120363043312345678@g.us')).toBe('db-group-1'); expect(result.get('999999999@g.us')).toBe('db-group-2'); }); it('calls upsert with correct create payload', async () => { mockPrisma.group.upsert.mockResolvedValue({ id: 'db-group-1' }); await syncGroups( { '120363043312345678@g.us': mockGroups['120363043312345678@g.us'] }, 'account-1', mockPrisma as any, ); expect(mockPrisma.group.upsert).toHaveBeenCalledWith({ where: { platform_platformId: { platform: 'whatsapp', platformId: '120363043312345678@g.us' } }, create: { platform: 'whatsapp', platformId: '120363043312345678@g.us', name: 'UP Parivar Dallas', description: 'Main community group', isActive: true, accountId: 'account-1', }, update: { name: 'UP Parivar Dallas', description: 'Main community group', accountId: 'account-1', }, }); }); it('handles groups with no description', async () => { mockPrisma.group.upsert.mockResolvedValue({ id: 'db-group-2' }); await syncGroups( { '999999999@g.us': mockGroups['999999999@g.us'] }, 'account-1', mockPrisma as any, ); expect(mockPrisma.group.upsert).toHaveBeenCalledWith( expect.objectContaining({ create: expect.objectContaining({ description: undefined, accountId: 'account-1' }), }), ); }); it('returns an empty map when given empty groups', async () => { const result = await syncGroups({}, 'account-1', mockPrisma as any); expect(result.size).toBe(0); expect(mockPrisma.group.upsert).not.toHaveBeenCalled(); }); });