create(['tier_no' => 1, 'leads_in_tier' => 300, 'price_per_lead_kopecks' => 5000]); PricingTier::factory()->create(['tier_no' => 2, 'leads_in_tier' => null, 'price_per_lead_kopecks' => 4000]); } it('называет баланс, сколько это заявок и на сколько дней хватит', function () { tiers(); $tenant = Tenant::factory()->create(['balance_rub' => '1000.00', 'delivered_in_month' => 0]); Project::factory()->create(['tenant_id' => $tenant->id, 'is_active' => true, 'daily_limit_target' => 10]); $user = User::factory()->create(['tenant_id' => $tenant->id]); $card = app(ClientFacts::class)->card((int) $user->id); // 1000 ₽ по 50 ₽ = 20 заявок; заказ 10/день → на 2 дня. expect($card)->toContain('1 000 ₽') ->and($card)->toContain('20 заявок') ->and($card)->toContain('на 2 дня'); }); it('честно говорит, что тратить нечего, когда активных проектов нет', function () { tiers(); $tenant = Tenant::factory()->create(['balance_rub' => '1000.00', 'delivered_in_month' => 0]); $user = User::factory()->create(['tenant_id' => $tenant->id]); expect(app(ClientFacts::class)->card((int) $user->id)) ->toContain('активных проектов нет'); }); it('предупреждает о заморозке заказа из-за нулевого баланса', function () { tiers(); $tenant = Tenant::factory()->create([ 'balance_rub' => '0.00', 'delivered_in_month' => 0, 'frozen_by_balance_at' => now(), ]); $user = User::factory()->create(['tenant_id' => $tenant->id]); expect(app(ClientFacts::class)->card((int) $user->id)) ->toContain('Заказ заморожен'); }); it('отдаёт null, когда такого пользователя нет', function () { expect(app(ClientFacts::class)->card(999999))->toBeNull(); }); it('называет ступень, цену заявки и сколько заявок до следующей ступени', function () { tiers(); $tenant = Tenant::factory()->create(['balance_rub' => '1000.00', 'delivered_in_month' => 180]); $user = User::factory()->create(['tenant_id' => $tenant->id]); $card = app(ClientFacts::class)->card((int) $user->id); expect($card)->toContain('Ступень: 1-я, 50 ₽ за заявку') ->and($card)->toContain('получено в этом месяце 180') ->and($card)->toContain('до следующей ступени — 120'); }); it('на последней ступени говорит, что выше ступеней нет', function () { tiers(); $tenant = Tenant::factory()->create(['balance_rub' => '1000.00', 'delivered_in_month' => 500]); $user = User::factory()->create(['tenant_id' => $tenant->id]); $card = app(ClientFacts::class)->card((int) $user->id); expect($card)->toContain('Ступень: 2-я, 40 ₽ за заявку') ->and($card)->toContain('это последняя ступень'); }); it('склоняет слова по-русски: одна заявка, один день', function () { tiers(); // 50 ₽ по цене 50 ₽ = ровно 1 заявка; заказ 1/день → 1 день. $tenant = Tenant::factory()->create(['balance_rub' => '50.00', 'delivered_in_month' => 0]); Project::factory()->create(['tenant_id' => $tenant->id, 'is_active' => true, 'daily_limit_target' => 1]); $user = User::factory()->create(['tenant_id' => $tenant->id]); $card = app(ClientFacts::class)->card((int) $user->id); expect($card)->toContain('1 заявка') ->and($card)->toContain('на 1 день') ->and($card)->not->toContain('дня(дней)'); });