Skip to content

Commit

Permalink
Merge pull request #25 from mezzio/renovate/lock-file-maintenance
Browse files Browse the repository at this point in the history
Lock file maintenance, Improve type inference for ServiceManager related configuration
  • Loading branch information
Ocramius committed Jan 7, 2023
2 parents 1600579 + 8b4a3c7 commit 4c2b6f3
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 61 deletions.
139 changes: 101 additions & 38 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 2 additions & 19 deletions psalm-baseline.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="5.0.0@4e177bf0c9f03c17d2fbfd83b7cc9c47605274d8">
<files psalm-version="5.4.0@62db5d4f6a7ae0a20f7cc5a4952d730272fc0863">
<file src="src/LaminasRbac.php">
<MixedArgument occurrences="1">
<code>$routeName</code>
Expand Down Expand Up @@ -44,32 +44,15 @@
<InvalidFunctionCall occurrences="1">
<code>$configProvider()</code>
</InvalidFunctionCall>
<MixedArgument occurrences="4">
<MixedArgument occurrences="1">
<code>$configProvider()</code>
<code>$config['dependencies']</code>
<code>$factory</code>
<code>$name</code>
</MixedArgument>
<MixedArgumentTypeCoercion occurrences="1">
<code>$dependencies</code>
</MixedArgumentTypeCoercion>
<MixedArrayAccess occurrences="1">
<code>$package['extra']['laminas']['config-provider']</code>
</MixedArrayAccess>
<MixedArrayAssignment occurrences="2">
<code>$config['dependencies']['services']</code>
<code>$config['dependencies']['services']['config']</code>
</MixedArrayAssignment>
<MixedAssignment occurrences="2">
<code>$factory</code>
<code>$name</code>
</MixedAssignment>
<MixedMethodCall occurrences="1">
<code>new $package['extra']['laminas']['config-provider']()</code>
</MixedMethodCall>
<RedundantCondition occurrences="1">
<code>assertIsArray</code>
</RedundantCondition>
</file>
<file src="test/LaminasRbacFactoryTest.php">
<MissingReturnType occurrences="9">
Expand Down
7 changes: 5 additions & 2 deletions src/ConfigProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,26 @@

namespace Mezzio\Authorization\Rbac;

use Zend\Expressive\Authorization\Rbac\ZendRbac;
use Laminas\ServiceManager\ConfigInterface;

/** @psalm-import-type ServiceManagerConfigurationType from ConfigInterface */
class ConfigProvider
{
/** @return array{dependencies: ServiceManagerConfigurationType} */
public function __invoke(): array
{
return [
'dependencies' => $this->getDependencies(),
];
}

/** @return ServiceManagerConfigurationType */
public function getDependencies(): array
{
return [
// Legacy Zend Framework aliases
'aliases' => [
ZendRbac::class => LaminasRbac::class,
'Zend\Expressive\Authorization\Rbac\ZendRbac' => LaminasRbac::class,
],
'factories' => [
LaminasRbac::class => LaminasRbacFactory::class,
Expand Down
14 changes: 12 additions & 2 deletions test/ConfigProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace MezzioTest\Authorization\Rbac;

use Laminas\ServiceManager\ConfigInterface;
use Laminas\ServiceManager\ServiceManager;
use Mezzio\Authorization\Rbac\ConfigProvider;
use Mezzio\Authorization\Rbac\LaminasRbac;
Expand All @@ -14,6 +15,7 @@
use function json_decode;
use function sprintf;

/** @psalm-import-type ServiceManagerConfigurationType from ConfigInterface */
class ConfigProviderTest extends TestCase
{
/** @var ConfigProvider */
Expand All @@ -24,23 +26,27 @@ protected function setUp(): void
$this->provider = new ConfigProvider();
}

/** @return array{dependencies: ServiceManagerConfigurationType} */
public function testInvocationReturnsArray(): array
{
$config = ($this->provider)();
/** @psalm-suppress RedundantCondition */
self::assertIsArray($config);
return $config;
}

/**
* @param array{dependencies: ServiceManagerConfigurationType} $config
* @depends testInvocationReturnsArray
* @psalm-suppress RedundantConditionGivenDocblockType
*/
public function testReturnedArrayContainsDependencies(array $config): void
{
self::assertArrayHasKey('dependencies', $config);
self::assertIsArray($config['dependencies']);
self::assertArrayHasKey('factories', $config['dependencies']);

$factories = $config['dependencies']['factories'];
$factories = $config['dependencies']['factories'] ?? null;
self::assertIsArray($factories);
self::assertArrayHasKey(LaminasRbac::class, $factories);
}
Expand Down Expand Up @@ -70,7 +76,10 @@ public function testServicesDefinedInConfigProvider(): void
$container = $this->getContainer($config['dependencies']);

$dependencies = $this->provider->getDependencies();
foreach ($dependencies['factories'] as $name => $factory) {
$factories = $dependencies['factories'] ?? null;
self::assertIsArray($factories);
foreach ($factories as $name => $factory) {
self::assertIsString($factory);
self::assertTrue($container->has($name), sprintf('Container does not contain service %s', $name));
self::assertIsObject(
$container->get($name),
Expand All @@ -79,6 +88,7 @@ public function testServicesDefinedInConfigProvider(): void
}
}

/** @param ServiceManagerConfigurationType $dependencies */
private function getContainer(array $dependencies): ServiceManager
{
return new ServiceManager($dependencies);
Expand Down

0 comments on commit 4c2b6f3

Please sign in to comment.