Files
portal/app/tests/Feature/Billing/PricingTierRepositoryTest.php
T

61 lines
2.4 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Models\PricingTier;
use App\Repositories\PricingTierRepository;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Carbon;
uses(DatabaseTransactions::class);
beforeEach(function () {
$this->repo = new PricingTierRepository;
// Clean baseline — удаляем seed-7-tiers, чтобы тесты могли создать свои контексты
// (PricingTierSeeder seed'ит 7 ступеней с effective_from='1970-01-01' через DatabaseSeeder).
PricingTier::query()->delete();
});
it('returns active tiers ordered by tier_no', function () {
PricingTier::factory()->create(['tier_no' => 2, 'effective_from' => '2024-01-01', 'is_active' => true]);
PricingTier::factory()->create(['tier_no' => 1, 'effective_from' => '2024-01-01', 'is_active' => true]);
$tiers = $this->repo->activeAt(Carbon::parse('2024-06-01'));
expect($tiers->pluck('tier_no')->all())->toBe([1, 2]);
});
it('returns max effective_from <= today (newer overrides older)', function () {
PricingTier::factory()->create(['tier_no' => 1, 'effective_from' => '2024-01-01', 'price_per_lead_kopecks' => 50000]);
PricingTier::factory()->create(['tier_no' => 1, 'effective_from' => '2024-06-01', 'price_per_lead_kopecks' => 30000]);
$tiers = $this->repo->activeAt(Carbon::parse('2024-07-01'));
expect($tiers->first()->price_per_lead_kopecks)->toBe(30000);
});
it('ignores future effective_from', function () {
PricingTier::factory()->create(['tier_no' => 1, 'effective_from' => '2024-01-01', 'price_per_lead_kopecks' => 50000]);
PricingTier::factory()->create(['tier_no' => 1, 'effective_from' => '2099-01-01', 'price_per_lead_kopecks' => 99999]);
$tiers = $this->repo->activeAt(Carbon::parse('2024-06-01'));
expect($tiers->first()->price_per_lead_kopecks)->toBe(50000);
});
it('returns empty collection when no active tiers exist', function () {
$tiers = $this->repo->activeAt(Carbon::parse('2024-06-01'));
expect($tiers)->toBeEmpty();
});
it('excludes inactive tiers', function () {
PricingTier::factory()->create(['tier_no' => 1, 'effective_from' => '2024-01-01', 'is_active' => false]);
PricingTier::factory()->create(['tier_no' => 2, 'effective_from' => '2024-01-01', 'is_active' => true]);
$tiers = $this->repo->activeAt(Carbon::parse('2024-06-01'));
expect($tiers->pluck('tier_no')->all())->toBe([2]);
});