Bicycle/tests/Unit/ModelTest.php
Egor Isaev 9d4edf147a dev
2026-08-07 11:40:03 +03:00

65 lines
1.9 KiB
PHP

<?php
namespace Tests\Unit;
use PDO;
use PHPUnit\Framework\TestCase;
use Services\DataBase\Model;
class ModelTest extends TestCase
{
public function testGetReturnsAttribute(): void
{
$model = new Model();
$model->name = 'bicycle';
$this->assertSame('bicycle', $model->name);
}
public function testGetMissingAttributeReturnsNull(): void
{
$model = new Model();
$this->assertNull($model->missing);
}
public function testSetWritesAttribute(): void
{
$model = new Model();
$model->name = 'bicycle';
$this->assertSame('bicycle', $model->name);
}
public function testIsset(): void
{
$model = new Model();
$model->name = 'bicycle';
$this->assertTrue(isset($model->name));
$this->assertFalse(isset($model->missing));
}
public function testToArray(): void
{
$model = new Model();
$model->id = 1;
$model->name = 'bicycle';
$this->assertSame(['id' => 1, 'name' => 'bicycle'], $model->toArray());
}
public function testPdoFetchClassPopulatesRealProperties(): void
{
// PDO::FETCH_CLASS выставляет свойства напрямую, минуя __set() — проверяем именно это,
// не общий __get/__set (см. PHP-документацию по FETCH_CLASS: свойства до конструктора).
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE t (id INTEGER, name TEXT)');
$pdo->exec("INSERT INTO t (id, name) VALUES (1, 'bicycle')");
$model = $pdo->query('SELECT * FROM t')->fetchObject(Model::class);
$this->assertInstanceOf(Model::class, $model);
$this->assertSame('bicycle', $model->name);
$this->assertSame(['id' => 1, 'name' => 'bicycle'], $model->toArray());
}
}