Skip to content

Architecture test: the API uses Infrastructure only in Program.cs #36

Description

@MendesMat

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 projeto API, exceto Program, depende de ControlService.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 de ArchitectureTests de 4 para 5).

Fora do escopo

Dependências

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 status e git diff antes 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.
  • Program excluído pelo nome, não pelo namespace — uma classe sem namespace não escapa da regra.
  • AssemblyReference.cs na API — 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.ps1 termina 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.EntityFrameworkCore na API fora do Program.cs. Hoje não é necessário: sem um tipo da Infrastructure, um endpoint não alcança o banco.

Activity

  1. added a commit that references this issue on Oct 7, 2026
    51cafa2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions