calendarPayload('2026-2027'); $this->assertSame('2026-08-01', $calendar['starts_on']); $this->assertSame('2027-07-31', $calendar['ends_on']); $this->assertSame('2026-08-01', $calendar['registration_starts_on']); $this->assertSame('2026-10-05', $calendar['registration_ends_on']); $this->assertSame('2026-09-20', $calendar['first_day_of_school']); $this->assertSame('2026-09-13', $calendar['fall_makeup_exam_on']); $this->assertSame('2026-09-06', $calendar['orientation_day']); $this->assertSame('2027-05-23', $calendar['final_exam_day']); $this->assertSame('2027-06-06', $calendar['last_day_of_school']); $this->assertSame('2027-01-17', $calendar['midterm_exam_day']); $this->assertSame('2027-01-24', $calendar['spring_semester_start']); $this->assertSame('2027-03-01', $calendar['installment_date']); } public function testNextToLastSeptemberSundayWhenMonthEndsOnSunday(): void { $calendar = $this->calendarPayload('2029-2030'); $this->assertSame('2029-09-23', $calendar['first_day_of_school']); } private function calendarPayload(string $schoolYear): array { $service = (new ReflectionClass(SchoolYearManagementService::class))->newInstanceWithoutConstructor(); $method = (new ReflectionClass(SchoolYearManagementService::class))->getMethod('calendarPayloadForSchoolYear'); $method->setAccessible(true); return $method->invoke($service, $schoolYear); } }