- criada a guia Trilhas com processamento em lote e progresso por música - simplificada a guia Trilhas para ocultar a configuração interna dos modelos Resumo: - 12 arquivos alterados - 1 novos - 11 modificados - 0 removidos 11 files changed, 173 insertions(+), 41 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/analisar_trilhas.py - code/engine/carregar_plano_de_edicao.py - code/engine/executar_scanner.py - code/engine/persistencia/__init__.py - code/engine/persistencia/repositorio_de_trilhas.py - code/engine/testes/test_carregar_plano_de_edicao.py - code/engine/testes/test_executar_scanner.py - code/engine/testes/test_repositorio_de_trilhas.py
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
"""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)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|