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.
74 lines
2.4 KiB
TypeScript
74 lines
2.4 KiB
TypeScript
import { describe, it, expect, beforeAll, beforeEach } from 'bun:test';
|
|
import { Database } from 'bun:sqlite';
|
|
import { initializeDatabase } from '../../../src/db';
|
|
import { TaskService } from '../../../src/tasks/service';
|
|
import { CommandService } from '../../../src/services/command';
|
|
import { Metrics } from '../../../src/services/metrics';
|
|
|
|
describe('CommandService - A4 JIT DM al asignador', () => {
|
|
let memdb: Database;
|
|
|
|
beforeAll(() => {
|
|
memdb = new Database(':memory:');
|
|
initializeDatabase(memdb);
|
|
TaskService.dbInstance = memdb as any;
|
|
CommandService.dbInstance = memdb as any;
|
|
});
|
|
|
|
beforeEach(() => {
|
|
process.env.NODE_ENV = 'test';
|
|
process.env.METRICS_ENABLED = 'true';
|
|
process.env.ONBOARDING_ENABLE_IN_TEST = 'true';
|
|
process.env.CHATBOT_PHONE_NUMBER = '555111222';
|
|
Metrics.reset();
|
|
|
|
memdb.exec(`
|
|
DELETE FROM task_assignments;
|
|
DELETE FROM tasks;
|
|
DELETE FROM users;
|
|
`);
|
|
});
|
|
|
|
it('envía un único DM JIT al asignador con la lista y enlace wa.me cuando hay tokens no resolubles', async () => {
|
|
const res = await CommandService.handle({
|
|
sender: '111',
|
|
groupId: '', // DM
|
|
message: '/t n Mixta @34600123456 @lid-opaque',
|
|
mentions: [],
|
|
});
|
|
|
|
// Debe existir al menos el ACK y el JIT
|
|
expect(res.length).toBeGreaterThan(0);
|
|
|
|
const toSender = res.filter(r => r.recipient === '111');
|
|
expect(toSender.length).toBeGreaterThan(0);
|
|
|
|
const jit = toSender.find(r => r.message.includes('activar'));
|
|
expect(jit).toBeTruthy();
|
|
expect(jit!.message).toContain('lid-opaque');
|
|
expect(jit!.message).toContain('https://wa.me/555111222');
|
|
|
|
const prom = Metrics.render('prom');
|
|
expect(prom).toContain('onboarding_prompts_sent_total');
|
|
expect(prom).toContain('source="jit_assignee_failure"');
|
|
});
|
|
|
|
it('no envía JIT si falta CHATBOT_PHONE_NUMBER y contabiliza skipped:missing_bot_number', async () => {
|
|
process.env.CHATBOT_PHONE_NUMBER = '';
|
|
|
|
const res = await CommandService.handle({
|
|
sender: '222',
|
|
groupId: '',
|
|
message: '/t n Solo opaco @alias-xyz',
|
|
mentions: [],
|
|
});
|
|
|
|
const anyJit = res.find(r => r.recipient === '222' && r.message.includes('activar'));
|
|
expect(anyJit).toBeUndefined();
|
|
|
|
const prom = Metrics.render('prom');
|
|
expect(prom).toContain('onboarding_prompts_skipped_total');
|
|
expect(prom).toContain('reason="missing_bot_number"');
|
|
});
|
|
});
|