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.
88 lines
2.7 KiB
TypeScript
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);
|
|
});
|
|
});
|