2026-05-08 09:37:16 +03:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace Tests;
|
|
|
|
|
|
|
|
|
|
|
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
2026-05-11 01:00:47 +03:00
|
|
|
|
use Illuminate\Support\Facades\DB;
|
2026-05-08 09:37:16 +03:00
|
|
|
|
|
|
|
|
|
|
abstract class TestCase extends BaseTestCase
|
|
|
|
|
|
{
|
2026-05-11 01:00:47 +03:00
|
|
|
|
/**
|
|
|
|
|
|
* Plan 3 Task 3: share PDO between `pgsql` and `pgsql_supplier` connections в тестах,
|
|
|
|
|
|
* чтобы DatabaseTransactions corretly rollback'ил данные, созданные через дефолтный
|
|
|
|
|
|
* connection, но запрошенные через supplier. Без этого Project::on('pgsql_supplier')
|
|
|
|
|
|
* не видит свежесозданные через Project::factory() записи — две PDO-сессии = две
|
|
|
|
|
|
* разные транзакции, supplier-side не видит uncommitted INSERTs default-side.
|
|
|
|
|
|
*
|
|
|
|
|
|
* На production обе роли (crm_app_user + crm_supplier_worker) — две настоящие
|
|
|
|
|
|
* сессии, общая видимость через commit. В тестах достаточно одной разделяемой PDO.
|
|
|
|
|
|
*/
|
|
|
|
|
|
protected function setUp(): void
|
|
|
|
|
|
{
|
|
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
|
|
|
|
// После того как Laravel инициализировал dafault connection (pgsql),
|
|
|
|
|
|
// ре-используем его PDO для pgsql_supplier. Делаем только если оба
|
|
|
|
|
|
// connection'а есть в конфиге (продакшен может не иметь supplier).
|
|
|
|
|
|
if (config()->has('database.connections.pgsql_supplier')) {
|
|
|
|
|
|
$defaultPdo = DB::connection('pgsql')->getPdo();
|
|
|
|
|
|
$defaultReadPdo = DB::connection('pgsql')->getReadPdo();
|
|
|
|
|
|
DB::connection('pgsql_supplier')->setPdo($defaultPdo);
|
|
|
|
|
|
DB::connection('pgsql_supplier')->setReadPdo($defaultReadPdo);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-05-08 09:37:16 +03:00
|
|
|
|
}
|