Files
portal/app/tests/Concerns/SharesSupplierPdo.php
T

37 lines
1.4 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
namespace Tests\Concerns;
use Illuminate\Support\Facades\DB;
/**
* Share PDO between pgsql и pgsql_supplier connections в тестах.
*
* Зачем: Laravel DatabaseTransactions trait оборачивает каждый connection в
* свою транзакцию. Записи через default Project::factory() ($pgsql) не видны
* с pgsql_supplier connection до commit'а. Sharing PDO означает — обе
* connection'ы используют ту же PDO session → одну транзакцию.
*
* На production обе connection'ы реальные separate PDO, и видимость
* обеспечивается READ COMMITTED после commit'а webhook-handler'а перед
* dispatch'ом supplier-flow job'а. Этот trait — только для test-окружения.
*
* Использование: `uses(SharesSupplierPdo::class)` в Pest test-файле, где
* нужна cross-connection visibility (например, tests/Feature/Supplier/*).
*/
trait SharesSupplierPdo
{
protected function setUpSharesSupplierPdo(): void
{
if (! config()->has('database.connections.pgsql_supplier')) {
return;
}
$defaultConnection = DB::connection('pgsql');
DB::connection('pgsql_supplier')->setPdo($defaultConnection->getPdo());
DB::connection('pgsql_supplier')->setReadPdo($defaultConnection->getReadPdo());
}
}