feat: gerar Report a partir de uma Run #45
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/generate-report-from-run"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Novo botão "Gerar Report" na tela de uma Run (
POST /api/runs/{id}/generate-report).Decisões confirmadas com o usuário antes de implementar
Anexos: referência, não duplicação
Esse era o ponto que o usuário queria evitar.
RunAttachmentganhousource_attachment_id(self-FK opcional,dataagora nullable) — o passo copiado ganha sua própria linha (mantémstep.imagesfuncionando normalmente em toda a base), mas com o BLOB vazio e apontando pro anexo original via uma@property dataque resolve pro anexo de origem quando a cópia não tem bytes próprios. Validado ponta a ponta manualmente: os bytes servidos pra cópia são idênticos aos do original, e a linha da cópia temdata IS NULLno banco (zero duplicação de BLOB).Report.source_run_id(nullable,SET NULL, sem cascade) é só proveniência — apagar a run original não apaga o report, apagar o report não apaga a run original. Diferente deReport.run(a run "de suporte" exclusiva e descartável de todo report, que continua existindo do jeito que sempre existiu).O que mais mudou
TestRun.reportprecisou deforeign_keysexplícito — agora há dois caminhos de FK entretest_runs/reports(report_ide o novosource_run_id), o que quebrava toda query envolvendo Run comAmbiguousForeignKeysErroraté eu corrigir (pego pelos próprios testes).urlFn/onDeletecorretos pra evidência de step — caía no endpoint de anexo de Report/Issue (/api/images) em vez do de Run (/api/run-images), onde evidência de step sempre vive. RunDetail já fazia certo; só ficou visível agora testando um report com evidência de step de verdade.Verificação
pytest -q— 156 passed (5 testes novos cobrindo: snapshot congela status mesmo com a run mudando depois, evidência referenciada sem duplicar BLOB, achados pré-selecionados via "Abrir defeito", 404 pra run inexistente, 400 pra tentar gerar a partir da run de suporte de outro report)npx tsc --noEmit/npm run lint(0 erros) /npx vitest run(106 passed) /npm run build— todos ok/api/run-images,data IS NULLna linha copiada. Dados de teste removidos do dev depois.Chama POST /api/runs/{id}/generate-report e navega direto pro report criado. RunDetail tambem lista os reports ja gerados a partir da run (TestRun.generated_reports), pra evitar gerar duplicado sem querer. Tipos regenerados de docs/openapi.json via openapi-typescript.ExistingAttachments (linha do step, aba Tests do ReportDetail) nunca passava urlFn nem um onDelete correto -- caia no default (api.imageUrl/ api.deleteImage, endpoint de anexo de Report/Issue), mas evidencia de step sempre fica em RunAttachment (/api/run-images). Bug pre-existente (RunDetail.tsx ja fazia certo, ver urlFn={api.runImageUrl} la), so ficou visivel agora testando reports com evidencia de step de verdade.