Files
portal/app/tests/Concerns/SharesSupplierPdo.php
T
Дмитрий 8c70255d2b fix(supplier): Plan 3 Task 3 code-review fixes (4 Important + 3 Minor)
Закрывает 4 Important issues из code-review Task 3 (6d6181b):
- config/database.php: inline 11-key duplication заменён на single-source
  pattern через локальную переменную $pgsqlConnection (config() внутри
  config-файла не работает — Repository ещё не bootstrap'нут); 'pgsql' и
  'pgsql_supplier' теперь оба ссылаются на $pgsqlConnection; PDO options
  block с string-key _role_purpose удалён (PDO ждёт integer ATTR_* keys)
- tests/Concerns/SharesSupplierPdo.php (новый): trait для cross-connection
  PDO visibility в DatabaseTransactions; setUp override из TestCase.php
  удалён (был global на 562 теста, forced eager PDO connect);
  trait применён к 5 supplier-flow тестам: SupplierConnectionTest,
  LeadRouterTest, RouteSupplierLeadJobTest, ResetDeliveredTodayCommandTest,
  SupplierLeadFlowTest (все нуждаются в cross-connection видимости)
- phpstan-baseline.neon: entry для Pest TestCall->artisan() в
  SupplierConnectionTest заменён на inline @phpstan-ignore-next-line
  — local + self-documenting; добавлен baseline-entry для
  SharesSupplierPdo trait.unused (PHPStan не видит Pest uses() как trait usage)

Plus 3 Minor:
- typos 'dafault'/'corretly' (удалились с setUp override из TestCase.php)
- RouteSupplierLeadJob.php PHPDoc: \$connection → DB_CONNECTION консистентность

Pest: 562 tests, 560 passed + 2 skipped (без regression). PHPStan: 0 errors. Pint: clean.
2026-05-11 01:26:24 +03:00

37 lines
1.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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());
}
}