Skip to content

Commit 3da97ac

Browse files
authored
Encapsulate services and collectors (#103)
1 parent 097c66c commit 3da97ac

10 files changed

+96
-74
lines changed

src/Codeception/Module/Symfony.php

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
use Symfony\Component\HttpKernel\Profiler\Profiler;
3939
use Symfony\Component\Mailer\DataCollector\MessageDataCollector;
4040
use Symfony\Component\Routing\Route;
41-
use Symfony\Component\Routing\RouterInterface;
4241
use Symfony\Component\VarDumper\Cloner\Data;
4342
use function array_keys;
4443
use function array_map;
@@ -280,14 +279,14 @@ public function _getEntityManager()
280279
if (!isset($this->permanentServices[$this->config['em_service']])) {
281280
// try to persist configured EM
282281
$this->persistPermanentService($this->config['em_service']);
283-
284-
if ($this->_getContainer()->has('doctrine')) {
282+
$container = $this->_getContainer();
283+
if ($container->has('doctrine')) {
285284
$this->persistPermanentService('doctrine');
286285
}
287-
if ($this->_getContainer()->has('doctrine.orm.default_entity_manager')) {
286+
if ($container->has('doctrine.orm.default_entity_manager')) {
288287
$this->persistPermanentService('doctrine.orm.default_entity_manager');
289288
}
290-
if ($this->_getContainer()->has('doctrine.dbal.backend_connection')) {
289+
if ($container->has('doctrine.dbal.backend_connection')) {
291290
$this->persistPermanentService('doctrine.dbal.backend_connection');
292291
}
293292
}
@@ -377,13 +376,10 @@ protected function getKernelClass(): string
377376
*/
378377
protected function getProfile(): ?Profile
379378
{
380-
$container = $this->_getContainer();
381-
if (!$container->has('profiler')) {
379+
/** @var Profiler $profiler */
380+
if (!$profiler = $this->getService('profiler')) {
382381
return null;
383382
}
384-
385-
/** @var Profiler $profiler */
386-
$profiler = $this->grabService('profiler');
387383
try {
388384
/** @var Response $response */
389385
$response = $this->client->getResponse();
@@ -479,8 +475,7 @@ protected function getInternalDomains(): array
479475
{
480476
$internalDomains = [];
481477

482-
/** @var RouterInterface $router */
483-
$router = $this->grabService('router');
478+
$router = $this->grabRouterService();
484479
$routes = $router->getRouteCollection();
485480
/* @var Route $route */
486481
foreach ($routes as $route) {

src/Codeception/Module/Symfony/ConsoleAssertionsTrait.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Symfony\Bundle\FrameworkBundle\Console\Application;
88
use Symfony\Component\Console\Tester\CommandTester;
9+
use Symfony\Component\HttpKernel\KernelInterface;
910

1011
trait ConsoleAssertionsTrait
1112
{
@@ -26,7 +27,7 @@ trait ConsoleAssertionsTrait
2627
*/
2728
public function runSymfonyConsoleCommand(string $command, array $parameters = [], array $consoleInputs = [], int $expectedExitCode = 0): string
2829
{
29-
$kernel = $this->grabService('kernel');
30+
$kernel = $this->grabKernelService();
3031
$application = new Application($kernel);
3132
$consoleCommand = $application->find($command);
3233
$commandTester = new CommandTester($consoleCommand);
@@ -45,4 +46,9 @@ public function runSymfonyConsoleCommand(string $command, array $parameters = []
4546

4647
return $output;
4748
}
49+
50+
protected function grabKernelService(): KernelInterface
51+
{
52+
return $this->grabService('kernel');
53+
}
4854
}

src/Codeception/Module/Symfony/EventsAssertionsTrait.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ trait EventsAssertionsTrait
2727
*/
2828
public function dontSeeEventTriggered($expected): void
2929
{
30-
/** @var EventDataCollector $eventCollector */
31-
$eventCollector = $this->grabCollector('events', __FUNCTION__);
30+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
3231

3332
/** @var Data $data */
3433
$data = $eventCollector->getNotCalledListeners();
@@ -63,8 +62,7 @@ public function dontSeeEventTriggered($expected): void
6362
*/
6463
public function seeEventTriggered($expected): void
6564
{
66-
/** @var EventDataCollector $eventCollector */
67-
$eventCollector = $this->grabCollector('events', __FUNCTION__);
65+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
6866

6967
/** @var Data $data */
7068
$data = $eventCollector->getCalledListeners();
@@ -88,4 +86,9 @@ public function seeEventTriggered($expected): void
8886
$this->assertTrue($triggered, "The '$expectedEvent' event did not trigger");
8987
}
9088
}
89+
90+
protected function grabEventCollector(string $function): EventDataCollector
91+
{
92+
return $this->grabCollector('events', $function);
93+
}
9194
}

src/Codeception/Module/Symfony/FormAssertionsTrait.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ trait FormAssertionsTrait
2222
*/
2323
public function dontSeeFormErrors(): void
2424
{
25-
/** @var FormDataCollector $formCollector */
26-
$formCollector = $this->grabCollector('form', __FUNCTION__);
25+
$formCollector = $this->grabFormCollector(__FUNCTION__);
2726

2827
$this->assertEquals(
2928
0,
@@ -47,8 +46,7 @@ public function dontSeeFormErrors(): void
4746
*/
4847
public function seeFormErrorMessage(string $field, ?string $message = null): void
4948
{
50-
/** @var FormDataCollector $formCollector */
51-
$formCollector = $this->grabCollector('form', __FUNCTION__);
49+
$formCollector = $this->grabFormCollector(__FUNCTION__);
5250

5351
if (!$forms = $formCollector->getData()->getValue('forms')['forms']) {
5452
$this->fail('There are no forms on the current page.');
@@ -157,13 +155,17 @@ public function seeFormErrorMessages(array $expectedErrors): void
157155
*/
158156
public function seeFormHasErrors(): void
159157
{
160-
/** @var FormDataCollector $formCollector */
161-
$formCollector = $this->grabCollector('form', __FUNCTION__);
158+
$formCollector = $this->grabFormCollector(__FUNCTION__);
162159

163160
$this->assertGreaterThan(
164161
0,
165162
$formCollector->getData()->offsetGet('nb_errors'),
166163
'Expecting that the form has errors, but there were none!'
167164
);
168165
}
166+
167+
protected function grabFormCollector(string $function): FormDataCollector
168+
{
169+
return $this->grabCollector('form', $function);
170+
}
169171
}

src/Codeception/Module/Symfony/MailerAssertionsTrait.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,13 @@ public function seeEmailIsSent(int $expectedCount = 1): void
3838

3939
protected function getMessageMailerEvents(): MessageEvents
4040
{
41-
$container = $this->_getContainer();
42-
43-
if ($container->has('mailer.message_logger_listener')) {
41+
if ($messageLogger = $this->getService('mailer.message_logger_listener')) {
4442
/** @var MessageLoggerListener $messageLogger */
45-
$messageLogger = $container->get('mailer.message_logger_listener');
4643
return $messageLogger->getEvents();
4744
}
4845

49-
if ($container->has('mailer.logger_message_listener')) {
46+
if ($messageLogger = $this->getService('mailer.logger_message_listener')) {
5047
/** @var MessageLoggerListener $messageLogger */
51-
$messageLogger = $container->get('mailer.logger_message_listener');
5248
return $messageLogger->getEvents();
5349
}
5450

src/Codeception/Module/Symfony/ParameterAssertionsTrait.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ trait ParameterAssertionsTrait
2121
*/
2222
public function grabParameter(string $name)
2323
{
24-
/** @var ParameterBagInterface $parameterBag */
25-
$parameterBag = $this->grabService('parameter_bag');
24+
$parameterBag = $this->grabParameterBagService();
2625
return $parameterBag->get($name);
2726
}
27+
28+
protected function grabParameterBagService(): ParameterBagInterface
29+
{
30+
return $this->grabService('parameter_bag');
31+
}
2832
}

src/Codeception/Module/Symfony/RouterAssertionsTrait.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ trait RouterAssertionsTrait
3232
*/
3333
public function amOnAction(string $action, array $params = []): void
3434
{
35-
/** @var RouterInterface $router */
36-
$router = $this->grabService('router');
35+
$router = $this->grabRouterService();
3736

3837
$routes = $router->getRouteCollection()->getIterator();
3938

@@ -66,8 +65,7 @@ public function amOnAction(string $action, array $params = []): void
6665
*/
6766
public function amOnRoute(string $routeName, array $params = []): void
6867
{
69-
/** @var RouterInterface $router */
70-
$router = $this->grabService('router');
68+
$router = $this->grabRouterService();
7169
if ($router->getRouteCollection()->get($routeName) === null) {
7270
$this->fail(sprintf('Route with name "%s" does not exists.', $routeName));
7371
}
@@ -96,8 +94,7 @@ public function invalidateCachedRouter(): void
9694
*/
9795
public function seeCurrentActionIs(string $action): void
9896
{
99-
/** @var RouterInterface $router */
100-
$router = $this->grabService('router');
97+
$router = $this->grabRouterService();
10198

10299
$routes = $router->getRouteCollection()->getIterator();
103100

@@ -129,8 +126,7 @@ public function seeCurrentActionIs(string $action): void
129126
*/
130127
public function seeCurrentRouteIs(string $routeName, array $params = []): void
131128
{
132-
/** @var RouterInterface $router */
133-
$router = $this->grabService('router');
129+
$router = $this->grabRouterService();
134130
if ($router->getRouteCollection()->get($routeName) === null) {
135131
$this->fail(sprintf('Route with name "%s" does not exists.', $routeName));
136132
}
@@ -160,8 +156,7 @@ public function seeCurrentRouteIs(string $routeName, array $params = []): void
160156
*/
161157
public function seeInCurrentRoute(string $routeName): void
162158
{
163-
/** @var RouterInterface $router */
164-
$router = $this->grabService('router');
159+
$router = $this->grabRouterService();
165160
if ($router->getRouteCollection()->get($routeName) === null) {
166161
$this->fail(sprintf('Route with name "%s" does not exists.', $routeName));
167162
}
@@ -175,4 +170,9 @@ public function seeInCurrentRoute(string $routeName): void
175170

176171
$this->assertEquals($matchedRouteName, $routeName);
177172
}
173+
174+
protected function grabRouterService(): RouterInterface
175+
{
176+
return $this->grabService('router');
177+
}
178178
}

src/Codeception/Module/Symfony/SecurityAssertionsTrait.php

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Codeception\Module\Symfony;
66

77
use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter;
8+
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
89
use Symfony\Component\Security\Core\Security;
910
use Symfony\Component\Security\Core\User\UserInterface;
1011
use function sprintf;
@@ -21,8 +22,7 @@ trait SecurityAssertionsTrait
2122
*/
2223
public function dontSeeAuthentication(): void
2324
{
24-
/** @var Security $security */
25-
$security = $this->grabService('security.helper');
25+
$security = $this->grabSecurityService();
2626

2727
$this->assertFalse(
2828
$security->isGranted(AuthenticatedVoter::IS_AUTHENTICATED_FULLY),
@@ -40,8 +40,7 @@ public function dontSeeAuthentication(): void
4040
*/
4141
public function dontSeeRememberedAuthentication(): void
4242
{
43-
/** @var Security $security */
44-
$security = $this->grabService('security.helper');
43+
$security = $this->grabSecurityService();
4544

4645
$hasRememberMeCookie = $this->client->getCookieJar()->get('REMEMBERME');
4746
$hasRememberMeRole = $security->isGranted(AuthenticatedVoter::IS_AUTHENTICATED_REMEMBERED);
@@ -63,8 +62,7 @@ public function dontSeeRememberedAuthentication(): void
6362
*/
6463
public function seeAuthentication(): void
6564
{
66-
/** @var Security $security */
67-
$security = $this->grabService('security.helper');
65+
$security = $this->grabSecurityService();
6866

6967
$user = $security->getUser();
7068

@@ -88,8 +86,7 @@ public function seeAuthentication(): void
8886
*/
8987
public function seeRememberedAuthentication(): void
9088
{
91-
/** @var Security $security */
92-
$security = $this->grabService('security.helper');
89+
$security = $this->grabSecurityService();
9390

9491
$user = $security->getUser();
9592

@@ -119,8 +116,7 @@ public function seeRememberedAuthentication(): void
119116
*/
120117
public function seeUserHasRole(string $role): void
121118
{
122-
/** @var Security $security */
123-
$security = $this->grabService('security.helper');
119+
$security = $this->grabSecurityService();
124120

125121
$user = $security->getUser();
126122

@@ -172,15 +168,24 @@ public function seeUserHasRoles(array $roles): void
172168
public function seeUserPasswordDoesNotNeedRehash(UserInterface $user = null): void
173169
{
174170
if ($user === null) {
175-
/** @var Security $security */
176-
$security = $this->grabService('security.helper');
171+
$security = $this->grabSecurityService();
177172
$user = $security->getUser();
178173
if ($user === null) {
179174
$this->fail('No user found to validate');
180175
}
181176
}
182-
$encoder = $this->grabService('security.user_password_encoder.generic');
177+
$hasher = $this->grabPasswordHasherService();
183178

184-
$this->assertFalse($encoder->needsRehash($user), 'User password needs rehash');
179+
$this->assertFalse($hasher->needsRehash($user), 'User password needs rehash');
180+
}
181+
182+
protected function grabSecurityService(): Security
183+
{
184+
return $this->grabService('security.helper');
185+
}
186+
187+
protected function grabPasswordHasherService(): UserPasswordEncoderInterface
188+
{
189+
return $this->grabService('security.user_password_encoder.generic');
185190
}
186191
}

src/Codeception/Module/Symfony/ServicesAssertionsTrait.php

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,17 @@ trait ServicesAssertionsTrait
1919
* ```
2020
*
2121
* @part services
22-
* @param string $service
23-
* @return mixed
22+
* @param string $serviceId
23+
* @return object
2424
*/
25-
public function grabService(string $service)
25+
public function grabService(string $serviceId): object
2626
{
27-
$container = $this->_getContainer();
28-
if (!$container->has($service)) {
29-
$this->fail("Service $service is not available in container.
27+
if (!$service = $this->getService($serviceId)) {
28+
$this->fail("Service $serviceId is not available in container.
3029
If the service isn't injected anywhere in your app, you need to set it to `public` in your `config/services_test.php`/`.yaml`,
3130
see https://symfony.com/doc/current/testing.html#accessing-the-container");
3231
}
33-
return $container->get($service);
32+
return $service;
3433
}
3534

3635
/**
@@ -83,4 +82,13 @@ public function unpersistService(string $serviceName): void
8382
unset($this->client->persistentServices[$serviceName]);
8483
}
8584
}
85+
86+
protected function getService(string $serviceId): ?object
87+
{
88+
$container = $this->_getContainer();
89+
if ($container->has($serviceId)) {
90+
return $container->get($serviceId);
91+
}
92+
return null;
93+
}
8694
}

0 commit comments

Comments
 (0)