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.

78 lines
2.7 KiB
TypeScript

import Database from 'bun:sqlite';
import { initializeDatabase, ensureUserExists } from '../../../src/db';
import { AdminService } from '../../../src/services/admin';
import { TaskService } from '../../../src/tasks/service';
describe('AdminService - /admin ver todos', () => {
let memdb: Database;
const ADMIN = '34600123456';
const OTHER = '34999999999';
beforeEach(() => {
process.env.NODE_ENV = 'test';
process.env.GROUP_GATING_MODE = 'off';
process.env.ADMIN_USERS = ADMIN;
memdb = new Database(':memory:');
initializeDatabase(memdb);
(AdminService as any).dbInstance = memdb;
(TaskService as any).dbInstance = memdb;
// seed groups
memdb.prepare(`
INSERT INTO groups (id, community_id, name, active, last_verified)
VALUES ('g1@g.us', 'comm', 'Grupo Uno', 1, strftime('%Y-%m-%d %H:%M:%f','now'))
`).run();
memdb.prepare(`
INSERT INTO groups (id, community_id, name, active, last_verified)
VALUES ('g2@g.us', 'comm', 'Grupo Dos', 1, strftime('%Y-%m-%d %H:%M:%f','now'))
`).run();
// seed tasks
const creator = ensureUserExists(ADMIN, memdb)!;
TaskService.createTask({ description: 'Alpha', due_date: '2025-10-10', group_id: 'g1@g.us', created_by: creator }, []);
TaskService.createTask({ description: 'Beta', due_date: '2025-10-05', group_id: 'g2@g.us', created_by: creator }, []);
TaskService.createTask({ description: 'Gamma', due_date: null, group_id: 'g1@g.us', created_by: creator }, []);
});
afterEach(() => {
try { memdb.close(); } catch {}
});
it('lista todas las tareas activas y responde por DM al admin', async () => {
const res = await AdminService.handle({
sender: ADMIN,
groupId: 'g1@g.us',
message: '/admin ver todos'
});
expect(res.length).toBe(1);
expect(res[0].recipient).toBe(ADMIN);
expect(res[0].message).toContain('Tareas activas');
expect(res[0].message).toContain('Alpha');
expect(res[0].message).toContain('Beta');
expect(res[0].message).toContain('Gamma');
});
it('respeta un límite numérico y menciona truncado cuando aplica', async () => {
const res = await AdminService.handle({
sender: ADMIN,
groupId: 'g1@g.us',
message: '/admin ver todos 2'
});
expect(res.length).toBe(1);
expect(res[0].recipient).toBe(ADMIN);
expect(res[0].message).toContain('mostrando 2');
});
it('rechaza usuarios no autorizados', async () => {
process.env.ADMIN_USERS = ADMIN; // sigue igual, pero probamos otro sender
const res = await AdminService.handle({
sender: OTHER,
groupId: 'g1@g.us',
message: '/admin ver todos'
});
expect(res.length).toBe(1);
expect(res[0].message).toContain('No estás autorizado');
});
});