feat: aplicar gating en syncMembersForActiveGroups y añadir pruebas
Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>pull/1/head
parent
37db7b283d
commit
302ba6daa8
@ -0,0 +1,46 @@
|
|||||||
|
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');
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue