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.
taskbot/tests/unit/services/group-sync.scheduler.gating...

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');
});
});