Pular para o conteúdo principal

Status: Approved · v2.1 · SPEC-ARCH-QUALITY-001

depends_on: SPEC-ARCH-FRONTEND-001, SPEC-ARCH-BACKEND-001

used_by: IS-ZERO-00.4, IS-MVP-15.1

Arquitetura de testes e qualidade

Estratégia pragmática e rigorosa para proteger as regras de maior risco sem travar o MVP.

Estratégia

Gate mínimo

pnpm typecheck é obrigatório desde o primeiro incremento. Quando setup estiver completo: lint, unit tests e build entram no pipeline.

Prioridade de teste

  1. Auth, permission e privacy.
  2. Financeiro, idempotência e webhooks.
  3. Match/result/report/ranking.
  4. Contracts, services e mocks.
  5. Hooks/fluxos críticos.
  6. Smoke/E2E das jornadas principais.

Não existe meta global artificial de cobertura no MVP. Cobertura é observada por risco e módulo.

Definition of Done

Contract + mock + service/hook/API + estados UX + tests + docs + review. Bugs recebem regression test.

Ferramentas

Vitest para packages/shared/UI; Jest pode permanecer no NestJS se setup oficial simplificar. Testing Library para comportamento; Playwright depois que a primeira vertical estabilizar. Detox fica pós-MVP salvo necessidade concreta. Storybook documenta os adapters visuais de packages/ui (ver "Documentação viva de componentes").

Cenários obrigatórios de UI

  • Loading, success, empty e error.
  • 403/401/404/suspended/merged quando aplicável.
  • Submitting e prevenção de double submit.
  • Default e empty em toda tela importante; error nas críticas.

Documentação viva de componentes

  • Todo componente de apresentação reutilizável — adapter visual de packages/ui em apps/web/src/shared/ui-kit ou apps/mobile/src/shared/ui-kit, ou onde a plataforma consolidar esses adapters — ganha uma story Storybook (*.stories.tsx) no mesmo PR que o introduz ou altera a API pública.
  • A story cobre a variação real do componente via argTypes derivados do próprio tipo (ex.: ButtonVariant, EntityStatusTone) e do painel de Controls do Storybook, em vez de duplicar manualmente cada combinação numa story por variante.
  • Web e mobile compartilham a mesma regra; a ferramenta de renderização por plataforma pode diferir (Storybook web-first hoje; equivalente mobile é trabalho futuro rastreado à parte), mas nenhum adapter novo fica sem story pela plataforma que já tiver suporte.
  • Storybook é um projeto/deploy separado (build próprio em apps/web, fora de tools/docs-site); a referência viva (tools/docs-site) só linka pra onde ele estiver hospedado (STORYBOOK_URL), não builda nem lê as stories diretamente.

Smoke P0

  • /feed
  • /search
  • /matches
  • /teams/:slug
  • /players/:slug
  • /matches/:id
  • /championships/:slug
  • /management
  • /profile

Critérios de aceite

  • Typecheck bloqueia merge.
  • Fluxos financeiros/permissões possuem testes antes de produção.
  • Mocks são testados contra contracts.
  • Não há snapshots gigantes.
  • Componente de apresentação novo ou alterado tem story Storybook correspondente.

Histórico

  • 2.1 — adiciona "Documentação viva de componentes": todo adapter visual novo de packages/ui (web ou mobile) ganha story Storybook, alimentando a referência gerada em tools/docs-site.
  • 2.0 — versão anterior, preservada no histórico Git.