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