coda/docs/testing.md

2.9 KiB

Como Testar Localmente

1. Dependências (Fedora)

# ffmpeg com libmp3lame (via RPM Fusion)
sudo dnf install -y https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install -y ffmpeg

2. Setup inicial

make setup     # baixa Tailwind + DaisyUI + htmx, cria .env

3. Configure o .env

# edite o .env
MUSIC_PATH=./testdata/music   # ou um diretório com .flac
DB_PATH=./data/coda.db
LIDARR_URL=                   # deixe vazio se não tiver Lidarr
LIDARR_API_KEY=

4. Crie um diretório de teste com FLACs

mkdir -p testdata/music/"Artist"/"Album"

# Gere um FLAC de 1s para teste:
ffmpeg -f lavfi -i sine=frequency=440:duration=1 \
  -c:a flac testdata/music/Artist/Album/01.flac

5. Compile e rode

make run          # dev: templates do disco, hot-reload
# ou:
make run-prod     # produção: assets embutidos

6. Teste as rotas HTTP

curl localhost:8080/health                           # → {"status":"ok"}
curl localhost:8080/                                 # → HTML do dashboard
curl localhost:8080/jobs                             # → tabela de jobs
curl localhost:8080/logs                             # → tabela de logs
curl localhost:8080/settings                         # → formulário de config

7. Teste o pipeline manual (Library)

Abra http://localhost:8080/library no navegador:

  1. Clique "Scan for FLACs"
  2. Selecione o álbum descoberto
  3. Clique "Convert Selected"
  4. O job aparece em /jobs como done
  5. O .flac original é removido e o .mp3 gerado no mesmo diretório

8. Teste o webhook do Lidarr

# Health check do Lidarr (eventType: Test):
curl -XPOST localhost:8080/webhook/lidarr \
  -H "Content-Type: application/json" \
  -d '{"eventType":"Test"}'
# → 200 {"status":"ok"}

# Import real (requer path válido sob MUSIC_PATH):
curl -XPOST localhost:8080/webhook/lidarr \
  -H "Content-Type: application/json" \
  -d '{"eventType":"AlbumImport","artist":{"name":"Artist","path":"<abs-path>"},"album":{"title":"Album"}}'
# → 202 {"job_id":"..."}

9. Rode os testes

go test ./...     # todos os pacotes

Observação: testes que dependem de ffmpeg/ffprobe usam t.Skip se os binários não forem encontrados no PATH.

10. Modo dry run

DRY_RUN=true make run

Todas as ações destrutivas (conversão, remoção de FLACs, chamadas ao Lidarr) são logadas mas não executadas. Útil para validação sem alterar arquivos.

Fluxo completo

Webhook ou Library → Fila (Queue)
    → Scheduler (janela de trabalho)
        → Worker Pool (WORKERS simultâneos)
            → ffmpeg (FLAC→MP3 320k CBR)
            → ffprobe (validação)
            → remoção dos FLACs
            → rescan do Lidarr

Todos os estados são persistidos no SQLite (data/coda.db) e visíveis na UI.