62 lines
1.9 KiB
PHP
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');
|
|
}
|
|
}
|