37 lines
2.7 KiB
Python
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'],[])
|