diff options
Diffstat (limited to 'tests/Unit/Database/DatabaseServiceProviderTest.php')
-rw-r--r-- | tests/Unit/Database/DatabaseServiceProviderTest.php | 80 |
1 files changed, 67 insertions, 13 deletions
diff --git a/tests/Unit/Database/DatabaseServiceProviderTest.php b/tests/Unit/Database/DatabaseServiceProviderTest.php index 61848c35..8f7898cd 100644 --- a/tests/Unit/Database/DatabaseServiceProviderTest.php +++ b/tests/Unit/Database/DatabaseServiceProviderTest.php @@ -6,32 +6,86 @@ use Engelsystem\Config\Config; use Engelsystem\Database\DatabaseServiceProvider; use Engelsystem\Test\Unit\ServiceProviderTest; use Exception; -use PHPUnit_Framework_MockObject_MockObject; +use Illuminate\Database\Capsule\Manager as CapsuleManager; +use Illuminate\Database\Connection; +use PDOException; +use PHPUnit_Framework_MockObject_MockObject as MockObject; class DatabaseServiceProviderTest extends ServiceProviderTest { /** * @covers \Engelsystem\Database\DatabaseServiceProvider::register() - * @covers \Engelsystem\Database\DatabaseServiceProvider::exitOnError() */ public function testRegister() { - /** @var PHPUnit_Framework_MockObject_MockObject|Config $config */ - $config = $this->getMockBuilder(Config::class) - ->getMock(); + list($app, $dbManager) = $this->prepare(['driver' => 'sqlite', 'database' => ':memory:']); - $app = $this->getApp(['get']); + $this->setExpects($app, 'instance', ['db', $dbManager]); + + $serviceProvider = new DatabaseServiceProvider($app); + $serviceProvider->register(); + } + + /** + * @covers \Engelsystem\Database\DatabaseServiceProvider::register() + * @covers \Engelsystem\Database\DatabaseServiceProvider::exitOnError() + */ + public function testRegisterError() + { + list($app) = $this->prepare([ + 'host' => 'localhost', + 'database' => 'database', + 'username' => 'user', + 'password' => 'password', + ], true); - $this->setExpects($app, 'get', ['config'], $config); - $this->setExpects($config, 'get', ['database'], [ - 'host' => 'localhost', - 'db' => 'database', - 'user' => 'user', - 'pw' => 'password', - ], $this->atLeastOnce()); $this->expectException(Exception::class); $serviceProvider = new DatabaseServiceProvider($app); $serviceProvider->register(); } + + /** + * Prepare some mocks + * + * @param array $dbConfigData + * @param bool $getPdoThrowException + * @return array + */ + protected function prepare($dbConfigData, $getPdoThrowException = false) + { + /** @var MockObject|Config $config */ + $config = $this->getMockBuilder(Config::class) + ->getMock(); + /** @var MockObject|CapsuleManager $config */ + $dbManager = $this->getMockBuilder(CapsuleManager::class) + ->getMock(); + /** @var MockObject|Connection $connection */ + $connection = $this->getMockBuilder(Connection::class) + ->disableOriginalConstructor() + ->getMock(); + + $app = $this->getApp(['get', 'make', 'instance']); + + $this->setExpects($app, 'get', ['config'], $config); + $this->setExpects($app, 'make', [CapsuleManager::class], $dbManager); + $this->setExpects($config, 'get', ['database'], $dbConfigData, $this->atLeastOnce()); + + $this->setExpects($dbManager, 'setAsGlobal'); + $this->setExpects($dbManager, 'bootEloquent'); + + $this->setExpects($connection, 'useDefaultSchemaGrammar'); + $connection->expects($this->once()) + ->method('getPdo') + ->willReturnCallback(function () use ($getPdoThrowException) { + if ($getPdoThrowException) { + throw new PDOException(); + } + + return ''; + }); + $this->setExpects($dbManager, 'getConnection', [], $connection, $this->atLeastOnce()); + + return [$app, $dbManager]; + } } |