test: капча-драйвер null в тестах плюс изоляция migrate и billing-summary от состояния БД

Капча: добавлен тестовый драйвер CAPTCHA_DRIVER=null и CAPTCHA_FAKE_PASSES
в phpunit.xml, иначе тесты наследовали боевой yandex из .env и регистрация
падала на проверке я не робот. Плюс изоляция двух тестов от состояния
учебной базы: BillingMigrateLeadsToRubTest считает операции своего тенанта,
BillingSummaryProviderTest берёт дату вне периода из следующего месяца.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-25 05:20:14 +03:00
parent 142a561d0d
commit c71c7df3ba
3 changed files with 16 additions and 4 deletions
+4
View File
@@ -34,6 +34,10 @@
<env name="MAIL_MAILER" value="array"/>
<env name="AUTH_PASSWORD_RESET_TOKEN_TABLE" value="password_resets" force="true"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<!-- Капча: в тестах фейк-верификатор (NullCaptchaVerifier, fake_passes),
иначе наследуется боевой CAPTCHA_DRIVER=yandex из .env и регистрация-тесты падают на «я не робот». -->
<env name="CAPTCHA_DRIVER" value="null"/>
<env name="CAPTCHA_FAKE_PASSES" value="true"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="PULSE_ENABLED" value="false"/>
<env name="TELESCOPE_ENABLED" value="false"/>
@@ -55,18 +55,23 @@ it('is idempotent — second run is no-op', function () {
$this->artisan('billing:migrate-leads-to-rub')->assertOk();
expect($tenant->fresh()->balance_rub)->toBe($balanceAfterFirst);
expect(BalanceTransaction::where('type', BalanceTransaction::TYPE_MIGRATION)->count())->toBe(1);
// Считаем операции миграции ТОЛЬКО своего тенанта — команда работает по всей базе,
// а в тест-БД могут быть закоммиченные тенанты от других прогонов (изоляция теста).
expect(BalanceTransaction::where('tenant_id', $tenant->id)
->where('type', BalanceTransaction::TYPE_MIGRATION)->count())->toBe(1);
});
it('skips tenants with balance_leads = 0', function () {
Tenant::factory()->create([
$tenant = Tenant::factory()->create([
'balance_leads' => 0,
'balance_rub' => '500.00',
]);
$this->artisan('billing:migrate-leads-to-rub')->assertOk();
expect(BalanceTransaction::where('type', BalanceTransaction::TYPE_MIGRATION)->count())->toBe(0);
// Только свой тенант: balance_leads=0 → не мигрируется → 0 операций (не считаем чужих).
expect(BalanceTransaction::where('tenant_id', $tenant->id)
->where('type', BalanceTransaction::TYPE_MIGRATION)->count())->toBe(0);
});
it('aborts if no active tier 1 configured', function () {
@@ -64,7 +64,10 @@ test('агрегирует balance_transactions по типу: count + сумм
test('исключает транзакции вне периода', function () {
seedBillingTx($this->tenant->id, 'topup', 5000);
seedBillingTx($this->tenant->id, 'topup', 1000, Carbon::now()->subMonths(3));
// «Вне периода» берём из СЛЕДУЮЩЕГО месяца: партиции balance_transactions заводятся
// наперёд (pg_partman premake), а назад со временем удаляются — past-дата (subMonths)
// рано или поздно упирается в отсутствующую старую партицию.
seedBillingTx($this->tenant->id, 'topup', 1000, Carbon::now()->addMonth()->day(15));
$rows = (new BillingSummaryProvider)->rows(billingJob($this->tenant->id));