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/server/groups-upsert.sync.test.ts

88 lines
2.7 KiB
TypeScript

import { describe, test, expect, beforeEach, afterEach } from 'bun:test';
import { WebhookServer } from '../../../src/server';
import { GroupSyncService } from '../../../src/services/group-sync';
import { makeMemDb, injectAllServices, resetServices } from '../../helpers/db';
import type { Database as SqliteDatabase } from 'bun:sqlite';
describe('WebhookServer - groups.upsert encadena syncGroups y syncMembersForActiveGroups', () => {
const envBackup = { ...process.env };
let db: SqliteDatabase;
let originalSyncGroups: any;
let originalRefresh: any;
let originalSyncMembers: any;
let calledSyncGroups = 0;
let calledRefresh = 0;
let calledSyncMembers = 0;
beforeEach(() => {
process.env = {
...envBackup,
NODE_ENV: 'production',
EVOLUTION_API_INSTANCE: 'inst-1',
EVOLUTION_API_URL: 'http://localhost:1234',
EVOLUTION_API_KEY: 'dummy',
CHATBOT_PHONE_NUMBER: '123456789',
WEBHOOK_URL: 'http://localhost:3000/webhook'
};
db = makeMemDb();
// Inyectar DB en servicios
(WebhookServer as any).dbInstance = db;
injectAllServices(db);
// Guardar originales y stubear
originalSyncGroups = GroupSyncService.syncGroups;
originalRefresh = GroupSyncService.refreshActiveGroupsCache;
originalSyncMembers = GroupSyncService.syncMembersForActiveGroups;
calledSyncGroups = 0;
calledRefresh = 0;
calledSyncMembers = 0;
GroupSyncService.syncGroups = async () => {
calledSyncGroups++;
return { added: 0, updated: 0 };
};
GroupSyncService.refreshActiveGroupsCache = () => {
calledRefresh++;
};
GroupSyncService.syncMembersForActiveGroups = async () => {
calledSyncMembers++;
return { groups: 0, added: 0, updated: 0, deactivated: 0 };
};
});
afterEach(async () => {
// Restaurar stubs
GroupSyncService.syncGroups = originalSyncGroups;
GroupSyncService.refreshActiveGroupsCache = originalRefresh;
GroupSyncService.syncMembersForActiveGroups = originalSyncMembers;
resetServices();
try { db.close(); } catch {}
process.env = envBackup;
});
test('dispara syncGroups -> refreshActiveGroupsCache -> syncMembersForActiveGroups y responde 200', async () => {
const payload = {
event: 'groups.upsert',
instance: 'inst-1',
data: { any: 'thing' }
};
const req = new Request('http://localhost/webhook', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify(payload)
});
const res = await WebhookServer.handleRequest(req);
expect(res.status).toBe(200);
expect(calledSyncGroups).toBe(1);
expect(calledRefresh).toBe(1);
expect(calledSyncMembers).toBe(1);
});
});