Files

37 lines
2.7 KiB
Python

import unittest,tempfile,sqlite3,json
from pathlib import Path
from treinamento import Treinamento,validar_receita
class BibliotecaTest(unittest.TestCase):
def test_criar_editar_excluir_desfazer_persistente(self):
with tempfile.TemporaryDirectory() as d:
p=Path(d)/'treino.db';t=Treinamento(p,iniciar=False)
t.alterar_reacao('criar',dados=dict(nome='Ideia',motivo='Uma ideia',caractere='💡',local='olhos'))
row=t.status()['reacoes'][0];ident=row['id']
t.alterar_reacao('editar',ident,dict(nome='Treino',motivo='Musculação',caractere='💪',local='olhos'))
self.assertEqual(t.status()['reacoes'][0]['receita']['emoji']['caractere'],'💪')
t=Treinamento(p,iniciar=False);t.alterar_reacao('desfazer')
self.assertEqual(t.status()['reacoes'][0]['receita']['nome'],'Ideia')
t.alterar_reacao('ativar',ident,dict(ativa=False));self.assertFalse(t.status()['reacoes'][0]['ativa'])
t.alterar_reacao('desfazer');self.assertTrue(t.status()['reacoes'][0]['ativa'])
t.alterar_reacao('feedback',ident,dict(valor=-1));self.assertEqual(t.status()['reacoes'][0]['feedback'],-1)
t.alterar_reacao('desfazer');self.assertEqual(t.status()['reacoes'][0]['feedback'],0)
t.alterar_reacao('duplicar',ident);self.assertEqual(len(t.status()['reacoes']),2)
t.alterar_reacao('desfazer');self.assertEqual(len(t.status()['reacoes']),1)
t.alterar_reacao('excluir',ident);self.assertEqual(t.status()['reacoes'],[])
t.alterar_reacao('desfazer');self.assertEqual(t.status()['reacoes'][0]['id'],ident)
def test_migracao_preserva_svg(self):
with tempfile.TemporaryDirectory() as d:
p=Path(d)/'treino.db'
recipe=dict(nome='Desenho',motivo='Original',simbolo='nenhum',legenda='',passos=[dict(olhos='aberto',boca='sorriso',cor='#5cd6ff',dx=0,dy=0,escala=1,duracao=2)],figurinha=dict(nome='SVG',local='olhos',formas=[dict(caminho='M 10 10 L 90 90 Z',cor='#123456')]))
with sqlite3.connect(p) as db:
db.execute('CREATE TABLE reacoes(id INTEGER PRIMARY KEY,horario REAL,receita TEXT,feedback INTEGER DEFAULT 0)');db.execute('INSERT INTO reacoes VALUES (1,0,?,1)',(json.dumps(recipe),))
db.close()
t=Treinamento(p,iniciar=False);self.assertEqual(t.status()['reacoes'][0]['receita'],recipe)
t.alterar_reacao('editar',1,dict(nome='Emoji',motivo='Mudança',caractere='💡',local='olhos'))
t.alterar_reacao('desfazer');self.assertEqual(t.status()['reacoes'][0]['receita'],recipe)
def test_edicao_invalida_nao_modifica(self):
with tempfile.TemporaryDirectory() as d:
t=Treinamento(Path(d)/'treino.db',iniciar=False)
with self.assertRaises(ValueError):t.alterar_reacao('criar',dados=dict(nome='Teste',motivo='Teste',caractere='<script>',local='olhos'))
self.assertEqual(t.status()['reacoes'],[])