65 lines
1.9 KiB
PHP
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());
|
|
}
|
|
}
|