SIGN IN SIGN UP

Troca TRUNCATE por DELETE na limpeza de produtos dos specs

A suíte RSpec falhava de forma intermitente, às vezes com 34 exemplos
quebrados de uma vez, e uma das falhas trouxe PG::TRDeadlockDetected
dentro de clear_product_data!.

Não era ordenação: `config.order = :random` está comentado, então a ordem
é a de definição. A causa é o TRUNCATE, que pega ACCESS EXCLUSIVE na
tabela e serializa contra qualquer outra conexão no banco de teste. Com
um segundo processo em jogo — o Puma dos testes de sistema, ou uma
conexão remanescente — a suíte trava esperando o lock, e no entrelaçamento
certo vira deadlock (um lado pedindo ACCESS EXCLUSIVE, o outro ACCESS
SHARE).

Medido com uma conexão concorrente segurando `products` por 40s:

    TRUNCATE  spec/models/product_spec.rb levou 40s (bloqueado)
    DELETE    o mesmo arquivo levou 6s

DELETE usa lock de linha e não bloqueia leitor concorrente. Como o
exemplo roda em transação (use_transactional_fixtures), o efeito é
revertido igual. Removido também o RESTART IDENTITY: além de
desnecessário, reset de sequência não é transacional no PostgreSQL, então
ele vazava para fora do exemplo.

Verificado depois da mudança: 4 execuções completas do RSpec sem falha, e
o cenário original (test:system seguido de rspec) passa limpo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017jSiuhB3mDxcty3rpck6jD
U
Uriel Juliatti committed
012a33cbabe7aa3099370798427bb0824ff2d834
Parent: a8e2f2b