OtherModel::class]; private string $name; private bool $valid; public function setName(string $name): void { $this->name = $name; } public function setValid(bool $valid): void { $this->valid = $valid; } public function getName(): string { return $this->name; } public function getValid(): bool { return $this->valid; } } final class ModelTest extends TestCase { public function testCanReturnTable(): void { $this->assertEquals('test_table', DummyModel::getTable()); } public function testCanReturnFields(): void { $this->assertEquals(['id', 'name', 'valid'], DummyModel::getFields()); } public function testCanReturnRelations(): void { $this->assertEquals(['other_model' => OtherModel::class], DummyModel::getRelations()); } public function testCanBeConvertedToArray(): void { $model = new DummyModel(); $model->setId(123); $model->setName('John'); $model->setValid(true); $this->assertEquals([ 'id' => 123, 'name' => 'John', 'valid' => true ], $model->toArray()); } public function testCanSaveAndResetSnapshot(): void { $model = new DummyModel(); $model->setId(123); $model->setName('John'); $model->setValid(true); $model->saveSnapshot(); $this->assertEquals([ 'id' => 123, 'name' => 'John', 'valid' => true ], $model->getSnapshot()); $model->resetSnapshot(); $this->assertEquals([], $model->getSnapshot()); } }