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/db/migrations.allowed-groups.t...

43 lines
1.6 KiB
TypeScript

import { describe, it, expect } from 'bun:test';
import Database from 'bun:sqlite';
import { initializeDatabase } from '../../../src/db';
describe('Migración v9 - allowed_groups', () => {
it('crea la tabla allowed_groups', () => {
const memdb = new Database(':memory:');
expect(() => initializeDatabase(memdb)).not.toThrow();
const row = memdb
.query(`SELECT name FROM sqlite_master WHERE type='table' AND name='allowed_groups'`)
.get() as any;
expect(row?.name).toBe('allowed_groups');
});
it('enforce CHECK de status', () => {
const memdb = new Database(':memory:');
initializeDatabase(memdb);
// En bun:sqlite, exec() puede no lanzar en constraint violation. Validamos no persistencia.
memdb.exec(`
INSERT INTO allowed_groups (group_id, status, discovered_at, updated_at)
VALUES ('123@g.us', 'invalid-status', strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'));
`);
const invalidCount = memdb
.query(`SELECT COUNT(*) AS c FROM allowed_groups WHERE group_id = '123@g.us'`)
.get() as any;
expect(Number(invalidCount?.c || 0)).toBe(0);
// Inserción válida debe persistir
memdb.exec(`
INSERT INTO allowed_groups (group_id, status, discovered_at, updated_at)
VALUES ('ok@g.us', 'allowed', strftime('%Y-%m-%d %H:%M:%f','now'), strftime('%Y-%m-%d %H:%M:%f','now'));
`);
const validCount = memdb
.query(`SELECT COUNT(*) AS c FROM allowed_groups WHERE group_id = 'ok@g.us'`)
.get() as any;
expect(Number(validCount?.c || 0)).toBe(1);
});
});