Pular para o conteúdo principal

Estratégia de testes

Última atualização: 16/09/2026.

O produto não tem PHPUnit / Pest / Cypress neste repositório. A qualidade hoje é checklist manual + php -l + smoke de health/login. Este documento define o que testar, a cobertura esperada quando a suíte nascer, e o mínimo aceitável em cada PR.

Pirâmide desejada (alvo)

CamadaAlvoEstado atual
Unidade (serviços puros, RBAC, parse de taxa)60% dos casos de regrainexistente
Integração (endpoint + MySQL de teste)fluxos de escrita por móduloinexistente
Contrato HTTP (OpenAPI / snapshot JSON)100% dos endpoints documentadoscatálogo em docs/api/
UI (smoke login + um CRUD)5–8 jornadasmanual
Exploratório / complianceKYC, tenant leakmanual

Quando PSR-4 avançar (plano-migracao-psr4.md), os serviços deixam de depender de $GLOBALS e a camada unitária vira viável.

Como rodar o que existe

php -l backend/api/auth/login.php
# recorte nos arquivos do PR
git diff --name-only --diff-filter=ACM | findstr /R "\.php$"
node --check assets/js/pages/dashboard/dashboard-page.js
npm run build:css
curl -s http://localhost:8080/backend/api/health.php

Migrations: aplicar em banco local/HML, nunca como teste em prod.

Matriz mínima por PR (obrigatória)

Para qualquer mudança em backend/api ou serviço:

CasoEsperado
Sem cookie de sessão401 (exceto health, login, webhook, API externa)
Sem flag403
Super-admin200 no caminho feliz
Outro White Label404/403 ou lista vazia — nunca o registro alheio
CSRF ausente em POST403/400 nos módulos que já exigem (tarefas, comercial, permissões, WL delete)
Método errado405 se o endpoint chama backend_require_method

Muitos endpoints ainda não travam o verbo HTTP. Não assuma 405.

Cobertura por domínio (checklist)

Auth

  • Login ok / senha errada / usuário inativo / rate limit (6ª tentativa).
  • Forgot + reset com token expirado.
  • Logout destrói sessão; fingerprint UA divergente derruba sessão.

RBAC / tenant

  • Flag no usuário mas fora do escopo do WL → 403.
  • Módulo tasks / leads desligado em tenant_modules → menu some e API 403.
  • Representante vê só a hierarquia (users.user_id).

Estabelecimentos

  • Cadastro incompleto permanece cadastro_pendente.
  • Docs obrigatórios completos → analise_compliance.
  • Aprovado/reprovado não rebaixa sozinho.
  • Troca de representante gera linha em logs_troca_representante.
  • Painel user_ec envia token de definir senha, não senha em claro.

Precificação

  • Herança: usuário novo copia taxa do WL/pai.
  • MDR vs custo efetivo não se misturam na UI errada.
  • Excluir plano vinculado a EC deve falhar.

Comercial / Tarefas

  • due_date de tarefa: não fim de semana, ≥ 3 dias úteis, ≤ +90 dias.
  • Máx. 3 docs / 10 MB por tarefa.
  • Kanban ≤ 200 cards; mudança de status exige flag e (hoje) super-admin no caminho de change-status — revalidar no código se isso mudar.
  • Places: quota da plataforma, não do WL.

Financeiro

  • API externa sem token → 401.
  • Export CSV não vaza WL.

Assinaturas

  • Webhook com HMAC inválido → 401.
  • Replay: event_hash único.

Dados de teste

Use tenants fictícios. Mascare CPF/CNPJ. Não copie uploads/ de produção. Bandeiras: seed 20260728_seed_bandeiras_base.php.

Quando automatizar primeiro

Ordem sugerida (maior risco / menor fixture):

  1. backend_permission_user_can / Política B (escopo WL)
  2. Rate limit de login
  3. CSRF helper
  4. backend_parse_percent_rate
  5. Status machine de estabelecimento
  6. Um teste de API health.php + login.php com MySQL de CI

Ferramenta candidata: PHPUnit 10 + MySQL de serviço no CI, quando o CI existir.