'4', 'title' => 'Cancellation', 'slug' => 'cancellation', 'current_version_id' => '9', ]); self::assertSame(4, $policy->id); self::assertSame('cancellation', $policy->slug); self::assertSame(9, $policy->currentVersionId); self::assertArrayHasKey('current_version_id', $policy->toArray()); } public function testPolicyHandlesNullCurrentVersion(): void { $policy = Policy::fromRow((object) [ 'id' => '4', 'title' => 'Cancellation', 'slug' => 'cancellation', 'current_version_id' => null, ]); self::assertNull($policy->currentVersionId); } public function testPolicyVersionFromRowAndStatusHelper(): void { $version = PolicyVersion::fromRow((object) [ 'id' => '9', 'policy_id' => '4', 'version_number' => '2', 'body' => '
Policy
', 'status' => PolicyVersion::STATUS_PUBLISHED, 'published_at' => '2026-06-01 10:00:00', ]); self::assertSame(9, $version->id); self::assertSame(2, $version->versionNumber); self::assertTrue($version->isPublished()); self::assertSame('2026-06-01 10:00:00', $version->publishedAt); } public function testPolicyVersionDefaultsToDraft(): void { $version = new PolicyVersion(4, 1); self::assertSame(PolicyVersion::STATUS_DRAFT, $version->status); self::assertFalse($version->isPublished()); self::assertNull($version->publishedAt); self::assertContains(PolicyVersion::STATUS_ARCHIVED, PolicyVersion::VALID_STATUSES); } public function testPolicyAcceptanceFromRowAndToArray(): void { $acceptance = PolicyAcceptance::fromRow((object) [ 'id' => '1', 'policy_version_id' => '9', 'student_id' => '5', 'registration_type' => PolicyAcceptance::REG_LESSON, 'registration_id' => '12', 'accepted_at' => '2026-06-02 09:00:00', 'ip_address' => '203.0.113.7', ]); self::assertSame(9, $acceptance->policyVersionId); self::assertSame(PolicyAcceptance::REG_LESSON, $acceptance->registrationType); self::assertSame('203.0.113.7', $acceptance->ipAddress); self::assertArrayHasKey('policy_version_id', $acceptance->toArray()); self::assertContains(PolicyAcceptance::REG_ENROLLMENT, PolicyAcceptance::VALID_REGISTRATION_TYPES); } }