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;
}
// Ensure user exists in database
const userId = ensureUserExists(data.key.participant, WebhookServer.dbInstance);
// Ensure user exists in database (swallow DB errors to keep webhook 200)
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 (process.env.NODE_ENV !== 'test') {
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());
});
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)!;
expect(() =>
TaskService.createTask(
{
description: 'Tarea con fallo',
created_by: creator,
due_date: null,
group_id: null,
},
[
// Usuario no existente: no llamamos ensureUserExists
{ user_id: '555099999', assigned_by: creator },
]
)
).toThrow();
const id = TaskService.createTask(
{
description: 'Tarea con asignado nuevo',
created_by: creator,
due_date: null,
group_id: null,
},
[
// Usuario no existente: TaskService debe asegurar y crear
{ user_id: '555099999', assigned_by: creator },
]
);
const counts = memDb
.prepare(
`SELECT
(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.assigns_count).toBe(0);
expect(counts.tasks_count).toBe(1);
expect(counts.assigns_count).toBe(1);
});
it('lanza error si created_by no existe (FK) y no inserta la tarea', () => {
// No llamamos a ensureUserExists para este created_by
const nonExisting = '555123123';
it('lanza error si created_by es inválido (no normalizable) y no inserta la tarea', () => {
const invalidCreator = 'invalid-id!';
expect(() =>
TaskService.createTask(
{
description: 'No debería insertarse',
created_by: nonExisting,
created_by: invalidCreator,
due_date: null,
group_id: null,
},

Loading…
Cancel
Save