Skip to content

Commit

Permalink
add response resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
reinfi committed Oct 13, 2017
1 parent 6747685 commit 472b69e
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 0 deletions.
1 change: 1 addition & 0 deletions config/module.config.php
Expand Up @@ -16,6 +16,7 @@
\Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ContainerInterfaceResolver::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
\Reinfi\DependencyInjection\Service\AutoWiring\Resolver\PluginManagerResolver::class => \Reinfi\DependencyInjection\Service\AutoWiring\Resolver\Factory\PluginManagerResolverFactory::class,
\Reinfi\DependencyInjection\Service\AutoWiring\Resolver\RequestResolver::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
\Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ResponseResolver::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
],
'abstract_factories' => [
\Reinfi\DependencyInjection\AbstractFactory\Config\InjectConfigAbstractFactory::class,
Expand Down
2 changes: 2 additions & 0 deletions src/Service/AutoWiring/Factory/ResolverServiceFactory.php
Expand Up @@ -8,6 +8,7 @@
use Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ContainerResolver;
use Reinfi\DependencyInjection\Service\AutoWiring\Resolver\PluginManagerResolver;
use Reinfi\DependencyInjection\Service\AutoWiring\Resolver\RequestResolver;
use Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ResponseResolver;
use Reinfi\DependencyInjection\Service\AutoWiring\ResolverService;
use Zend\Config\Config;

Expand Down Expand Up @@ -49,6 +50,7 @@ protected function getResolverStack(Config $config): Config
PluginManagerResolver::class,
ContainerInterfaceResolver::class,
RequestResolver::class,
ResponseResolver::class,
]
);

Expand Down
31 changes: 31 additions & 0 deletions src/Service/AutoWiring/Resolver/ResponseResolver.php
@@ -0,0 +1,31 @@
<?php

namespace Reinfi\DependencyInjection\Service\AutoWiring\Resolver;
use ReflectionParameter;
use Reinfi\DependencyInjection\Injection\AutoWiring;
use Zend\Stdlib\ResponseInterface;

/**
* @package Reinfi\DependencyInjection\Service\AutoWiring\Resolver
*/
class ResponseResolver implements ResolverInterface
{
/**
* @inheritDoc
*/
public function resolve(ReflectionParameter $parameter)
{
if ($parameter->getClass() === null) {
return null;
}

$reflectionClass = $parameter->getClass();
$interfaceNames = $reflectionClass->getInterfaceNames();

if (!in_array(ResponseInterface::class, $interfaceNames)) {
return null;
}

return new AutoWiring('Response');
}
}
82 changes: 82 additions & 0 deletions test/Unit/Service/AutoWiring/Resolver/ResponseResolverTest.php
@@ -0,0 +1,82 @@
<?php

namespace Reinfi\DependencyInjection\Unit\Service\AutoWiring\Resolver;

use PHPUnit\Framework\TestCase;
use Reinfi\DependencyInjection\Injection\AutoWiring;
use Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ResponseResolver;
use Zend\Http\Response;
use Zend\Stdlib\ResponseInterface;

/**
* @package Reinfi\DependencyInjection\Unit\Service\AutoWiring\Resolver
*/
class ResponseResolverTest extends TestCase
{
/**
* @test
*/
public function itReturnsInjectionInterfaceForResponseInterface()
{
$resolver = new ResponseResolver();

$class = $this->prophesize(\ReflectionClass::class);
$class->getInterfaceNames()->willReturn([ ResponseInterface::class ]);
$parameter = $this->prophesize(\ReflectionParameter::class);
$parameter->getClass()->willReturn($class->reveal());

$injection = $resolver->resolve($parameter->reveal());

$this->assertInstanceOf(AutoWiring::class, $injection);
}

/**
* @test
*/
public function itReturnsInjectionInterfaceForResponseClass()
{
$resolver = new ResponseResolver();

$class = new \ReflectionClass(Response::class);
$parameter = $this->prophesize(\ReflectionParameter::class);
$parameter->getClass()->willReturn($class);

$injection = $resolver->resolve($parameter->reveal());

$this->assertInstanceOf(AutoWiring::class, $injection);
}

/**
* @test
*/
public function itReturnsNullIfNoResponse()
{
$resolver = new ResponseResolver();

$class = $this->prophesize(\ReflectionClass::class);
$class->getInterfaceNames()->willReturn([]);
$parameter = $this->prophesize(\ReflectionParameter::class);
$parameter->getClass()->willReturn($class->reveal());

$this->assertNull(
$resolver->resolve($parameter->reveal()),
'return value should be null if not found'
);
}

/**
* @test
*/
public function itReturnsNullIfParameterHasNoClass()
{
$resolver = new ResponseResolver();

$parameter = $this->prophesize(\ReflectionParameter::class);
$parameter->getClass()->willReturn(null);

$this->assertNull(
$resolver->resolve($parameter->reveal()),
'return value should be null if not found'
);
}
}

0 comments on commit 472b69e

Please sign in to comment.