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:
/test_repositories- Testes da camada de dados/test_services- Testes da camada de serviços (lógica de negócio)/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.asyncioadequado 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.