Files

51 lines
2.9 KiB
Python

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(),[])