status); self::assertNull($access->studentId); self::assertSame('', $access->email); } public function testFromRowMapsColumns(): void { $row = (object) [ 'id' => '3', 'offering_id' => '8', 'student_id' => '5', 'email' => 'a@b.test', 'invite_id' => '9', 'status' => GroupAccess::STATUS_ENROLLED, 'invited_by' => '2', ]; $access = GroupAccess::fromRow($row); self::assertSame(3, $access->id); self::assertSame(8, $access->offeringId); self::assertSame(5, $access->studentId); self::assertSame('a@b.test', $access->email); self::assertSame(9, $access->inviteId); self::assertSame(GroupAccess::STATUS_ENROLLED, $access->status); self::assertSame(2, $access->invitedBy); } public function testFromRowCastsNullStudentAndInvite(): void { $row = (object) [ 'id' => '3', 'offering_id' => '8', 'student_id' => null, 'email' => 'a@b.test', 'invite_id' => null, 'status' => GroupAccess::STATUS_INVITED, 'invited_by' => null, ]; $access = GroupAccess::fromRow($row); self::assertNull($access->studentId); self::assertNull($access->inviteId); self::assertNull($access->invitedBy); } public function testToArrayContainsExpectedKeys(): void { $arr = (new GroupAccess(offeringId: 8, studentId: 5, id: 3))->toArray(); foreach (['id', 'offering_id', 'student_id', 'email', 'invite_id', 'status', 'invited_by'] as $key) { self::assertArrayHasKey($key, $arr); } } }