Testing Backlog — SSOT
SSOT do que falta cobrir em testes na plataforma OLP. Atualizado em cada sprint. Toda nova lacuna deve ser registrada aqui antes de virar card.
Status atual da pirâmide de testes (após Sprint P0 — CI Fix):
| Camada | Arquivos | Tests | Em CI? |
|---|---|---|---|
Unit + Integration (Vitest src/**) | 76 | 794 | ✅ |
Deno (supabase/functions/**) | 85 | ~600 | ✅ |
Contract (tests/contracts/) | 1 | — | ✅ (após deploy-staging) |
Security/IDOR (tests/security/) | poucos | — | ✅ |
| E2E (Playwright) | poucos | — | ✅ |
Sprint corrente — Webhooks (P0+1)
| Item | Tipo | Status |
|---|---|---|
resend-webhook — HMAC + tolerance window + idempotência + bounce/complained → unsubscribe | Deno black-box contra staging | 🔄 em andamento |
wasender-webhook — HMAC + idempotência + status mapping + rate limit | Deno black-box | ⬜ todo |
mercadopago-webhook — adicionar contract test de assinatura ts/v1 + tipos payment.* e subscription_preapproval | Deno (existe base) | ⬜ todo |
WEBHOOK_TESTING_STANDARD.md — padrão SSOT de teste de webhook | Doc | 🔄 |
Memória mem://testing/webhook-contract-standard | Memory | ⬜ |
Definição de pronto da sprint: 3 webhooks com suite Deno completa, CI verde, doc + memória publicadas.
P1 — Anti-regressão crítica (próximas 2–3 sprints)
Hooks useAdmin* (8 hooks sem teste)
| Hook | Cobertura mínima |
|---|---|
useAdminDashboard | render + queryKey contém escola_id + onError sanitiza |
useAdminLogs | filtros (acao, periodo) + paginação |
useAdminFinanceiro | mutations + optimistic rollback |
useAdminFaturas | listagem + ações de cobrança |
useAdminComunicacao | envio + audiência |
useAdminEscolas | CRUD escola |
useAdminUsuarios | CRUD usuário + escopo de papel |
useAdminRelatorios | filtros e export |
Edge Functions sem teste (P1)
| Function | Risco | Tests obrigatórios |
|---|---|---|
admin-dashboard | leitura ampla — IDOR | auth, IDOR cross-escola, shape do payload |
admin-logs | PII | masking, filtros, IDOR |
admin-financeiro | dinheiro | IDOR, mutações com 403 em zero rows |
admin-comunicacao | envio de massa | rate limit, audiência, IDOR |
admin-faturas | dinheiro | IDOR, idempotência de cobrança |
IDOR coverage tests/security/
Para cada função admin-* acima: teste cross-escola provando 403 quando JWT de escola A tenta acessar recurso de escola B.
Sanitização de erros
Adicionar fixtures de erros Postgres reais (23505, 23503, 42501, PGRST*) ao suite unit de error-helpers.ts garantindo que nenhuma jargão técnica vaza pra UI.
Smoke RTL das páginas admin (10 páginas)
Render sem crash + presença do título + ausência de erros no console.
P2 — Cobertura de feature
Hooks restantes (46 sem teste — 57% do total)
Priorizar por:
- Hooks que fazem mutação (rollback, toast, queryKey invalidation)
- Hooks com derived data complexa (memo + filter)
- Hooks de Mural Olímpico (alto risco LGPD)
Edge Functions sem teste (~15)
mural-*(6 funções): OTP, login, snapshot, releasesportal-*: gateway, redirectimport-*: validação Excel + processamento background
Contratos externos (Contract suite)
| Provider | Cenário |
|---|---|
| Twilio (SMS) | retry, falha 4xx, custo > 0 |
| Cloudflare Worker (gateway) | redirect whitelisted, anti-loop |
| Resend (transactional) | já coberto via webhook — falta envio |
E2E flows críticos (Playwright)
- Login (CPF/INEP/CNPJ) + OTP + role switch
- Criação de aplicação pelo coordenador
- Aprovação de inscrição pelo especialista
- Ciclo trial → pagamento MP → fatura paga
P3 — Qualidade transversal
| Item | Ferramenta | Gate |
|---|---|---|
| Performance budgets (LCP/TBT) | Lighthouse CI | LCP < 2.5s nas rotas top-5 |
| Acessibilidade A11y | axe-core + Playwright | Zero violações serious/critical |
| Visual regression | Playwright snapshots | Telas admin + portal |
| Cobertura mínima | Vitest coverage | ≥ 60% global, ≥ 80% em lib/ e _shared/ |
P4 — Observabilidade do CI
- Upload de coverage (Codecov ou artifact persistente)
- Badge no README
- Tempo por job + alerta
>10min - Mutation testing (Stryker) em
_shared/esrc/lib/
Métricas de saída (definição de pronto do backlog)
| Métrica | Hoje | Meta |
|---|---|---|
| Edge Functions com teste | 74% | 100% |
| Hooks com teste | 43% | ≥ 80% |
| Páginas com smoke test | 0% | 100% |
| Contratos externos com suite | 1/5 | 5/5 |
Cobertura IDOR admin-* | parcial | 100% |
| Cobertura global (Vitest + Deno) | desconhecida | ≥ 60% |
Como contribuir com este backlog
- Encontrou superfície sem teste? Adicione linha à tabela P1/P2/P3 conforme criticidade.
- Concluiu item? Mover para
## Históricono final + atualizar Métricas. - Mudou prioridade? Atualizar com nota
decisão YYYY-MM-DD: motivo.
Este arquivo é referenciado em:
docs/development/TESTING_MASTER.md(seção "Backlog")docs/development/AUDIT.md(@audit testes)- Sidebar:
Testes > Backlog
Histórico
- 2026-05-09 — Incidente CI (deno-tests + security-tests): 477 falhas Deno + 1 falha security tests classificadas em AUDIT_TEST_BREAKAGE_2026-05-09. Corrigidos: env do step
deno-tests(passada via secrets STAGING_*),pdf-helpers-xss.test.tsmovido para suite jsdom. Em aberto: D1 (fallback hardcoded eme2e-login.contract.test.ts), D2 (reavaliar 401 antes de Zod após CI verde), D3 (helperrequireEnv). Confirmado: OLP não depende de Node 20 (CI em Node 22). - 2026-05-09 — Sprint P0 (CI Fix) concluída: 794 Vitest tests + 600 Deno tests agora rodam em CI (antes só 4 sentinelas).
getUserFriendlyErrorganhou padrões para Postgres/PGRST/connection. Modais de senha alinhados ao SSOT "Sua segurança importa".