|
@@ -0,0 +1,57 @@
|
|
|
|
|
+<?php
|
|
|
|
|
+
|
|
|
|
|
+namespace Tests\Unit;
|
|
|
|
|
+
|
|
|
|
|
+use App\Models\StudentContract;
|
|
|
|
|
+use Carbon\Carbon;
|
|
|
|
|
+use Tests\TestCase;
|
|
|
|
|
+
|
|
|
|
|
+class StudentContractClassQuantityTest extends TestCase
|
|
|
|
|
+{
|
|
|
|
|
+ public function test_it_calculates_class_quantity_correctly_for_one_weekday(): void
|
|
|
|
|
+ {
|
|
|
|
|
+ $contract = new StudentContract();
|
|
|
|
|
+ $contract->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);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|