signature_date = Carbon::parse('2023-01-01'); // Sunday $contract->end_date = Carbon::parse('2023-01-31'); // 31 days $contract->weekday = 1; // Monday (2023-01-02, 09, 16, 23, 30) -> 5 occurrences $quantity = $contract->calculateClassQuantity(); $this->assertEquals(5, $quantity); } public function test_it_calculates_class_quantity_correctly_for_two_weekdays(): void { $contract = new StudentContract(); $contract->signature_date = Carbon::parse('2023-01-01'); // Sunday $contract->end_date = Carbon::parse('2023-01-14'); // 2 weeks $contract->weekday = 1; // Monday (2 occurrences) $contract->second_weekday = 3; // Wednesday (2 occurrences) $quantity = $contract->calculateClassQuantity(); $this->assertEquals(4, $quantity); } public function test_it_returns_zero_if_end_date_is_before_signature_date(): void { $contract = new StudentContract(); $contract->signature_date = Carbon::parse('2023-01-31'); $contract->end_date = Carbon::parse('2023-01-01'); $contract->weekday = 1; $quantity = $contract->calculateClassQuantity(); $this->assertEquals(0, $quantity); } public function test_it_returns_fallback_if_dates_are_missing(): void { $contract = new StudentContract(); $contract->class_quantity = 10; $quantity = $contract->calculateClassQuantity(); $this->assertEquals(10, $quantity); } }