test: agregar tests de ResponseQueue para persistencia
Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>pull/1/head
parent
6c70e1dce7
commit
cbb6f4d769
@ -0,0 +1,93 @@
|
||||
import { describe, test, expect, beforeAll, afterAll, beforeEach } from 'bun:test';
|
||||
import { Database } from 'bun:sqlite';
|
||||
import { initializeDatabase } from '../../../src/db';
|
||||
import { ResponseQueue } from '../../../src/services/response-queue';
|
||||
|
||||
let testDb: Database;
|
||||
let envBackup: NodeJS.ProcessEnv;
|
||||
|
||||
describe('ResponseQueue (persistent add)', () => {
|
||||
beforeAll(() => {
|
||||
envBackup = { ...process.env };
|
||||
testDb = new Database(':memory:');
|
||||
initializeDatabase(testDb);
|
||||
// Inyectar DB de pruebas
|
||||
(ResponseQueue as any).dbInstance = testDb;
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
process.env = envBackup;
|
||||
testDb.close();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
// Limpiar tabla entre tests
|
||||
testDb.exec('DELETE FROM response_queue');
|
||||
// Valor por defecto del número del bot (se puede cambiar en tests)
|
||||
process.env.CHATBOT_PHONE_NUMBER = '1234567890';
|
||||
});
|
||||
|
||||
test('should persist queued responses to database', async () => {
|
||||
const before = testDb.query("SELECT COUNT(*) as count FROM response_queue").get() as any;
|
||||
expect(before.count).toBe(0);
|
||||
|
||||
await ResponseQueue.add([
|
||||
{ recipient: '111', message: 'hola 1' },
|
||||
{ recipient: '222', message: 'hola 2' },
|
||||
]);
|
||||
|
||||
const after = testDb.query("SELECT COUNT(*) as count FROM response_queue").get() as any;
|
||||
expect(after.count).toBe(2);
|
||||
|
||||
const rows = testDb.query("SELECT recipient, message, status FROM response_queue ORDER BY id").all() as any[];
|
||||
expect(rows[0].recipient).toBe('111');
|
||||
expect(rows[0].message).toBe('hola 1');
|
||||
expect(rows[0].status).toBe('queued');
|
||||
expect(rows[1].recipient).toBe('222');
|
||||
expect(rows[1].message).toBe('hola 2');
|
||||
expect(rows[1].status).toBe('queued');
|
||||
});
|
||||
|
||||
test('should skip messages addressed to the bot number', async () => {
|
||||
process.env.CHATBOT_PHONE_NUMBER = '555111222';
|
||||
|
||||
await ResponseQueue.add([
|
||||
{ recipient: '555111222', message: 'no debe encolarse' },
|
||||
{ recipient: '333', message: 'debe encolarse' },
|
||||
]);
|
||||
|
||||
const count = testDb.query("SELECT COUNT(*) as count FROM response_queue").get() as any;
|
||||
expect(count.count).toBe(1);
|
||||
|
||||
const row = testDb.query("SELECT recipient, message FROM response_queue").get() as any;
|
||||
expect(row.recipient).toBe('333');
|
||||
expect(row.message).toBe('debe encolarse');
|
||||
});
|
||||
|
||||
test('should ignore entries without recipient or message', async () => {
|
||||
await ResponseQueue.add([
|
||||
// inválidos:
|
||||
{ recipient: '', message: 'sin destinatario' } as any,
|
||||
{ recipient: '444', message: '' } as any,
|
||||
// válido:
|
||||
{ recipient: '444', message: 'ok' },
|
||||
]);
|
||||
|
||||
const rows = testDb.query("SELECT recipient, message FROM response_queue ORDER BY id").all() as any[];
|
||||
expect(rows.length).toBe(1);
|
||||
expect(rows[0].recipient).toBe('444');
|
||||
expect(rows[0].message).toBe('ok');
|
||||
});
|
||||
|
||||
test('should throw if database error occurs (e.g., missing table)', async () => {
|
||||
// Provocar error: eliminar tabla
|
||||
testDb.exec('DROP TABLE response_queue');
|
||||
|
||||
await expect(ResponseQueue.add([{ recipient: '999', message: 'x' }]))
|
||||
.rejects
|
||||
.toBeTruthy();
|
||||
|
||||
// Restaurar esquema para no afectar otros tests
|
||||
initializeDatabase(testDb);
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue