<?php declare(strict_types=1); namespace ShlinkioTest\Shlink\Rest\Authentication; use PHPUnit\Framework\TestCase; use Shlinkio\Shlink\Rest\Authentication\AuthenticationPluginManager; use Shlinkio\Shlink\Rest\Authentication\AuthenticationPluginManagerFactory; use Shlinkio\Shlink\Rest\Authentication\Plugin\AuthenticationPluginInterface; use Zend\ServiceManager\ServiceManager; class AuthenticationPluginManagerFactoryTest extends TestCase { /** @var AuthenticationPluginManagerFactory */ private $factory; public function setUp(): void { $this->factory = new AuthenticationPluginManagerFactory(); } /** * @test * @dataProvider provideConfigs */ public function serviceIsProperlyCreatedWithExpectedPlugins(?array $config, array $expectedPlugins): void { $instance = ($this->factory)(new ServiceManager(['services' => [ 'config' => $config, ]])); $this->assertEquals($expectedPlugins, $this->getPlugins($instance)); } private function getPlugins(AuthenticationPluginManager $pluginManager): array { return (function () { return $this->services; })->call($pluginManager); } public function provideConfigs(): iterable { yield [null, []]; yield [[], []]; yield [['auth' => []], []]; yield [['auth' => [ 'plugins' => [], ]], []]; yield [['auth' => [ 'plugins' => [ 'services' => $plugins = [ 'foo' => $this->prophesize(AuthenticationPluginInterface::class)->reveal(), 'bar' => $this->prophesize(AuthenticationPluginInterface::class)->reveal(), ], ], ]], $plugins]; } }