StudentContractClassQuantityTest.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace Tests\Unit;
  3. use App\Models\StudentContract;
  4. use Carbon\Carbon;
  5. use Tests\TestCase;
  6. class StudentContractClassQuantityTest extends TestCase
  7. {
  8. public function test_it_calculates_class_quantity_correctly_for_one_weekday(): void
  9. {
  10. $contract = new StudentContract();
  11. $contract->signature_date = Carbon::parse('2023-01-01'); // Sunday
  12. $contract->end_date = Carbon::parse('2023-01-31'); // 31 days
  13. $contract->weekday = 1; // Monday (2023-01-02, 09, 16, 23, 30) -> 5 occurrences
  14. $quantity = $contract->calculateClassQuantity();
  15. $this->assertEquals(5, $quantity);
  16. }
  17. public function test_it_calculates_class_quantity_correctly_for_two_weekdays(): void
  18. {
  19. $contract = new StudentContract();
  20. $contract->signature_date = Carbon::parse('2023-01-01'); // Sunday
  21. $contract->end_date = Carbon::parse('2023-01-14'); // 2 weeks
  22. $contract->weekday = 1; // Monday (2 occurrences)
  23. $contract->second_weekday = 3; // Wednesday (2 occurrences)
  24. $quantity = $contract->calculateClassQuantity();
  25. $this->assertEquals(4, $quantity);
  26. }
  27. public function test_it_returns_zero_if_end_date_is_before_signature_date(): void
  28. {
  29. $contract = new StudentContract();
  30. $contract->signature_date = Carbon::parse('2023-01-31');
  31. $contract->end_date = Carbon::parse('2023-01-01');
  32. $contract->weekday = 1;
  33. $quantity = $contract->calculateClassQuantity();
  34. $this->assertEquals(0, $quantity);
  35. }
  36. public function test_it_returns_fallback_if_dates_are_missing(): void
  37. {
  38. $contract = new StudentContract();
  39. $contract->class_quantity = 10;
  40. $quantity = $contract->calculateClassQuantity();
  41. $this->assertEquals(10, $quantity);
  42. }
  43. }