Skip to content

Commit 3da97ac

Browse files
authored
Encapsulate services and collectors (Codeception#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy