107 lines
2.9 KiB
TypeScript
107 lines
2.9 KiB
TypeScript
import { syncGroups } from './group-sync';
|
|
import { GroupMetadata } from '@whiskeysockets/baileys';
|
|
|
|
const mockGroups: Record<string, GroupMetadata> = {
|
|
'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();
|
|
});
|
|
});
|