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:
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user