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

62 lines
1.9 KiB
PHP

<?php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
use Services\Database;
use Services\DataBase\Classes\PdoDriver;
use System\Classes\Config;
use System\Classes\MyException;
class DatabaseTest extends TestCase
{
protected function tearDown(): void
{
// Сбрасываем кэш подключений Database и загруженный Config, чтобы тесты не влияли друг на друга.
$ref = new ReflectionClass(Database::class);
$prop = $ref->getProperty('_instances');
$prop->setAccessible(true);
$prop->setValue(null, []);
$ref = new ReflectionClass(Config::class);
$prop = $ref->getProperty('config');
$prop->setAccessible(true);
$prop->setValue(null, null);
}
public function testDefaultConnectionReturnsPdoDriver(): void
{
$this->assertInstanceOf(PdoDriver::class, Database::instance());
}
public function testInstanceIsCachedPerConnectionName(): void
{
$this->assertSame(Database::instance('default'), Database::instance('default'));
}
public function testDifferentConnectionNamesAreDistinctInstances(): void
{
Config::set('db', [
'default' => ['driver' => 'pdo', 'connection' => ['host' => 'db', 'dbname' => 'a']],
'second' => ['driver' => 'pdo', 'connection' => ['host' => 'db', 'dbname' => 'b']],
]);
$this->assertNotSame(Database::instance('default'), Database::instance('second'));
}
public function testUnknownConnectionNameThrows(): void
{
$this->expectException(MyException::class);
Database::instance('nonexistent');
}
public function testUnknownDriverThrows(): void
{
Config::set('db', ['bad' => ['driver' => 'mysqli', 'connection' => []]]);
$this->expectException(MyException::class);
Database::instance('bad');
}
}