diff --git a/app/tests/Feature/AdminBillingIndexTest.php b/app/tests/Feature/AdminBillingIndexTest.php index 45d6a2f6..df59dc79 100644 --- a/app/tests/Feature/AdminBillingIndexTest.php +++ b/app/tests/Feature/AdminBillingIndexTest.php @@ -3,14 +3,40 @@ declare(strict_types=1); use App\Models\Tenant; +use App\Services\MonthlyPartitionManager; use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; +use Tests\Concerns\SharesSupplierPdo; uses(DatabaseTransactions::class); +// ensureRange() ниже создаёт партиции через pgsql_supplier (DDL_CONNECTION); +// SharesSupplierPdo держит этот коннект в той же test-транзакции, иначе DDL +// уйдёт мимо отката (см. MonthlyPartitionManager doc + trait doc). +uses(SharesSupplierPdo::class); beforeEach(function () { + // tenants → tenant_operations_log / balance_transactions идут ON DELETE CASCADE, + // но это append-only таблицы (триггер audit_block_mutation на BEFORE DELETE): + // каскад от DELETE tenants → DELETE в append-only лог → RAISE EXCEPTION. + // Глушим session-триггеры на время teardown'а (весь блок внутри отката + // DatabaseTransactions). Test-роль — superuser (dev/CI postgres), см. + // config/database.php pgsql_supplier note. + DB::statement("SET session_replication_role = 'replica'"); DB::table('balance_transactions')->delete(); + DB::table('tenant_operations_log')->delete(); DB::table('tenants')->delete(); + DB::statement("SET session_replication_role = 'origin'"); + + // Тесты вставляют balance_transactions за прошлые месяцы (subMonths(2), + // subDays(45)) — гарантируем месячные партиции на этот диапазон, иначе + // INSERT падает «не найдена секция» (23514). Идемпотентно; партиции + // откатываются с тестовой транзакцией. + app(MonthlyPartitionManager::class)->ensureRange( + 'balance_transactions', + now()->subMonths(2)->startOfMonth(), + now()->startOfMonth(), + ); + // tariff_plans оставляем (seeded). }); diff --git a/app/tests/Feature/AdminIncidentsIndexTest.php b/app/tests/Feature/AdminIncidentsIndexTest.php index 5b3a813f..35febd43 100644 --- a/app/tests/Feature/AdminIncidentsIndexTest.php +++ b/app/tests/Feature/AdminIncidentsIndexTest.php @@ -4,8 +4,13 @@ declare(strict_types=1); use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\DB; +use Tests\Concerns\SharesSupplierPdo; uses(DatabaseTransactions::class); +// AdminIncidentsController читает через DB::connection('pgsql_supplier'); под +// DatabaseTransactions записи дефолтного pgsql невидимы отдельному PDO supplier'а +// → total=0. Трейт шарит один PDO между коннектами (откат сохраняется). +uses(SharesSupplierPdo::class); beforeEach(function () { DB::table('incidents_log')->delete();