You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
|
|
import { makeMemDb } from '../../helpers/db';
|
|
import { GroupSyncService } from '../../../src/services/group-sync';
|
|
import { AllowedGroups } from '../../../src/services/allowed-groups';
|
|
|
|
describe('GroupSyncService - gating en scheduler de miembros (enforce)', () => {
|
|
const envBackup = process.env;
|
|
const calls: string[] = [];
|
|
|
|
beforeEach(() => {
|
|
process.env = { ...envBackup, NODE_ENV: 'ci', GROUP_GATING_MODE: 'enforce' };
|
|
|
|
const memdb = makeMemDb();
|
|
(GroupSyncService as any).dbInstance = memdb;
|
|
(AllowedGroups as any).dbInstance = memdb;
|
|
|
|
// Preparar caché de grupos activos (2 grupos: uno allowed y otro no)
|
|
GroupSyncService.activeGroupsCache.clear();
|
|
GroupSyncService.activeGroupsCache.set('ok@g.us', 'OK Group');
|
|
GroupSyncService.activeGroupsCache.set('na@g.us', 'NA Group');
|
|
|
|
// Sembrar allowed solo para 'ok@g.us'
|
|
AllowedGroups.setStatus('ok@g.us', 'allowed', 'OK Group');
|
|
|
|
// Stub de fetch para no hacer red y registrar llamadas
|
|
(GroupSyncService as any).fetchGroupMembersFromAPI = async (gid: string) => {
|
|
calls.push(gid);
|
|
// Snapshot vacía para no escribir en DB
|
|
return [];
|
|
};
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env = envBackup;
|
|
calls.length = 0;
|
|
});
|
|
|
|
it('salta grupos no allowed y solo procesa los allowed', async () => {
|
|
const summary = await GroupSyncService.syncMembersForActiveGroups();
|
|
|
|
// Debe haber procesado solo 1 grupo (el allowed)
|
|
expect(summary.groups).toBe(1);
|
|
expect(calls).toEqual(['ok@g.us']);
|
|
expect(calls).not.toContain('na@g.us');
|
|
});
|
|
});
|