Testes de componente para as vistas que nenhum teste renderizava - #80
Merged
Merged
Conversation
Os 86 testes unitários cobrem funções puras e os grupos de browser cobriam
percursos pontuais. O `KpisPanel` (1200 linhas), o `TimesPanel` e o
`AnnualPlanPanel` não eram renderizados por nenhum — e um erro de render neles
não falha nada: o React desmonta a árvore e a vista fica em branco, sem
mensagem. É a rede que falta antes de partir esses componentes e de absorver o
editor de workflow imperativo.
Cinco grupos novos (21 testes):
· as três vistas e as três sub-vistas do Tracking, percorridas com um
processo real — inclui os dois painéis de KPIs, onde o cartão PROCESSOS
ATIVOS é lido do ecrã e comparado com a sessão;
· pesquisa e filtros da lista, contra o contador que o utilizador lê — é o
par que uma memoização mal feita põe a discordar sem dar erro;
· ida e volta do backup: exportar pelo caminho de download, eliminar o
processo e voltar a carregar o ficheiro que a própria aplicação escreveu.
O envelope é inspeccionado (`data`, `version`, `annualPlan`);
· a sessão sobrevive a um refresh e o modo editor não — o PIN é pedido
outra vez;
· Plano Anual: entrada nova, «Iniciar», e o `linkedProcessId` verificado
contra a sessão.
Corrigido também um flake que já cá estava: `/x` é o `src` dos payloads de XSS
(`<img src=x onerror=…>`). O sanitizador tira o handler e deixa a imagem, que é
inerte, mas o browser pede-a na mesma e o 404 entrava na consola como erro —
contaminando a verificação «nenhum erro de consola» de grupos sem relação
nenhuma com ele, conforme o pedido chegasse antes ou depois da asserção. O
servidor de testes responde-lhe 204; um recurso da aplicação que falte tem um
caminho a sério e continua a dar 404.
`npm run ci:full` corre o `ci` e os testes de browser. O `ci` fica rápido como
estava.
O README passa a documentar dois critérios para um teste existir, em vez de um:
a falha que já aconteceu, e a rede de uma reestruturação planeada. O segundo é
novo e é o que estes grupos invocam — a alternativa era contrariar em silêncio
a regra que lá estava escrita. O que continua a não haver é teste escrito por
cobertura.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XwDMNpJzcA3Z2nP3jjwuJd
qzte
marked this pull request as ready for review
September 14, 2026 20:28
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ponto #14 do plano de melhorias: a rede de segurança antes de #11 (modularização) e #10–#12 (partir componentes, unificar arquitecturas).
O que faltava
Os 86 testes unitários cobrem funções puras; os grupos de browser cobriam percursos pontuais. O
KpisPanel(1200 linhas), oTimesPanele oAnnualPlanPanelnão eram renderizados por nenhum teste. Um erro de render neles não falha nada: o React desmonta a árvore e a vista fica em branco, sem mensagem nenhuma. Refactorizar 2700 linhas sobre isso é aposta, não engenharia.Cinco grupos novos (21 testes)
PROCESSOS ATIVOSé lido do ecrã e comparado com a sessãofilterede o contador que o utilizador lê — o par que uma memoização mal feita (#9) põe a discordar sem dar errodata,version,annualPlan)linkedProcessIdverificado contra a sessão. É essa ligação que faz os KPIs executivos baterem certoUm flake pré-existente corrigido
/xé osrcdos payloads de XSS destes testes ('<img src=x onerror=…>'). O sanitizador tira o handler e deixa a imagem, que é inerte — mas o browser pede-a na mesma, e o 404 entrava na consola como erro. Contaminava a verificação «nenhum erro de consola» de grupos sem relação nenhuma com ele, de forma intermitente conforme o pedido chegasse antes ou depois da asserção.O servidor de testes responde-lhe agora 204. Não esconde nada: um recurso da aplicação que falte tem um caminho a sério e continua a dar 404.
npm run ci:fullci+ testes de browser, para correr antes de abrir um PR. Onpm run cifica rápido como estava — é o que se corre a cada alteração.Uma decisão que vale a pena discutir
O README dizia, com bons argumentos, que o critério para um teste existir é um só: corresponder a uma falha que já aconteceu aqui. Estes testes não cumprem esse critério — são caracterização, não regressão.
Em vez de os acrescentar em silêncio contra a regra escrita, o README passa a documentar dois critérios: a falha que já aconteceu (que continua a ser o principal) e «ser a rede de uma reestruturação planeada», com a justificação explícita. O que continua a não haver é teste escrito por cobertura: um teste que não saiba dizer que falha impede — passada ou futura — não entra.
Se preferires manter o critério único, digo-o já: metade destes grupos não sobrevive a essa regra e o refactor de #10–#12 fica sem rede.
Verificação
npm run cipassa. Nos testes de browser, 62 passam; as 11 falhas são todasERR_CERT_AUTHORITY_INVALIDno Google Fonts — o proxy TLS do ambiente onde isto foi desenvolvido, idêntico emmain. Três corridas consecutivas deram exactamente o mesmo resultado (o flake do/xdesapareceu). O CI do GitHub é que dá o veredicto sobre as 11.🤖 Generated with Claude Code
https://claude.ai/code/session_01XwDMNpJzcA3Z2nP3jjwuJd
Generated by Claude Code