Architecture & Core01_backend
TESTING_GUIDE
Guia de Testes - Sprint 3
🧪 Testes Automatizados
Backend Tests (Worker)
Arquivo: backend-worker/tests/index.test.ts
Como executar:
# Instalar dependências (se necessário)
cd backend-worker
npm install
# Executar testes
npm testTestes Implementados:
-
POST /api/sales/track
- ✅ Registrar venda com sucesso
- ✅ Idempotência (mesmo orderId)
- ✅ Warning quando >80% do limite
- ✅ Bloqueio quando limite atingido
- ✅ Rejeitar dados inválidos
- ✅ Rejeitar saleValue negativo
-
GET /api/sales/stats
- ✅ Retornar estatísticas corretas
- ✅ Calcular totais e percentuais
-
GET /api/sales/history
- ✅ Paginação funcionando
- ✅ Filtros por mês e ano
-
Autenticação
- ✅ Rejeitar sem token
- ✅ Rejeitar token inválido
🔍 Testes Manuais
Teste 1: Registrar Venda
Pré-requisitos:
- Backend rodando
- Usuário autenticado (FREE plan)
Passos:
# 1. Login
curl -X POST http://localhost:4000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@test.com","password":"Test123!@#"}'
# Copiar token da resposta
# 2. Registrar venda
curl -X POST http://localhost:4000/api/sales/track \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{
"orderId": "ORDER-TEST-001",
"productSku": "SKU-ABC",
"productName": "Produto Teste",
"quantity": 2,
"saleValue": 150.00
}'Resultado Esperado:
{
"message": "Venda registrada com sucesso",
"sale": {
"id": "uuid",
"saleValue": 150.00,
"createdAt": "2025-11-25T..."
},
"currentMonthTotal": 150.00,
"limit": 499.00,
"remaining": 349.00,
"percentUsed": 30.06
}Teste 2: Idempotência
Passos:
# Registrar mesma venda novamente (mesmo orderId)
curl -X POST http://localhost:4000/api/sales/track \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{
"orderId": "ORDER-TEST-001",
"productSku": "SKU-ABC",
"productName": "Produto Teste",
"quantity": 2,
"saleValue": 150.00
}'Resultado Esperado:
{
"message": "Venda já registrada",
"sale": {...},
"currentMonthTotal": 150.00,
...
}Teste 3: Warning de Limite (80%)
Passos:
# Registrar venda que ultrapassa 80% do limite
curl -X POST http://localhost:4000/api/sales/track \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{
"orderId": "ORDER-TEST-002",
"productSku": "SKU-XYZ",
"productName": "Produto Grande",
"quantity": 1,
"saleValue": 250.00
}'Resultado Esperado:
{
"message": "Venda registrada com sucesso",
...
"currentMonthTotal": 400.00,
"percentUsed": 80.16,
"warning": "Você está próximo do limite mensal"
}Teste 4: Bloqueio por Limite
Passos:
# Registrar venda que ultrapassa limite
curl -X POST http://localhost:4000/api/sales/track \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{
"orderId": "ORDER-TEST-003",
"productSku": "SKU-BIG",
"productName": "Produto Muito Grande",
"quantity": 1,
"saleValue": 150.00
}'Resultado Esperado:
{
"message": "Venda registrada com sucesso",
...
"currentMonthTotal": 550.00,
"limit": 499.00,
"remaining": 0,
"percentUsed": 110.22,
"blocked": true
}Verificar bloqueio:
# Tentar acessar API de produtos (deve falhar)
curl -X GET http://localhost:4000/api/v1/products \
-H "x-api-key: SUA_API_KEY"Resultado Esperado:
{
"error": "Limite mensal de vendas atingido",
"currentMonthSales": 550.00,
"limit": 499.00,
"plan": "FREE",
"message": "Faça upgrade do seu plano para continuar vendendo"
}Teste 5: Estatísticas
Passos:
curl -X GET http://localhost:4000/api/sales/stats \
-H "Authorization: Bearer SEU_TOKEN"Resultado Esperado:
{
"currentMonth": {
"total": 550.00,
"count": 3,
"limit": 499.00,
"remaining": 0,
"percentUsed": 110.22
},
"lastMonth": {
"total": 0,
"count": 0
},
"allTime": {
"total": 550.00,
"count": 3
},
"recentSales": [...]
}Teste 6: Histórico
Passos:
curl -X GET "http://localhost:4000/api/sales/history?page=1&limit=10" \
-H "Authorization: Bearer SEU_TOKEN"Resultado Esperado:
{
"data": [
{
"id": "uuid",
"orderId": "ORDER-TEST-003",
"productName": "Produto Muito Grande",
"saleValue": 150.00,
...
}
],
"meta": {
"total": 3,
"page": 1,
"limit": 10,
"pages": 1
}
}Teste 7: Reset Mensal (Manual)
Passos:
# Executar no container do backend
docker-compose exec backend npx tsx -e "
import { manualSalesReset } from './src/cron/salesReset.js';
await manualSalesReset();
"Verificar:
# Verificar que vendas foram resetadas
curl -X GET http://localhost:4000/api/sales/stats \
-H "Authorization: Bearer SEU_TOKEN"Resultado Esperado:
{
"currentMonth": {
"total": 0,
"count": 0,
...
}
}🎨 Testes Frontend
Teste 1: SalesDashboard Renderiza
Passos:
- Fazer login no frontend
- Ir para
/dashboard - Verificar que SalesDashboard aparece
Verificar:
- ✅ Cards de estatísticas aparecem
- ✅ Barra de progresso renderiza
- ✅ Gráfico Chart.js carrega
- ✅ Lista de vendas recentes aparece
Teste 2: Alertas de Limite
Cenário 1: 80% do limite
- Registrar vendas até 80%
- Verificar alerta amarelo aparece
Cenário 2: 95% do limite
- Registrar vendas até 95%
- Verificar alerta vermelho aparece
Cenário 3: 100% do limite
- Registrar vendas até 100%
- Verificar alerta vermelho "Limite atingido" aparece
Teste 3: Barra de Progresso
Verificar:
- ✅ Cor verde quando <80%
- ✅ Cor amarela quando 80-94%
- ✅ Cor vermelha quando ≥95%
- ✅ Percentual correto exibido
- ✅ Valor restante correto
Teste 4: Gráfico de Vendas
Verificar:
- ✅ Gráfico renderiza sem erros
- ✅ Dados aparecem corretamente
- ✅ Eixos formatados (R$)
- ✅ Tooltip funciona
🔄 Testes E2E
Teste E2E 1: Track Venda até Bloqueio
Fluxo Completo:
1. Criar usuário FREE
2. Fazer login
3. Registrar vendas até R$ 400 (80%)
→ Verificar warning amarelo no dashboard
4. Registrar venda de R$ 120 (total R$ 520)
→ Verificar bloqueio
5. Tentar acessar API de produtos
→ Verificar erro 403
6. Ver dashboard
→ Verificar alerta vermelhoTeste E2E 2: Upgrade Desbloqueia
Fluxo Completo:
1. Usuário bloqueado (R$ 520 de vendas)
2. Fazer upgrade para PRO (limite R$ 750)
3. Webhook atualiza role
4. Verificar User.isBlocked = false
5. Tentar acessar API de produtos
→ Deve funcionar ✅
6. Ver dashboard
→ Alerta desapareceTeste E2E 3: Reset Mensal
Fluxo Completo:
1. Usuário com vendas (R$ 400)
2. Executar reset manual
3. Verificar currentMonthSales = 0
4. Verificar isBlocked = false
5. Ver dashboard
→ Vendas zeradas
→ Barra de progresso em 0%✅ Checklist de Testes
Backend
- Testes criados (sales.test.ts)
- Testes executados e passando
- Cobertura >80%
Frontend
- Testes de renderização
- Testes de alertas
- Testes de gráfico
E2E
- Track venda até bloqueio
- Upgrade desbloqueia
- Reset mensal
📝 Notas
Dependências de Teste:
{
"devDependencies": {
"jest": "^29.7.0",
"@jest/globals": "^29.7.0",
"@types/jest": "^29.5.0",
"supertest": "^6.3.3",
"@types/supertest": "^6.0.0",
"ts-jest": "^29.1.0"
}
}Configuração Jest (jest.config.js):
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
roots: ['<rootDir>/tests'],
testMatch: ['**/*.test.ts'],
moduleFileExtensions: ['ts', 'js', 'json'],
};