Repository navigation
Architecture test: the API uses Infrastructure only in Program.cs #36
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Milestone
Description
Contexto
A decisão 2 permite que a API use a Infrastructure só para registrar os serviços, no Program.cs. Hoje o código cumpre isso, mas nenhum teste garante: um endpoint poderia receber o AppDbContext e consultar o banco sem passar por um handler. As issues #9, #10 e #11 criam a maior parte dos endpoints de M1, então a regra entra antes delas (decisão 28, "Planejada").
Escopo
- Um teste novo em
tests/ControlService.ArchitectureTests/LayerDependencyTests.cs: nenhum tipo do projetoAPI, excetoProgram, depende deControlService.Infrastructure. - Arquivo novo
src/ControlService.API/AssemblyReference.cs, igual ao das outras três camadas, para o teste localizar o projeto. - Prova do Red por violação temporária, desfeita antes do commit (ver "Testes").
- Atualização de
docs/decisoes-de-arquitetura.md: decisão 28 (quinta linha da tabela, custo "cinco testes", remoção do trecho "Planejada") e decisão 26 (contagem deArchitectureTestsde 4 para 5).
Fora do escopo
- Proibir a
APIde usarMicrosoft.EntityFrameworkCorefora doProgram.cs— recomendação futura. - Corrigir o corpo da Enforce per-screen authorization and check the account on every request #9, que ainda cita cache —
/levantar-issue 9. - Qualquer mudança em endpoints, pacotes, migrations ou contrato.
Dependências
- Decisões 2 e 28 de
docs/decisoes-de-arquitetura.md. - Pacote
NetArchTest.Rules1.3.2, já instalado. - Deve ser entregue antes da Enforce per-screen authorization and check the account on every request #9.
Riscos
- O NetArchTest pode não enxergar a dependência dentro de uma lambda de endpoint — percebe-se se o teste continuar verde com a violação temporária. Nesse caso, parar e avisar o dono, sem trocar de pacote nem de abordagem.
- O filtro pode excluir tipos demais e o teste passar sem examinar nada — a mesma violação temporária revela.
- A violação temporária pode ir para o commit por engano — conferir com
git statusegit diffantes do commit: só os arquivos do escopo podem aparecer.
Decisões do levantamento
- Red provado por violação temporária, sem teste permanente do próprio teste — não deixa código para manter e usa o formato real do atalho.
Programexcluído pelo nome, não pelo namespace — uma classe sem namespace não escapa da regra.AssemblyReference.csnaAPI— segue o padrão das outras camadas.
Testes
| ID | Teste | Camada | Regra | Resultado esperado |
|---|---|---|---|---|
| T01 | Deve reprovar qualquer tipo da API, fora do Program, que dependa de ControlService.Infrastructure |
Arquitetura | Decisões 2 e 28 | Verde no código atual. Com a violação temporária (parâmetro AppDbContext numa lambda de AuthEndpoints.cs), vermelho com a mensagem Forbidden dependencies found in: seguida de ControlService.API.Auth.AuthEndpoints |
Evidência do Red: a saída do teste falhando com a violação temporária entra no pull request e no relatório final.
Sem teste próprio: AssemblyReference.cs da API — coberto por T01.
Critérios de aceite
- O teste T01 passa.
- O relatório final mostra a saída de T01 falhando com a violação temporária e o nome do tipo infrator.
- O diff do pull request não contém a violação temporária.
-
check.ps1termina sem avisos, com todos os testes do projeto verdes. -
docs/atualizado no mesmo pull request:docs/decisoes-de-arquitetura.md(decisões 26 e 28).
Recomendações futuras
- Proibir também
Microsoft.EntityFrameworkCorenaAPIfora doProgram.cs. Hoje não é necessário: sem um tipo daInfrastructure, um endpoint não alcança o banco.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Activity
test(api): forbid the API from using Infrastructure outside Program (#47
docs: update the test counts of decision 26 (#48)