OBrain Sovereign Engine
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 test

Testes Implementados:

  1. 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
  2. GET /api/sales/stats

    • ✅ Retornar estatísticas corretas
    • ✅ Calcular totais e percentuais
  3. GET /api/sales/history

    • ✅ Paginação funcionando
    • ✅ Filtros por mês e ano
  4. 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:

  1. Fazer login no frontend
  2. Ir para /dashboard
  3. 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 vermelho

Teste 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 desaparece

Teste 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'],
};

On this page