'Adult', 'lastname' => 'Student', 'dob' => '2008-09-01'], ['decision' => 'Pass', 'source' => 'manual'], '2026-2027' ); $this->assertTrue($message['blocking']); $this->assertStringContainsString('18 years old or older on September 1', $message['message']); } public function testParentEnrollmentIsAllowedWhenStudentTurnsEighteenAfterSeptemberFirst(): void { $message = EnrollmentEligibility::parentDecisionMessage( ['firstname' => 'Minor', 'lastname' => 'Student', 'dob' => '2008-09-02'], ['decision' => 'Pass', 'source' => 'manual'], '2026-2027' ); $this->assertFalse($message['blocking']); } public function testBlockedDecisionMessagesUseRequiredAdministrativeText(): void { $expelled = EnrollmentEligibility::parentDecisionMessage( ['firstname' => 'A', 'lastname' => 'B', 'dob' => '2010-01-01'], ['decision' => 'Expel', 'source' => 'manual'], '2026-2027' ); $withdrawn = EnrollmentEligibility::parentDecisionMessage( ['firstname' => 'A', 'lastname' => 'B', 'dob' => '2010-01-01'], ['decision' => 'Withdrawn', 'source' => 'manual'], '2026-2027' ); $deferred = EnrollmentEligibility::parentDecisionMessage( ['firstname' => 'A', 'lastname' => 'B', 'dob' => '2010-01-01'], ['decision' => 'Deferred', 'source' => 'manual'], '2026-2027' ); $this->assertTrue($expelled['blocking']); $this->assertTrue($withdrawn['blocking']); $this->assertTrue($deferred['blocking']); $this->assertStringContainsString('A B', $expelled['message']); $this->assertStringContainsString('A B', $withdrawn['message']); $this->assertStringContainsString('A B', $deferred['message']); $this->assertStringContainsString(EnrollmentEligibility::EXPELLED_MESSAGE, $expelled['message']); $this->assertStringContainsString(EnrollmentEligibility::WITHDRAWN_MESSAGE, $withdrawn['message']); $this->assertStringContainsString(EnrollmentEligibility::DEFERRED_MESSAGE, $deferred['message']); $this->assertStringContainsString('decision is expelled', $expelled['message']); $this->assertStringContainsString('decision is withdrawn', $withdrawn['message']); $this->assertStringContainsString('decision is deferred', $deferred['message']); } public function testPendingSourceUsesMissingDecisionMessageNotDeferredDecisionMessage(): void { $message = EnrollmentEligibility::parentDecisionMessage( ['firstname' => 'A', 'lastname' => 'B', 'dob' => '2010-01-01'], ['decision' => '', 'source' => 'pending'], '2026-2027' ); $this->assertTrue($message['blocking']); $this->assertStringContainsString('A B', $message['message']); $this->assertStringContainsString(EnrollmentEligibility::MISSING_DECISION_MESSAGE, $message['message']); $this->assertStringNotContainsString(EnrollmentEligibility::DEFERRED_MESSAGE, $message['message']); } }