import tempfile import unittest from pathlib import Path from conversa import Memoria, validar_resposta from conversa import resposta_factual from conversa import mensagens_modelo from datetime import datetime, timezone, timedelta class TestConversa(unittest.TestCase): def test_mudanca_de_assunto_nao_reinjeta_resposta_anterior(self): history=[dict(role='user',content='Por que o céu é azul?'),dict(role='assistant',content='O céu é azul porque a luz passa pela atmosfera.'),dict(role='user',content='Está bravo?')] messages=mensagens_modelo(history,[dict(texto='O usuário se chama Jullio')]) self.assertEqual([m['role'] for m in messages],['system','user']) self.assertIn('Está bravo?',messages[-1]['content']) self.assertNotIn('O céu é azul porque',str(messages)) self.assertIn('Jullio',messages[0]['content']) def test_contexto_nao_reusa_respostas_antigas_defeituosas(self): with tempfile.TemporaryDirectory() as d: path=Path(d)/'memoria.db' import sqlite3 with sqlite3.connect(path) as db: db.execute('CREATE TABLE mensagens(id INTEGER PRIMARY KEY,papel TEXT,texto TEXT)') db.execute("INSERT INTO mensagens(papel,texto) VALUES ('assistant','Estou brincando com você')") db.close() m=Memoria(path);m.registrar('user','Quanto é 2 + 3?') self.assertEqual(len(m.historico()),2) self.assertEqual(m.historico(contexto=True),[{'role':'user','content':'Quanto é 2 + 3?'}]) def test_horario_usa_relogio_e_nao_modelo(self): agora=datetime(2026,10,5,9,42,tzinfo=timezone(timedelta(hours=-3))) self.assertIn('09:42',resposta_factual('Que horas são?',agora)['texto']) self.assertIsNone(resposta_factual('Quanto é 2 + 3?',agora)) def test_memoria_persiste_e_apaga(self): with tempfile.TemporaryDirectory() as d: path=Path(d)/'memoria.db' m=Memoria(path) ident=m.lembrar('Meu nome é Jullio') self.assertEqual(Memoria(path).listar()[0]['texto'],'Meu nome é Jullio') m.apagar(ident) self.assertEqual(m.listar(),[]) def test_resposta_limitada_sem_comandos(self): self.assertEqual(validar_resposta({'texto':'Olá!','gesto':'feliz'})['texto'],'Olá!') self.assertEqual(validar_resposta({'texto':'Bom dia, Carinha!','gesto':'feliz'})['texto'],'Bom dia!') for data in ({'texto':'x','gesto':'motor'}, {'texto':'x'*281,'gesto':'feliz'}, {'texto':'','gesto':'feliz'}): with self.assertRaises(ValueError):validar_resposta(data) def test_limpeza_remove_historico_e_memoria(self): with tempfile.TemporaryDirectory() as d: m=Memoria(Path(d)/'memoria.db');m.lembrar('Gosto de azul');m.registrar('user','Oi') m.limpar() self.assertEqual(m.historico(),[]);self.assertEqual(m.listar(),[])