Skip to content

Commit

Permalink
add request resolver
Browse files Browse the repository at this point in the history
  • Loading branch information
reinfi committed Oct 13, 2017
1 parent 397f3ee commit 6747685
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
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
\Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ContainerResolver::class => \Reinfi\DependencyInjection\Service\AutoWiring\Resolver\Factory\ContainerResolverFactory::class,
\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,
],
'abstract_factories' => [
\Reinfi\DependencyInjection\AbstractFactory\Config\InjectConfigAbstractFactory::class,
Expand Down
2 changes: 2 additions & 0 deletions src/Service/AutoWiring/Factory/ResolverServiceFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Reinfi\DependencyInjection\Service\AutoWiring\Resolver\ContainerInterfaceResolver;
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\ResolverService;
use Zend\Config\Config;

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

Expand Down
31 changes: 31 additions & 0 deletions src/Service/AutoWiring/Resolver/RequestResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

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

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

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

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

return new AutoWiring('Request');
}
}
82 changes: 82 additions & 0 deletions test/Unit/Service/AutoWiring/Resolver/RequestResolverTest.php
Original file line number Diff line number Diff line change
@@ -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\RequestResolver;
use Zend\Http\Request;
use Zend\Stdlib\RequestInterface;

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

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

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

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

/**
* @test
*/
public function itReturnsInjectionInterfaceForRequestClass()
{
$resolver = new RequestResolver();

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

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

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

/**
* @test
*/
public function itReturnsNullIfNoRequest()
{
$resolver = new RequestResolver();

$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 RequestResolver();

$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 6747685

Please sign in to comment.