Skip to content

Commit be7273b

Browse files
committed
ConfigProvider functional tests
1 parent e7e4968 commit be7273b

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<?php
2+
3+
/**
4+
* This file is part of coisa/error-handler.
5+
*
6+
* (c) Felipe Sayão Lobato Abreu <[email protected]>
7+
*
8+
* This source file is subject to the license that is bundled
9+
* with this source code in the file LICENSE.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace CoiSA\ErrorHandler\Test\Functional\Container;
15+
16+
use CoiSA\ErrorHandler\Container\ConfigProvider;
17+
use CoiSA\ErrorHandler\Container\ErrorHandlerContainer;
18+
use Phly\EventDispatcher\EventDispatcher;
19+
use Phly\EventDispatcher\ListenerProvider\ListenerProviderAggregate;
20+
use PHPUnit\Framework\TestCase;
21+
use Psr\EventDispatcher\EventDispatcherInterface;
22+
use Psr\Http\Message\ResponseFactoryInterface;
23+
use Psr\Http\Message\StreamFactoryInterface;
24+
use Zend\Diactoros\ResponseFactory;
25+
use Zend\Diactoros\StreamFactory;
26+
use Zend\ServiceManager\ServiceManager;
27+
28+
/**
29+
* Class ConfigProviderTest
30+
*
31+
* @package CoiSA\ErrorHandler\Test\Functional\Container
32+
*/
33+
final class ConfigProviderTest extends TestCase
34+
{
35+
/** @var ServiceManager */
36+
private $serviceManager;
37+
38+
/** @var ErrorHandlerContainer */
39+
private $container;
40+
41+
/** @var ConfigProvider */
42+
private $configProvider;
43+
44+
public function setUp(): void
45+
{
46+
$this->configProvider = new ConfigProvider();
47+
$configs = ($this->configProvider)();
48+
49+
$this->serviceManager = new ServiceManager($configs['dependencies']);
50+
$this->container = new ErrorHandlerContainer($this->serviceManager);
51+
52+
$this->setUpServiceManager($this->serviceManager);
53+
}
54+
55+
public function setUpServiceManager(ServiceManager $serviceManager): void
56+
{
57+
$listenerProvider = new ListenerProviderAggregate();
58+
$eventDispatcher = new EventDispatcher($listenerProvider);
59+
60+
$serviceManager->setService(EventDispatcherInterface::class, $eventDispatcher);
61+
$serviceManager->setService(ResponseFactoryInterface::class, new ResponseFactory());
62+
$serviceManager->setService(StreamFactoryInterface::class, new StreamFactory());
63+
}
64+
65+
public function provideContainerDependenciesClassNames(): array
66+
{
67+
$dependencies = (new ConfigProvider())->getDependencies();
68+
69+
return \array_chunk(\array_keys(\array_merge(...\array_values($dependencies))), 1);
70+
}
71+
72+
/** @dataProvider provideContainerDependenciesClassNames */
73+
public function testServiceManagerHasConfigProviderDependencies(string $className): void
74+
{
75+
$this->assertTrue($this->serviceManager->has($className));
76+
}
77+
78+
/** @dataProvider provideContainerDependenciesClassNames */
79+
public function testContainerWithServiceManagerHasConfigProviderDependencies(string $className): void
80+
{
81+
$this->assertTrue($this->container->has($className));
82+
}
83+
84+
/** @dataProvider provideContainerDependenciesClassNames */
85+
public function testContainerWithoutServiceManagerHasConfigProviderDependencies(string $className): void
86+
{
87+
$container = new ErrorHandlerContainer();
88+
$this->assertTrue($container->has($className));
89+
}
90+
91+
public function provideContainerDependenciesWithInstanceType(): array
92+
{
93+
$dependencies = (new ConfigProvider())->getDependencies();
94+
$classNames = \array_keys(\array_merge(...\array_values($dependencies)));
95+
96+
return \array_map(function ($classNameName) use ($dependencies) {
97+
$instanceOf = $dependencies['aliases'][$classNameName] ?? $classNameName;
98+
99+
return [
100+
$classNameName,
101+
$instanceOf,
102+
];
103+
}, $classNames);
104+
}
105+
106+
/**
107+
* @dataProvider provideContainerDependenciesWithInstanceType
108+
*/
109+
public function testServiceManagerCanCreateDependecyThatImplements(string $className, string $instanceOf): void
110+
{
111+
$object = $this->serviceManager->get($className);
112+
$this->assertInstanceOf($instanceOf, $object);
113+
}
114+
115+
/**
116+
* @dataProvider provideContainerDependenciesWithInstanceType
117+
*/
118+
public function testContainerCanCreateDependecyThatImplements(string $className, string $instanceOf): void
119+
{
120+
$object = $this->container->get($className);
121+
$this->assertInstanceOf($instanceOf, $object);
122+
}
123+
124+
/**
125+
* @dataProvider provideContainerDependenciesWithInstanceType
126+
*/
127+
public function testWithCleanServiceManagerCanCreateDependecyThatImplements(
128+
string $className,
129+
string $instanceOf
130+
): void {
131+
$serviceManager = new ServiceManager();
132+
$container = new ErrorHandlerContainer($this->serviceManager);
133+
134+
$this->setUpServiceManager($serviceManager);
135+
136+
$object = $container->get($className);
137+
$this->assertInstanceOf($instanceOf, $object);
138+
}
139+
}

0 commit comments

Comments
 (0)