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]); });