status); self::assertNull($lesson->offeringId); self::assertSame(Lesson::RECURRENCE_SINGLE, $lesson->recurrence); self::assertNull($lesson->seriesId); self::assertNull($lesson->paymentId); self::assertNull($lesson->notes); self::assertNull($lesson->id); } public function testRecurrenceConstants(): void { self::assertContains(Lesson::RECURRENCE_SINGLE, Lesson::VALID_RECURRENCES); self::assertContains(Lesson::RECURRENCE_WEEKLY, Lesson::VALID_RECURRENCES); } public function testFromRowMapsCorrectly(): void { $row = (object) [ 'id' => '99', 'slot_id' => '10', 'offering_id' => '7', 'student_id' => '20', 'instructor_id' => '30', 'recurrence' => Lesson::RECURRENCE_WEEKLY, 'series_id' => '99', 'status' => 'confirmed', 'payment_id' => null, 'notes' => 'Bring your guitar.', ]; $lesson = Lesson::fromRow($row); self::assertSame(99, $lesson->id); self::assertSame(7, $lesson->offeringId); self::assertSame(Lesson::RECURRENCE_WEEKLY, $lesson->recurrence); self::assertSame(99, $lesson->seriesId); self::assertNull($lesson->paymentId); self::assertSame('confirmed', $lesson->status); } public function testToArrayContainsExpectedKeys(): void { $lesson = new Lesson(slotId: 1, studentId: 2, instructorId: 3, notes: 'Note', id: 5); $arr = $lesson->toArray(); foreach (['id', 'slot_id', 'offering_id', 'student_id', 'instructor_id', 'recurrence', 'series_id', 'status', 'payment_id', 'notes'] as $key) { self::assertArrayHasKey($key, $arr); } } }