"""Testes do catálogo independente de trilhas musicais.""" import tempfile import unittest from pathlib import Path from engine.integracoes.audio.modelos_de_analise_musical import ( PontuacaoDeEtiqueta, ResultadoDaAnaliseMusical, ) from engine.persistencia import RepositorioDeTrilhasSQLite class TesteRepositorioDeTrilhasSQLite(unittest.TestCase): """Garante o ciclo de vida e a persistência da análise musical.""" def test_registra_pasta_atualiza_status_e_salva_etiquetas(self): with tempfile.TemporaryDirectory() as diretorio: pasta = Path(diretorio) / "trilhas" pasta.mkdir() arquivo = pasta / "tema.wav" arquivo.write_bytes(b"audio de teste") repositorio = RepositorioDeTrilhasSQLite(Path(diretorio) / "trilhas.db") trilhas = repositorio.registrar_pasta_e_arquivos(pasta, (arquivo,)) repositorio.iniciar_analise(trilhas[0].identificador) repositorio.registrar_analise( trilhas[0], ResultadoDaAnaliseMusical( caminho_do_arquivo=arquivo, duracao_em_segundos=12.5, generos=("Blues",), pontuacoes_de_genero=(PontuacaoDeEtiqueta("Blues", 0.91),), ), ) banco = repositorio.conexao trilha = banco.execute("SELECT status, hash_do_conteudo FROM trilhas_musicais").fetchone() etiqueta = banco.execute("SELECT tipo, etiqueta, confianca FROM etiquetas_musicais").fetchone() banco.close() self.assertEqual(trilha[0], "concluida") self.assertEqual(len(trilha[1]), 64) self.assertEqual(tuple(etiqueta), ("genero", "Blues", 0.91)) def test_reprocessamento_da_mesma_pasta_nao_duplica_trilha(self): with tempfile.TemporaryDirectory() as diretorio: pasta = Path(diretorio) / "trilhas" pasta.mkdir() arquivo = pasta / "tema.mp3" arquivo.write_bytes(b"audio") repositorio = RepositorioDeTrilhasSQLite(Path(diretorio) / "trilhas.db") primeira = repositorio.registrar_pasta_e_arquivos(pasta, (arquivo,)) segunda = repositorio.registrar_pasta_e_arquivos(pasta, (arquivo,)) quantidade = repositorio.conexao.execute("SELECT COUNT(*) FROM trilhas_musicais").fetchone()[0] repositorio.conexao.close() self.assertEqual(primeira[0].identificador, segunda[0].identificador) self.assertEqual(quantidade, 1) def test_arquivo_alterado_volta_para_aguardando(self): with tempfile.TemporaryDirectory() as diretorio: pasta = Path(diretorio) / "trilhas" pasta.mkdir() arquivo = pasta / "tema.wav" arquivo.write_bytes(b"audio") repositorio = RepositorioDeTrilhasSQLite(Path(diretorio) / "trilhas.db") trilha = repositorio.registrar_pasta_e_arquivos(pasta, (arquivo,))[0] repositorio.iniciar_analise(trilha.identificador) repositorio.registrar_analise(trilha, ResultadoDaAnaliseMusical(caminho_do_arquivo=arquivo)) arquivo.write_bytes(b"audio alterado") atualizada = repositorio.registrar_pasta_e_arquivos(pasta, (arquivo,))[0] repositorio.conexao.close() self.assertEqual(atualizada.status, "aguardando") if __name__ == "__main__": unittest.main()