# Banco seguro para testes

Os testes que usam `RefreshDatabase` devem conectar exclusivamente à instância PostgreSQL de testes, publicada localmente em `127.0.0.1:5433`, no banco `rex_test`. O servidor PostgreSQL deve responder internamente na porta `5432`; `5433` é a porta publicada pelo Docker. O banco oficial é `rex` e nunca é um banco de testes válido.

Suba a instância de testes separada e confirme a disponibilidade:

```bash
docker compose --profile test up -d postgres-test
pg_isready -h 127.0.0.1 -p 5433 -U postgres -d rex_test
```

Na primeira criação do volume, `POSTGRES_TEST_DB=rex_test` cria o banco. Se o volume de testes já existia com outro nome, crie `rex_test` somente na instância de testes ou recrie exclusivamente o volume `postgres_test_data`, após confirmar o projeto Docker.

Execute o preflight antes da suíte. Ele não executa migrations nem `migrate:fresh`:

```bash
php artisan --env=testing test:database-safety
php artisan test tests/Feature/ShippingPackaging
php artisan test tests/Unit/ShippingPackaging
php artisan test
```

O PHPUnit também fixa `APP_ENV`, conexão, host, porta, usuário e banco de testes com precedência sobre `.env` e cache de configuração. Durante o bootstrap, o guard consulta `current_database()` antes que `RefreshDatabase` possa recriar o schema. Qualquer divergência ou falha de conexão interrompe os testes sem executar migration destrutiva.

Não execute `migrate:fresh` manualmente no banco oficial. Para o fluxo completo use:

```bash
composer test-safe
```

O reset do schema é responsabilidade do `RefreshDatabase`, aplicado às suítes de ShippingPackaging. A transferência total continua sendo um fluxo funcional separado e não é acionada pela ausência de quantidade.
