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
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');
|
|
});
|
|
});
|