| name | escrever-testes |
| description | Escreve testes automatizados para o projeto AgtecCore usando pytest, pytest-asyncio e TestContainers. Use quando o usuário pedir para criar testes, aumentar cobertura, escrever test cases, ou validar uma implementação. Também ativa automaticamente quando o contexto menciona "escrever testes", "criar testes", "test coverage" ou arquivos em tests/. |
Escrever Testes — AgtecCore
Objetivo
Criar e manter testes automatizados assíncronos para a camada FastAPI, cobrindo contratos HTTP, regras de domínio e regressões relevantes.
Pré-requisitos
Antes de começar:
- Ler
.ia/docs/testing/strategy.md (estratégia e regras de teste do projeto)
- Identificar o módulo a ser testado e seu prefixo de rota (
/api/v1/<modulo>/)
- Verificar se já existe pasta
tests/tests_<modulo>/
Regras obrigatórias
-
Regra global: nenhuma skill pode criar, editar, mover ou remover arquivos sob o módulo de IA/agentes do projeto (se existir); demandas sobre esse módulo devem ser tratadas como análise, especificação, backlog ou orientação operacional, sem implementação direta nesse diretório.
-
Testes sempre assíncronos (async def test_*)
-
Usar TestContainers para dependências (PostgreSQL, Redis) — nunca banco real
-
Usar fixtures para setup/teardown
-
Arquivos criados em tests/tests_<modulo>/test_*.py
-
Sincronizar dependências com rtk uv sync antes de executar
-
Docker deve estar rodando antes de executar qualquer teste
-
Prefixo global de rotas: /api/v1/
Estrutura de arquivo de teste
import pytest
from httpx import AsyncClient
@pytest.mark.asyncio
async def test_nomear_cenario(async_client: AsyncClient):
payload = {...}
response = await async_client.post("/api/v1/<modulo>/endpoint/", json=payload)
assert response.status_code == 200
data = response.json()
assert data["campo"] == valor_esperado
Checklist de criação de testes
Fixtures comuns (verificar em tests/conftest.py)
@pytest.fixture
async def db_session(): ...
@pytest.fixture
async def async_client(): ...
@pytest.fixture
async def authenticated_user(): ...
Como executar antes de qualquer teste
docker info
rtk uv sync
rtk task test
rtk task test-verbose
Para testes do módulo de IA (se existir)
- Arquivo em:
tests/tests_<modulo_ia>/test_<nome_modulo>_tool.py
- Criar também:
<modulo_ia>/tests/<nome_modulo>_chat.http para validação manual
- Referências:
<modulo_ia>/tests/chat_dev_filiado.http
Referências de código
- Estratégia:
.ia/docs/testing/strategy.md
- Tests existentes:
tests/ (qualquer pasta tests_*/)
- Padrões de rotas:
.ia/docs/guides/patterns.md