diff --git a/src/Config/ConfigServiceProvider.php b/src/Config/ConfigServiceProvider.php index 01b648df..9fbccd68 100644 --- a/src/Config/ConfigServiceProvider.php +++ b/src/Config/ConfigServiceProvider.php @@ -3,24 +3,33 @@ namespace Engelsystem\Config; use Engelsystem\Container\ServiceProvider; +use Exception; class ConfigServiceProvider extends ServiceProvider { + /** @var array */ + protected $configFiles = ['config.default.php', 'config.php']; + public function register() { - $defaultConfigFile = config_path('config.default.php'); - $configFile = config_path('config.php'); - $config = $this->app->make(Config::class); $this->app->instance('config', $config); - $config->set(require $defaultConfigFile); + foreach ($this->configFiles as $file) { + $file = config_path($file); + + if (!file_exists($file)) { + continue; + } - if (file_exists($configFile)) { $config->set(array_replace_recursive( $config->get(null), - require $configFile + require $file )); } + + if (empty($config->get(null))) { + throw new Exception('Configuration not found'); + } } } diff --git a/tests/Unit/Config/ConfigServiceProviderTest.php b/tests/Unit/Config/ConfigServiceProviderTest.php index c8be4b7d..998c0ba1 100644 --- a/tests/Unit/Config/ConfigServiceProviderTest.php +++ b/tests/Unit/Config/ConfigServiceProviderTest.php @@ -6,6 +6,7 @@ use Engelsystem\Application; use Engelsystem\Config\Config; use Engelsystem\Config\ConfigServiceProvider; use Engelsystem\Test\Unit\ServiceProviderTest; +use Exception; use PHPUnit_Framework_MockObject_MockObject; class ConfigServiceProviderTest extends ServiceProviderTest @@ -27,12 +28,15 @@ class ConfigServiceProviderTest extends ServiceProviderTest $this->setExpects($app, 'get', ['path.config'], __DIR__ . '/../../../config', $this->atLeastOnce()); $this->setExpects($config, 'set', null, null, $this->exactly(2)); - $this->setExpects($config, 'get', [null], []); + $config->expects($this->exactly(3)) + ->method('get') + ->with(null) + ->willReturnOnConsecutiveCalls([], [], ['lor' => 'em']); $configFile = __DIR__ . '/../../../config/config.php'; $configExists = file_exists($configFile); if (!$configExists) { - file_put_contents($configFile, '"em"];'); } $serviceProvider = new ConfigServiceProvider($app); @@ -42,4 +46,29 @@ class ConfigServiceProviderTest extends ServiceProviderTest unlink($configFile); } } + + /** + * @covers \Engelsystem\Config\ConfigServiceProvider::register() + */ + public function testRegisterException() + { + /** @var PHPUnit_Framework_MockObject_MockObject|Config $config */ + $config = $this->getMockBuilder(Config::class) + ->getMock(); + + $app = $this->getApp(['make', 'instance', 'get']); + Application::setInstance($app); + + $this->setExpects($app, 'make', [Config::class], $config); + $this->setExpects($app, 'instance', ['config', $config]); + $this->setExpects($app, 'get', ['path.config'], __DIR__ . '/not_existing', $this->atLeastOnce()); + + $this->setExpects($config, 'set', null, null, $this->never()); + $this->setExpects($config, 'get', [null], []); + + $this->expectException(Exception::class); + + $serviceProvider = new ConfigServiceProvider($app); + $serviceProvider->register(); + } }