|
|
|
|
@ -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(
|
|
|
|
|
const id = TaskService.createTask(
|
|
|
|
|
{
|
|
|
|
|
description: 'Tarea con fallo',
|
|
|
|
|
description: 'Tarea con asignado nuevo',
|
|
|
|
|
created_by: creator,
|
|
|
|
|
due_date: null,
|
|
|
|
|
group_id: null,
|
|
|
|
|
},
|
|
|
|
|
[
|
|
|
|
|
// Usuario no existente: no llamamos ensureUserExists
|
|
|
|
|
// Usuario no existente: TaskService debe asegurar y crear
|
|
|
|
|
{ user_id: '555099999', assigned_by: creator },
|
|
|
|
|
]
|
|
|
|
|
)
|
|
|
|
|
).toThrow();
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
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,
|
|
|
|
|
},
|
|
|
|
|
|