Pular para conteúdo

Análise da Bateria de Testes do Projeto

A bateria de testes do projeto está organizada em uma estrutura bem definida dentro do diretório backend/tests, seguindo uma arquitetura de testes em três camadas distintas:

Estrutura da Bateria de Testes

A pasta /tests está dividida em três subdiretórios principais:

  1. /test_repositories - Testes da camada de dados
  2. /test_services - Testes da camada de serviços (lógica de negócio)
  3. /test_routers - Testes da camada de API (endpoints)

Além disso, há arquivos auxiliares como conftest.py e test_main.py.

Camadas de Cobertura dos Testes

1. Camada de Repositórios (/test_repositories)

  • Testes presentes: test_ticket_repository.py, test_user_repository.py
  • Objetivo: Testar diretamente as operações CRUD e consultas no banco de dados
  • Cobertura:
  • Criação, leitura, atualização e exclusão de tickets e usuários
  • Filtragem por diferentes critérios (por solicitante, por status, por técnico)
  • Validação de integridade dos dados salvos

2. Camada de Serviços (/test_services)

  • Testes presentes: test_auth_service.py, test_ticket_service.py, test_user_service.py
  • Objetivo: Testar a lógica de negócio e regras de validação
  • Cobertura:
  • Criação e gerenciamento de tickets
  • Atribuição de técnicos aos chamados
  • Autenticação e autorização de usuários
  • Manipulação de status dos chamados
  • Tratamento de erros e exceções (HTTPException)

3. Camada de Roteadores/API (/test_routers)

  • Testes presentes: test_auth_router.py, test_technicians_router.py, test_tickets_router.py, test_users_router.py
  • Objetivo: Testar os endpoints da API e a integração completa do sistema
  • Cobertura:
  • Endpoints de autenticação (login, registro)
  • Operações CRUD via endpoints HTTP
  • Controles de acesso e permissões por papel (solicitante, técnico, gerente)
  • Validação de entrada e saída de dados
  • Códigos de status HTTP apropriados

Configuração de Testes

O projeto utiliza o framework pytest com suporte para testes assíncronos (asyncio), conforme configurado no arquivo pyproject.toml.

O arquivo conftest.py contém fixtures importantes como: - Sessão de banco de dados isolada para cada teste - Cliente HTTP assíncrono para testes de API - Funções utilitárias para criação de dados de teste - Usuários padrão (solicitante, técnico, gerente) com credenciais pré-definidas - Headers de autorização com tokens JWT

Características Importantes

  • Isolamento: Cada teste opera com uma sessão de banco de dados limpa, garantindo independência entre os testes
  • Fixtures reutilizáveis: As fixtures permitem a criação padronizada de dados de teste
  • Testes assíncronos: Todos os testes utilizam o marcador @pytest.mark.asyncio adequado para o framework FastAPI
  • Mocks e sobreposição de dependências: O mecanismo de substituição de dependências do FastAPI é utilizado para isolar os testes
  • Cobertura funcional: Os testes cobrem casos de sucesso, validação de entradas, controle de acesso e tratamento de erros

Essa arquitetura de testes em camadas permite validar o sistema em diferentes níveis de abstração, desde as operações básicas no banco de dados até a funcionalidade completa dos endpoints da API, assegurando a qualidade e confiabilidade do sistema.