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
- Auth, permission e privacy.
- Financeiro, idempotência e webhooks.
- Match/result/report/ranking.
- Contracts, services e mocks.
- Hooks/fluxos críticos.
- 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/uiemapps/web/src/shared/ui-kitouapps/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
argTypesderivados 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 detools/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 depackages/ui(web ou mobile) ganha story Storybook, alimentando a referência gerada emtools/docs-site.2.0— versão anterior, preservada no histórico Git.