# Testes e Qualidade

## Pirâmide

- unitários: value objects, cálculos, transições e regras;
- integração: repositories, transações, constraints e filas;
- aplicação: casos de uso completos com banco;
- contrato: adapters com fixtures oficiais/sanitizadas;
- ponta a ponta: fluxos críticos no navegador;
- segurança: autorização, isolamento e entradas hostis;
- desempenho: listagens, reserva, importação e relatórios.

## Matriz mínima por história

- caminho feliz;
- validação;
- usuário sem permissão;
- empresa diferente;
- módulo desabilitado;
- repetição/idempotência;
- concorrência quando afeta saldo/numeração;
- falha depois do commit;
- auditoria;
- resposta e estado da UI.

## Casos críticos de estoque

- duas vendas disputando última unidade;
- reserva parcial;
- cancelamento libera uma vez;
- retry não duplica movimento;
- transferência parcial e divergente;
- lote bloqueado não é vendido;
- reconstrução do saldo igual ao snapshot;
- inventário com movimentos durante contagem conforme política;
- retorno externo reconciliado.

## Casos críticos financeiros

- parcelas e arredondamento fecham total;
- baixa parcial;
- baixa duplicada bloqueada;
- estorno restaura saldo;
- período fechado;
- usuário de outra empresa;
- consolidação sem dupla contagem.

## Casos críticos marketplace

- webhook repetido;
- eventos fora de ordem;
- token expirado;
- 429 e `Retry-After`;
- timeout após possível sucesso;
- SKU não mapeado;
- estoque insuficiente;
- pedido cancelado após expedição;
- reconciliação encontra divergência;
- venda local durante indisponibilidade externa.

## Casos críticos fiscais

- schema inválido;
- certificado vencido/senha incorreta;
- timeout com autorização efetivada;
- rejeição de negócio;
- numeração concorrente;
- reprocessamento;
- ambiente incorreto;
- XML autorizado imutável;
- cancelamento fora de prazo.

## Dados de teste

Seeds devem conter:

- Grupo Demo;
- empresas Simples e regime normal;
- matriz/filial e depósitos;
- usuários com perfis distintos;
- tecido cru/tingido, tinta, embalagem e serviço;
- lotes;
- BOM simples;
- cliente, fornecedor, transportadora e tinturaria;
- pedido local e ordem externa demonstrativos.

Nunca usar CPF, CNPJ, certificado, token ou endereço real em testes.

## Qualidade de código

- PSR-12;
- `declare(strict_types=1);`;
- PHPStan em nível progressivamente rígido;
- PHP_CodeSniffer;
- ESLint para JavaScript;
- nenhuma supressão sem justificativa;
- complexidade reduzida por casos de uso;
- dependências verificadas por auditoria do Composer/npm.

## CI

Pipeline mínimo:

1. instalar dependências travadas;
2. verificar estilo;
3. análise estática;
4. testes unitários;
5. subir MySQL/Redis descartáveis;
6. migrations do zero;
7. testes de integração;
8. build de assets;
9. testes E2E críticos;
10. relatório de vulnerabilidades.

## Performance

Criar orçamento por endpoint e testar com volumes realistas:

- 100 empresas por grupo;
- 100 mil variantes;
- milhões de movimentos;
- 1 milhão de pedidos;
- 10 milhões de auditorias/eventos.

Paginação por cursor onde páginas profundas forem comuns. `EXPLAIN` obrigatório para consultas lentas. Relatórios pesados usam réplica/exportação futura.

## Liberação

Cada release passa por staging com cópia anonimizada ou dataset representativo, migrations, smoke test, plano de rollback e checklist. Funcionalidade arriscada usa feature flag por empresa.

