fix: silenciar errores DB en webhook y actualizar pruebas de TaskService

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
pull/1/head
borja 2 months ago
parent 90d78bf195
commit 48d750b648

@ -135,8 +135,16 @@ export class WebhookServer {
return; return;
} }
// Ensure user exists in database // Ensure user exists in database (swallow DB errors to keep webhook 200)
const userId = ensureUserExists(data.key.participant, WebhookServer.dbInstance); let userId: string | null = null;
try {
userId = ensureUserExists(data.key.participant, WebhookServer.dbInstance);
} catch (e) {
if (process.env.NODE_ENV !== 'test') {
console.error('⚠️ Error ensuring user exists, ignoring message:', e);
}
return;
}
if (!userId) { if (!userId) {
if (process.env.NODE_ENV !== 'test') { if (process.env.NODE_ENV !== 'test') {
console.log('⚠️ Failed to ensure user exists, ignoring message'); console.log('⚠️ Failed to ensure user exists, ignoring message');

@ -120,45 +120,42 @@ describe('TaskService.createTask', () => {
expect(users.map(u => u.user_id)).toEqual([assigneeA, assigneeB].sort()); expect(users.map(u => u.user_id)).toEqual([assigneeA, assigneeB].sort());
}); });
it('hace rollback si una asignación viola FK (usuario inexistente)', () => { it('asegura usuarios inexistentes en asignaciones y no viola FK', () => {
const creator = ensureUserExists('555010101@s.whatsapp.net', memDb)!; const creator = ensureUserExists('555010101@s.whatsapp.net', memDb)!;
expect(() => const id = TaskService.createTask(
TaskService.createTask(
{ {
description: 'Tarea con fallo', description: 'Tarea con asignado nuevo',
created_by: creator, created_by: creator,
due_date: null, due_date: null,
group_id: null, group_id: null,
}, },
[ [
// Usuario no existente: no llamamos ensureUserExists // Usuario no existente: TaskService debe asegurar y crear
{ user_id: '555099999', assigned_by: creator }, { user_id: '555099999', assigned_by: creator },
] ]
) );
).toThrow();
const counts = memDb const counts = memDb
.prepare( .prepare(
`SELECT `SELECT
(SELECT COUNT(*) FROM tasks) AS tasks_count, (SELECT COUNT(*) FROM tasks) AS tasks_count,
(SELECT COUNT(*) FROM task_assignments) AS assigns_count` (SELECT COUNT(*) FROM task_assignments WHERE task_id = ?) AS assigns_count`
) )
.get() as any; .get(id) as any;
expect(counts.tasks_count).toBe(0); expect(counts.tasks_count).toBe(1);
expect(counts.assigns_count).toBe(0); expect(counts.assigns_count).toBe(1);
}); });
it('lanza error si created_by no existe (FK) y no inserta la tarea', () => { it('lanza error si created_by es inválido (no normalizable) y no inserta la tarea', () => {
// No llamamos a ensureUserExists para este created_by const invalidCreator = 'invalid-id!';
const nonExisting = '555123123';
expect(() => expect(() =>
TaskService.createTask( TaskService.createTask(
{ {
description: 'No debería insertarse', description: 'No debería insertarse',
created_by: nonExisting, created_by: invalidCreator,
due_date: null, due_date: null,
group_id: null, group_id: null,
}, },

Loading…
Cancel
Save