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

Commit

Permalink
Incorporate feedback for InputFilterAbstractServiceFactory
Browse files Browse the repository at this point in the history
- Move v2 checks into v2-specific methods of abstract factory.
- Use provided `$services` argument when lazy-instantiating filter and
  validator plugin managers.
- For abstract factory tests, vary methods tested based on service
  manager version.
  • Loading branch information
weierophinney committed Feb 18, 2016
1 parent 656001c commit ec011db
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 40 deletions.
37 changes: 20 additions & 17 deletions src/InputFilterAbstractServiceFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
use Zend\Filter\FilterPluginManager;
use Zend\ServiceManager\AbstractFactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\ServiceManager\ServiceManager;
use Zend\Validator\ValidatorPluginManager;

class InputFilterAbstractServiceFactory implements AbstractFactoryInterface
Expand All @@ -23,7 +22,6 @@ class InputFilterAbstractServiceFactory implements AbstractFactoryInterface
*/
protected $factory;


/**
* @param ContainerInterface $services
* @param string $rName
Expand All @@ -32,14 +30,8 @@ class InputFilterAbstractServiceFactory implements AbstractFactoryInterface
*/
public function __invoke(ContainerInterface $services, $rName, array $options = null)
{
// v2 - get parent service manager
if (! method_exists($services, 'configure')) {
$services = $services->getServiceLocator();
}

$allConfig = $services->get('config');
$config = $allConfig['input_filter_specs'][$rName];

$factory = $this->getInputFilterFactory($services);

return $factory->createInputFilter($config);
Expand All @@ -54,11 +46,6 @@ public function __invoke(ContainerInterface $services, $rName, array $options =
*/
public function canCreate(ContainerInterface $services, $rName)
{
// v2 - get parent service manager
if (! method_exists($services, 'configure')) {
$services = $services->getServiceLocator();
}

if (! $services->has('config')) {
return false;
}
Expand All @@ -83,7 +70,15 @@ public function canCreate(ContainerInterface $services, $rName)
*/
public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
{
return $this->canCreate($serviceLocator, $requestedName);
// v2 => need to get parent service locator
$services = $serviceLocator->getServiceLocator();

// No parent locator => cannot create service.
if (! $services) {
return false;
}

return $this->canCreate($services, $requestedName);
}

/**
Expand All @@ -94,7 +89,15 @@ public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator
*/
public function createServiceWithName(ServiceLocatorInterface $inputFilters, $cName, $rName)
{
return $this($inputFilters, $rName);
// v2 => need to get parent service locator
$services = $inputFilters->getServiceLocator();

// No parent locator => cannot create service.
if (! $services) {
return false;
}

return $this($services, $rName);
}

/**
Expand Down Expand Up @@ -128,7 +131,7 @@ protected function getFilterPluginManager(ServiceLocatorInterface $services)
return $services->get('FilterManager');
}

return new FilterPluginManager(new ServiceManager());
return new FilterPluginManager($services);
}

/**
Expand All @@ -141,6 +144,6 @@ protected function getValidatorPluginManager(ServiceLocatorInterface $services)
return $services->get('ValidatorManager');
}

return new ValidatorPluginManager(new ServiceManager());
return new ValidatorPluginManager($services);
}
}
92 changes: 69 additions & 23 deletions test/InputFilterAbstractServiceFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,19 @@
*/
class InputFilterAbstractServiceFactoryTest extends TestCase
{
/** @var ServiceManager */
/**
* @var ServiceManager
*/
protected $services;

/** @var InputFilterPluginManager */
/**
* @var InputFilterPluginManager
*/
protected $filters;

/** @var InputFilterAbstractServiceFactory */
/**
* @var InputFilterAbstractServiceFactory
*/
protected $factory;

public function setUp()
Expand All @@ -44,27 +50,48 @@ public function setUp()

public function testCannotCreateServiceIfNoConfigServicePresent()
{
$this->assertFalse($this->factory->canCreate($this->getCompatContainer(), 'filter'));
// v2
$this->assertFalse($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
if (method_exists($this->services, 'configure')) {
// v3
$method = 'canCreate';
$args = [$this->getCompatContainer(), 'filter'];
} else {
// v2
$method = 'canCreateServiceWithName';
$args = [$this->getCompatContainer(), 'filter', 'filter'];
}
$this->assertFalse(call_user_func_array([$this->factory, $method], $args));
}

public function testCannotCreateServiceIfConfigServiceDoesNotHaveInputFiltersConfiguration()
{
$this->services->setService('config', []);
$this->assertFalse($this->factory->canCreate($this->getCompatContainer(), 'filter'));
// v2
$this->assertFalse($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
if (method_exists($this->services, 'configure')) {
// v3
$method = 'canCreate';
$args = [$this->getCompatContainer(), 'filter'];
} else {
// v2
$method = 'canCreateServiceWithName';
$args = [$this->getCompatContainer(), 'filter', 'filter'];
}
$this->assertFalse(call_user_func_array([$this->factory, $method], $args));
}

public function testCannotCreateServiceIfConfigInputFiltersDoesNotContainMatchingServiceName()
{
$this->services->setService('config', [
'input_filter_specs' => [],
]);
$this->assertFalse($this->factory->canCreate($this->getCompatContainer(), 'filter'));
// v2
$this->assertFalse($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
if (method_exists($this->services, 'configure')) {
// v3
$method = 'canCreate';
$args = [$this->getCompatContainer(), 'filter'];
} else {
// v2
$method = 'canCreateServiceWithName';
$args = [$this->getCompatContainer(), 'filter', 'filter'];
}
$this->assertFalse(call_user_func_array([$this->factory, $method], $args));
}

public function testCanCreateServiceIfConfigInputFiltersContainsMatchingServiceName()
Expand All @@ -74,9 +101,16 @@ public function testCanCreateServiceIfConfigInputFiltersContainsMatchingServiceN
'filter' => [],
],
]);
$this->assertTrue($this->factory->canCreate($this->getCompatContainer(), 'filter'));
// v2
$this->assertTrue($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
if (method_exists($this->services, 'configure')) {
// v3
$method = 'canCreate';
$args = [$this->getCompatContainer(), 'filter'];
} else {
// v2
$method = 'canCreateServiceWithName';
$args = [$this->getCompatContainer(), 'filter', 'filter'];
}
$this->assertTrue(call_user_func_array([$this->factory, $method], $args));
}

public function testCreatesInputFilterInstance()
Expand All @@ -86,11 +120,17 @@ public function testCreatesInputFilterInstance()
'filter' => [],
],
]);
$filter = $this->factory->__invoke($this->getCompatContainer(), 'filter');
if (method_exists($this->services, 'configure')) {
// v3
$method = '__invoke';
$args = [$this->getCompatContainer(), 'filter'];
} else {
// v2
$method = 'createServiceWithName';
$args = [$this->getCompatContainer(), 'filter', 'filter'];
}
$filter = call_user_func_array([$this->factory, $method], $args);
$this->assertInstanceOf(InputFilterInterface::class, $filter);
// v2
$v2filter = $this->factory->createServiceWithName($this->getCompatContainer(), 'filter', 'filter');
$this->assertEquals($filter, $v2filter);
}

/**
Expand Down Expand Up @@ -128,11 +168,17 @@ public function testUsesConfiguredValidationAndFilterManagerServicesWhenCreating
]);


$inputFilter = $this->factory->__invoke($this->getCompatContainer(), 'filter');
if (method_exists($this->services, 'configure')) {
// v3
$method = '__invoke';
$args = [$this->getCompatContainer(), 'filter'];
} else {
// v2
$method = 'createServiceWithName';
$args = [$this->getCompatContainer(), 'filter', 'filter'];
}
$inputFilter = call_user_func_array([$this->factory, $method], $args);
$this->assertTrue($inputFilter->has('input'));
// v2
$v2InputFilter = $this->factory->createServiceWithName($this->getCompatContainer(), 'filter', 'filter');
$this->assertEquals($inputFilter, $v2InputFilter);

$input = $inputFilter->get('input');

Expand Down

0 comments on commit ec011db

Please sign in to comment.