Skip to content

Commit 118d287

Browse files
committed
test(bundle): add integration tests
1 parent c5bfa32 commit 118d287

19 files changed

+359
-27
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ spiriit_auth_log:
5959

6060
# Geolocation configuration (optional)
6161
location:
62-
method: null # 'geoip2', 'ipApi', or null to disable
62+
provider: null # 'geoip2', 'ipApi', or null to disable
6363
geoip2_database_path: null # Required if using geoip2
6464
```
6565
@@ -72,7 +72,7 @@ spiriit_auth_log:
7272
# ...
7373

7474
location:
75-
method: 'geoip2'
75+
provider: 'geoip2'
7676
geoip2_database_path: '%kernel.project_dir%/var/GeoLite2-City.mmdb'
7777
```
7878
@@ -85,7 +85,7 @@ spiriit_auth_log:
8585
# ...
8686

8787
location:
88-
method: 'ipApi'
88+
provider: 'ipApi'
8989
```
9090
9191
## Usage

composer.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
},
2121
"autoload-dev": {
2222
"psr-4": {
23-
"Spiriit\\Bundle\\Tests\\": "Tests/"
23+
"Spiriit\\Bundle\\Tests\\": "tests/"
2424
}
2525
},
2626
"require": {
@@ -35,14 +35,16 @@
3535
"symfony/mailer": "^6.0 || ^7.0",
3636
"symfony/security-bundle": "^6.4|^7.0",
3737
"symfony/translation-contracts": "^1.0|^2.0|^3.0",
38+
"symfony/translation": "^7.3",
3839
"symfony/twig-bundle": "^6.4|^7.0"
3940
},
4041
"require-dev": {
4142
"friendsofphp/php-cs-fixer": "^3.64",
4243
"phpstan/phpstan": "^2.1",
4344
"phpstan/phpstan-symfony": "^2.0",
4445
"rector/rector": "^2.1",
45-
"symfony/phpunit-bridge": "^7.3"
46+
"symfony/phpunit-bridge": "^7.3",
47+
"symfony/yaml": "^7.3"
4648
},
4749
"config": {
4850
"sort-packages": true

phpunit.xml.dist

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

33
<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
4-
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
<phpunit
5+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
56
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
67
backupGlobals="false"
78
bootstrap="vendor/autoload.php"
@@ -13,6 +14,7 @@
1314

1415
<php>
1516
<ini name="error_reporting" value="-1" />
17+
<env name="KERNEL_CLASS" value="Spiriit\Bundle\Tests\Integration\Kernel"/>
1618
<server name="APP_ENV" value="test" force="true" />
1719
<server name="APP_DEBUG" value="true" force="true" />
1820
<server name="SHELL_VERBOSITY" value="-1" />

src/AuthenticationLogFactory/AuthenticationLogFactoryInterface.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ interface AuthenticationLogFactoryInterface
1818
{
1919
public function supports(): string;
2020

21-
/**
22-
* @param mixed[] $factoryParameters
23-
*/
2421
public function createFrom(string $userIdentifier, UserInformation $userInformation): AbstractAuthenticationLog;
2522

2623
public function isKnown(AbstractAuthenticationLog $authenticationLog): bool;

src/DTO/LoginParameterDto.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
<?php
22

3+
/*
4+
* This file is part of the SpiriitLabs php-excel-rust package.
5+
* Copyright (c) SpiriitLabs <https://www.spiriit.com/>
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
310
namespace Spiriit\Bundle\AuthLogBundle\DTO;
411

512
readonly class LoginParameterDto
@@ -11,5 +18,6 @@ public function __construct(
1118
public string $toEmailName,
1219
public string $clientIp,
1320
public string $userAgent,
14-
) {}
21+
) {
22+
}
1523
}

src/DependencyInjection/Configuration.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public function getConfigTreeBuilder(): TreeBuilder
3131
->info('Enables integration with symfony/messenger if set true.')
3232
->end()
3333
->arrayNode('transports')
34+
->isRequired()
3435
->addDefaultsIfNotSet()
3536
->children()
3637
->scalarNode('mailer')
@@ -50,7 +51,7 @@ public function getConfigTreeBuilder(): TreeBuilder
5051
->arrayNode('location')
5152
->canBeUnset()
5253
->children()
53-
->scalarNode('method')
54+
->scalarNode('provider')
5455
->defaultNull()
5556
->validate()
5657
->ifNotInArray(['geoip2', 'ipApi', null])
@@ -63,7 +64,7 @@ public function getConfigTreeBuilder(): TreeBuilder
6364
->end()
6465
->validate()
6566
->ifTrue(function ($v): bool {
66-
return null !== $v && ($v['method'] ?? null) === 'geoip2' && empty($v['geoip2_database_path']);
67+
return null !== $v && ($v['provider'] ?? null) === 'geoip2' && empty($v['geoip2_database_path']);
6768
})
6869
->thenInvalid('Le champ "geoip2_database_path" est requis si la méthode "geoip2" est utilisée.')
6970
->end()

src/DependencyInjection/SpiriitAuthLogExtension.php

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,20 @@ public function load(array $configs, ContainerBuilder $container): void
4747
'fromName' => $config['transports']['sender_name'],
4848
];
4949

50+
$container->setAlias('spiriit_auth_log.translator', 'translator');
51+
5052
$container->setDefinition('spiriit_auth_log.notification', new Definition(NotificationInterface::class))
5153
->setClass(MailerNotification::class)
5254
->setArgument('$mailer', new Reference('spiriit_auth_log.transports.mailer'))
53-
->setArgument('$translator', new Reference('translator'))
54-
->setArgument('$addresses', $addresses)
55-
->setPublic(false);
55+
->setArgument('$translator', new Reference('spiriit_auth_log.translator'))
56+
->setArgument('$addresses', $addresses);
5657
} else {
5758
$container->setAlias('spiriit_auth_log.notification', $config['transports']['mailer'])->setPublic(false);
5859
}
5960

60-
$container->setDefinition('spiriit_auth_log.fetch_user_information', new Definition(FetchUserInformation::class))
61-
->setPublic(false);
61+
$container->setDefinition('spiriit_auth_log.fetch_user_information', new Definition(FetchUserInformation::class));
6262

63-
if (null !== $config['location']) {
63+
if (!empty($config['location'])) {
6464
$this->loadLocateMethod($config, $container);
6565
}
6666

@@ -74,9 +74,9 @@ public function load(array $configs, ContainerBuilder $container): void
7474

7575
$container->setAlias('spiriit_auth_log.login_event_dispatcher', EventDispatcherInterface::class);
7676

77-
$definitionLoginListener = $container->getDefinition('spiriit_auth_log.login_listener');
78-
7977
if ($config['messenger']) {
78+
$definitionLoginListener = $container->getDefinition('spiriit_auth_log.login_listener');
79+
8080
$loader->load('messenger.php');
8181

8282
$definitionLoginListener->addMethodCall('setMessageBus', [
@@ -90,7 +90,7 @@ public function load(array $configs, ContainerBuilder $container): void
9090
*/
9191
private function loadLocateMethod(array $configLocation, ContainerBuilder $container): void
9292
{
93-
$class = match ($configLocation['location']['method']) {
93+
$class = match ($configLocation['location']['provider']) {
9494
'ipApi' => IpApiLocateMethod::class,
9595
'geoip2' => Geoip2LocateMethod::class,
9696
default => null,
@@ -100,13 +100,11 @@ private function loadLocateMethod(array $configLocation, ContainerBuilder $conta
100100
$container->setDefinition('spiriit_auth_log.fetch_user_information_method', new Definition(FetchUserInformationMethodInterface::class))
101101
->setClass(IpApiLocateMethod::class)
102102
->setArgument('$httpClient', new Reference('spiriit_auth_log.http_client'))
103-
->setPublic(true)
104103
;
105104
} elseif (Geoip2LocateMethod::class === $class) {
106105
$container->setDefinition('spiriit_auth_log.fetch_user_information_method', new Definition(FetchUserInformationMethodInterface::class))
107106
->setClass(Geoip2LocateMethod::class)
108107
->setArgument('$geoip2DatabasePath', $configLocation['location']['geoip2_database_path'] ?? null)
109-
->setPublic(true)
110108
;
111109
}
112110
}

src/Listener/LoginListener.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ public function onLogin(InteractiveLoginEvent $event): void
3939
$request = $event->getRequest();
4040

4141
/** @var UserInterface&AuthenticableLogInterface $user */
42-
4342
$loginParameterDto = new LoginParameterDto(
4443
factoryName: $user->getAuthenticationLogFactoryName(),
4544
userIdentifier: $user->getUserIdentifier(),

src/Services/AuthenticationContextBuilder.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ public function __construct(
2121
) {
2222
}
2323

24-
/**
25-
* @param mixed[] $parametersFactory
26-
*/
2724
public function build(LoginParameterDto $loginParameterDto): AuthenticationContext
2825
{
2926
$factory = $this->factory->createFrom($loginParameterDto->factoryName);
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the SpiriitLabs php-excel-rust package.
5+
* Copyright (c) SpiriitLabs <https://www.spiriit.com/>
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
namespace Spiriit\Bundle\Tests\DependencyInjection;
11+
12+
use PHPUnit\Framework\TestCase;
13+
use Spiriit\Bundle\AuthLogBundle\DependencyInjection\SpiriitAuthLogExtension;
14+
use Spiriit\Bundle\AuthLogBundle\SpiriitAuthLogBundle;
15+
use Spiriit\Bundle\Tests\Integration\Stubs\Kernel;
16+
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
17+
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
18+
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
19+
use Symfony\Component\DependencyInjection\ContainerBuilder;
20+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
21+
22+
class SpiriitAuthLogExtensionTest extends TestCase
23+
{
24+
public function testEmptyConfiguration(): void
25+
{
26+
$container = $this->createContainer([
27+
'framework' => [
28+
'secret' => 'testing',
29+
],
30+
'spiriit_auth_log' => [],
31+
]);
32+
33+
self::expectException(InvalidConfigurationException::class);
34+
self::expectExceptionMessage('The child config "transports" under "spiriit_auth_log" must be configured.');
35+
36+
$container->compile();
37+
}
38+
39+
private function createContainer(array $configs = []): ContainerBuilder
40+
{
41+
$container = new ContainerBuilder(new ParameterBag([
42+
'kernel.bundles_metadata' => [],
43+
'kernel.cache_dir' => __DIR__,
44+
'kernel.debug' => false,
45+
'kernel.environment' => 'test',
46+
'kernel.name' => 'kernel',
47+
'kernel.root_dir' => __DIR__,
48+
'kernel.project_dir' => __DIR__,
49+
'kernel.container_class' => 'AutowiringTestContainer',
50+
'kernel.charset' => 'utf8',
51+
'kernel.runtime_environment' => 'test',
52+
'env(base64:default::SYMFONY_DECRYPTION_SECRET)' => 'dummy',
53+
'kernel.build_dir' => __DIR__,
54+
'debug.file_link_format' => null,
55+
'env(bool:default::SYMFONY_TRUST_X_SENDFILE_TYPE_HEADER)' => true,
56+
'env(default::SYMFONY_TRUSTED_HOSTS)' => [],
57+
'env(default::SYMFONY_TRUSTED_PROXIES)' => [],
58+
'env(default::SYMFONY_TRUSTED_HEADERS)' => [],
59+
'kernel.bundles' => [
60+
'FrameworkBundle' => FrameworkBundle::class,
61+
'SpiriitAuthLogBundle' => SpiriitAuthLogBundle::class,
62+
],
63+
]));
64+
65+
$container->set('kernel', function () {
66+
return new Kernel('test', false);
67+
});
68+
69+
$container->registerExtension(new FrameworkExtension());
70+
$container->registerExtension(new SpiriitAuthLogExtension());
71+
72+
foreach ($configs as $extension => $config) {
73+
$container->loadFromExtension($extension, $config);
74+
}
75+
76+
return $container;
77+
}
78+
}

0 commit comments

Comments
 (0)