37 lines
1.4 KiB
PHP
37 lines
1.4 KiB
PHP
|
|
<?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());
|
|||
|
|
}
|
|||
|
|
}
|