51 lines
2.9 KiB
Python
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(),[])
|
|
|