-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathItkDevOpenIdConnectExtensionTest.php
More file actions
111 lines (92 loc) · 4.44 KB
/
Copy pathItkDevOpenIdConnectExtensionTest.php
File metadata and controls
111 lines (92 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
namespace ItkDev\OpenIdConnectBundle\Tests\DependencyInjection;
use ItkDev\OpenIdConnectBundle\Command\UserLoginCommand;
use ItkDev\OpenIdConnectBundle\DependencyInjection\ItkDevOpenIdConnectExtension;
use ItkDev\OpenIdConnectBundle\Security\CliLoginTokenAuthenticator;
use ItkDev\OpenIdConnectBundle\Security\OpenIdConfigurationProviderManager;
use ItkDev\OpenIdConnectBundle\Util\CliLoginHelper;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
class ItkDevOpenIdConnectExtensionTest extends TestCase
{
private function getBaseConfig(?string $userProvider = null): array
{
return [
'cache_options' => [
'cache_pool' => 'cache.app',
],
'cli_login_options' => [
'route' => 'test_route',
],
'user_provider' => $userProvider,
'openid_providers' => [
'test_provider' => [
'options' => [
'metadata_url' => 'https://example.com/.well-known/openid-configuration',
'client_id' => 'test_id',
'client_secret' => 'test_secret',
],
],
],
];
}
public function testLoad(): void
{
$extension = new ItkDevOpenIdConnectExtension();
$container = new ContainerBuilder();
$extension->load([$this->getBaseConfig()], $container);
$this->assertTrue($container->hasDefinition(OpenIdConfigurationProviderManager::class));
$this->assertTrue($container->hasDefinition(CliLoginHelper::class));
$this->assertTrue($container->hasDefinition(UserLoginCommand::class));
$this->assertTrue($container->hasDefinition(CliLoginTokenAuthenticator::class));
}
public function testLoadWiresProviderManagerConfig(): void
{
$extension = new ItkDevOpenIdConnectExtension();
$container = new ContainerBuilder();
$extension->load([$this->getBaseConfig()], $container);
$config = $container->getDefinition(OpenIdConfigurationProviderManager::class)->getArgument('$config');
$this->assertIsArray($config);
$defaultOptions = $config['default_providers_options'] ?? null;
$this->assertIsArray($defaultOptions);
$cacheItemPool = $defaultOptions['cacheItemPool'] ?? null;
$this->assertInstanceOf(Reference::class, $cacheItemPool);
$this->assertSame('cache.app', (string) $cacheItemPool);
// Provider options must be keyed by provider name with the
// intermediate 'options' level stripped.
$providers = $config['providers'] ?? null;
$this->assertIsArray($providers);
$this->assertSame(['test_provider'], array_keys($providers));
$provider = $providers['test_provider'];
$this->assertIsArray($provider);
$this->assertArrayNotHasKey('options', $provider);
$this->assertSame('test_id', $provider['client_id']);
}
public function testLoadWiresCacheAndCliLoginRoute(): void
{
$extension = new ItkDevOpenIdConnectExtension();
$container = new ContainerBuilder();
$extension->load([$this->getBaseConfig()], $container);
$cache = $container->getDefinition(CliLoginHelper::class)->getArgument('$cache');
$this->assertInstanceOf(Reference::class, $cache);
$this->assertSame('cache.app', (string) $cache);
$this->assertSame('test_route', $container->getDefinition(UserLoginCommand::class)->getArgument('$cliLoginRoute'));
$this->assertSame('test_route', $container->getDefinition(CliLoginTokenAuthenticator::class)->getArgument('$cliLoginRoute'));
}
public function testLoadWithUserProvider(): void
{
$extension = new ItkDevOpenIdConnectExtension();
$container = new ContainerBuilder();
$extension->load([$this->getBaseConfig('my_custom_user_provider')], $container);
$definition = $container->getDefinition(UserLoginCommand::class);
$userProviderArg = $definition->getArgument('$userProvider');
$this->assertInstanceOf(Reference::class, $userProviderArg);
$this->assertSame('my_custom_user_provider', (string) $userProviderArg);
}
public function testGetAlias(): void
{
$extension = new ItkDevOpenIdConnectExtension();
$this->assertSame('itkdev_openid_connect', $extension->getAlias());
}
}