Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit f1b80f1

Browse files
committed
Merge branch 'hotfix/555-config-provider-tests' into release-3.0.0
Close #555
2 parents fb3b2f6 + 2cdb038 commit f1b80f1

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ All notable changes to this project will be documented in this file, in reverse
2626
missing import statement for the PSR-7 `StreamInterface` to the
2727
`StreamFactoryFactory`.
2828

29+
- [#555](https://github.com/zendframework/zend-expressive/pull/555) adds tests
30+
to better ensure that the entries in the `ConfigProvider` resolve to valid
31+
factories, aliases, etc.
32+
2933
## 3.0.0alpha7 - 2018-02-14
3034

3135
### Added

test/ConfigProviderTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@
1818
use Zend\Expressive\Middleware;
1919
use Zend\Expressive\MiddlewareContainer;
2020
use Zend\Expressive\MiddlewareFactory;
21+
use Zend\Expressive\Router\ConfigProvider as RouterConfigProvider;
22+
use Zend\Expressive\Router\RouterInterface;
2123
use Zend\Expressive\ServerRequestErrorResponseGenerator;
2224
use Zend\Expressive\ServerRequestFactory;
2325
use Zend\HttpHandlerRunner\Emitter\EmitterInterface;
2426
use Zend\HttpHandlerRunner\RequestHandlerRunner;
27+
use Zend\ServiceManager\Config;
28+
use Zend\ServiceManager\ServiceManager;
2529
use Zend\Stratigility\Middleware\ErrorHandler;
2630

2731
use const Zend\Expressive\DEFAULT_DELEGATE;
@@ -40,6 +44,9 @@
4044

4145
class ConfigProviderTest extends TestCase
4246
{
47+
/** @var ConfigProvider */
48+
private $provider;
49+
4350
public function setUp()
4451
{
4552
$this->provider = new ConfigProvider();
@@ -88,4 +95,54 @@ public function testInvocationReturnsArrayWithDependencies()
8895
$this->assertArrayHasKey('aliases', $config['dependencies']);
8996
$this->assertArrayHasKey('factories', $config['dependencies']);
9097
}
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+
}
91148
}

0 commit comments

Comments
 (0)