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.
taskbot/tests/unit/tasks/service.list-active.test.ts

64 lines
2.1 KiB
TypeScript

import Database from 'bun:sqlite';
import { initializeDatabase, ensureUserExists } from '../../../src/db';
import { TaskService } from '../../../src/tasks/service';
describe('TaskService - listAllActive', () => {
let memdb: Database;
beforeEach(() => {
process.env.NODE_ENV = 'test';
process.env.GROUP_GATING_MODE = 'off';
memdb = new Database(':memory:');
initializeDatabase(memdb);
(TaskService as any).dbInstance = memdb;
});
afterEach(() => {
try { memdb.close(); } catch {}
});
function seedGroup(id: string, name: string = 'Group') {
memdb.prepare(`
INSERT INTO groups (id, community_id, name, active, last_verified)
VALUES (?, 'comm-1', ?, 1, strftime('%Y-%m-%d %H:%M:%f','now'))
`).run(id, name);
}
function createTask(desc: string, due: string | null, groupId: string | null, creator: string) {
const ensured = ensureUserExists(creator, memdb)!;
return TaskService.createTask(
{ description: desc, due_date: due, group_id: groupId, created_by: ensured },
[]
);
}
it('devuelve solo tareas activas en orden por due_date (NULL al final)', () => {
seedGroup('g1@g.us', 'G1');
seedGroup('g2@g.us', 'G2');
const c = '34600123456';
const t1 = createTask('Tarea A', '2025-10-10', 'g1@g.us', c);
const t2 = createTask('Tarea B', '2025-10-05', 'g2@g.us', c);
const t3 = createTask('Tarea C', null, 'g1@g.us', c);
const t4 = createTask('Tarea D', '2025-10-01', 'g2@g.us', c);
// Completar una de ellas para que no aparezca
TaskService.completeTask(t4, c);
const rows = TaskService.listAllActive(10);
expect(rows.map(r => r.description)).toEqual(['Tarea B', 'Tarea A', 'Tarea C']);
expect(TaskService.countAllActive()).toBe(3);
});
it('respeta el límite indicado', () => {
seedGroup('g1@g.us', 'G1');
const c = '34600123456';
createTask('Tarea 1', '2025-10-02', 'g1@g.us', c);
createTask('Tarea 2', '2025-10-03', 'g1@g.us', c);
createTask('Tarea 3', '2025-10-04', 'g1@g.us', c);
const rows = TaskService.listAllActive(2);
expect(rows.length).toBe(2);
});
});