|
18 | 18 | use Zend\Expressive\Middleware; |
19 | 19 | use Zend\Expressive\MiddlewareContainer; |
20 | 20 | use Zend\Expressive\MiddlewareFactory; |
| 21 | +use Zend\Expressive\Router\ConfigProvider as RouterConfigProvider; |
| 22 | +use Zend\Expressive\Router\RouterInterface; |
21 | 23 | use Zend\Expressive\ServerRequestErrorResponseGenerator; |
22 | 24 | use Zend\Expressive\ServerRequestFactory; |
23 | 25 | use Zend\HttpHandlerRunner\Emitter\EmitterInterface; |
24 | 26 | use Zend\HttpHandlerRunner\RequestHandlerRunner; |
| 27 | +use Zend\ServiceManager\Config; |
| 28 | +use Zend\ServiceManager\ServiceManager; |
25 | 29 | use Zend\Stratigility\Middleware\ErrorHandler; |
26 | 30 |
|
27 | 31 | use const Zend\Expressive\DEFAULT_DELEGATE; |
|
40 | 44 |
|
41 | 45 | class ConfigProviderTest extends TestCase |
42 | 46 | { |
| 47 | + /** @var ConfigProvider */ |
| 48 | + private $provider; |
| 49 | + |
43 | 50 | public function setUp() |
44 | 51 | { |
45 | 52 | $this->provider = new ConfigProvider(); |
@@ -88,4 +95,54 @@ public function testInvocationReturnsArrayWithDependencies() |
88 | 95 | $this->assertArrayHasKey('aliases', $config['dependencies']); |
89 | 96 | $this->assertArrayHasKey('factories', $config['dependencies']); |
90 | 97 | } |
| 98 | + |
| 99 | + public function testServicesDefinedInConfigProvider() |
| 100 | + { |
| 101 | + $config = ($this->provider)(); |
| 102 | + |
| 103 | + $json = json_decode( |
| 104 | + file_get_contents(__DIR__ . '/../composer.lock'), |
| 105 | + true |
| 106 | + ); |
| 107 | + foreach ($json['packages'] as $package) { |
| 108 | + if (isset($package['extra']['zf']['config-provider'])) { |
| 109 | + $configProvider = new $package['extra']['zf']['config-provider'](); |
| 110 | + $config = array_merge_recursive($config, $configProvider()); |
| 111 | + } |
| 112 | + } |
| 113 | + |
| 114 | + $routerInterface = $this->prophesize(RouterInterface::class)->reveal(); |
| 115 | + $config['dependencies']['services'][RouterInterface::class] = $routerInterface; |
| 116 | + $container = $this->getContainer($config['dependencies']); |
| 117 | + |
| 118 | + $dependencies = $this->provider->getDependencies(); |
| 119 | + foreach ($dependencies['factories'] as $name => $factory) { |
| 120 | + $this->assertTrue($container->has($name), sprintf('Container does not contain service %s', $name)); |
| 121 | + $this->assertInternalType( |
| 122 | + 'object', |
| 123 | + $container->get($name), |
| 124 | + sprintf('Cannot get service %s from container using factory %s', $name, $factory) |
| 125 | + ); |
| 126 | + } |
| 127 | + |
| 128 | + foreach ($dependencies['aliases'] as $alias => $dependency) { |
| 129 | + $this->assertTrue( |
| 130 | + $container->has($alias), |
| 131 | + sprintf('Container does not contain service with alias %s', $alias) |
| 132 | + ); |
| 133 | + $this->assertInternalType( |
| 134 | + 'object', |
| 135 | + $container->get($alias), |
| 136 | + sprintf('Cannot get service %s using alias %s', $dependency, $alias) |
| 137 | + ); |
| 138 | + } |
| 139 | + } |
| 140 | + |
| 141 | + private function getContainer(array $dependencies) : ServiceManager |
| 142 | + { |
| 143 | + $container = new ServiceManager(); |
| 144 | + (new Config($dependencies))->configureServiceManager($container); |
| 145 | + |
| 146 | + return $container; |
| 147 | + } |
91 | 148 | } |
0 commit comments