From aec1579ce0029e93cb4cc5f11dfe529d6ebf7eba Mon Sep 17 00:00:00 2001 From: semaz Date: Tue, 10 May 2022 18:15:12 +0300 Subject: [PATCH 1/3] add support for symfony 6.0 --- composer.json | 18 +++++++++--------- src/Codeception/Module/Symfony.php | 2 +- .../Module/Symfony/SessionAssertionsTrait.php | 19 ++++++++++++++----- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/composer.json b/composer.json index d9ddbbcf..d3ad5022 100644 --- a/composer.json +++ b/composer.json @@ -19,20 +19,20 @@ "php": "^8.0", "ext-json": "*", "codeception/lib-innerbrowser": "^3.1.1", - "codeception/codeception": "^5.0.0-RC1" + "codeception/codeception": "^5.0.0-RC3" }, "require-dev": { "codeception/module-asserts": "^3.0", "codeception/module-doctrine2": "^3.0", "doctrine/orm": "^2.10", - "symfony/form": "^4.4 | ^5.0", - "symfony/framework-bundle": "^4.4 | ^5.0", - "symfony/http-kernel": "^4.4 | ^5.0", - "symfony/mailer": "^4.4 | ^5.0", - "symfony/routing": "^4.4 | ^5.0", - "symfony/security-bundle": "^4.4 | ^5.0", - "symfony/twig-bundle": "^4.4 | ^5.0", - "vlucas/phpdotenv": "^4.2 | ^5.3" + "symfony/form": "^6.0", + "symfony/framework-bundle": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/routing": "^6.0", + "symfony/security-bundle": "^6.0", + "symfony/twig-bundle": "^6.0", + "vlucas/phpdotenv": "^4.2 | ^5.4" }, "suggest": { "codeception/module-asserts": "Include traditional PHPUnit assertions in your tests", diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index 1d045f07..979855ae 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -160,7 +160,7 @@ class Symfony extends Framework implements DoctrineProvider, PartedModule 'cache_router' => false, 'em_service' => 'doctrine.orm.entity_manager', 'rebootable_client' => true, - 'guard' => false + 'authenticator' => false ]; /** diff --git a/src/Codeception/Module/Symfony/SessionAssertionsTrait.php b/src/Codeception/Module/Symfony/SessionAssertionsTrait.php index 4c3bc192..55457934 100644 --- a/src/Codeception/Module/Symfony/SessionAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/SessionAssertionsTrait.php @@ -9,7 +9,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\User\UserInterface; -use Symfony\Component\Security\Guard\Token\PostAuthenticationGuardToken; +use Symfony\Component\Security\Http\Authenticator\Token\PostAuthenticationToken; use Symfony\Component\Security\Http\Logout\LogoutUrlGenerator; use function is_int; use function serialize; @@ -37,12 +37,14 @@ public function amLoggedInAs(UserInterface $user, string $firewallName = 'main', { $session = $this->getCurrentSession(); - if ($this->config['guard']) { - $token = new PostAuthenticationGuardToken($user, $firewallName, $user->getRoles()); + if ($this->config['authenticator']) { + $token = new PostAuthenticationToken($user, $firewallName, $user->getRoles()); } else { - $token = new UsernamePasswordToken($user, null, $firewallName, $user->getRoles()); + $token = new UsernamePasswordToken($user, $firewallName, $user->getRoles()); } + $this->getTokenStorage()->setToken($token); + if ($firewallContext) { $session->set('_security_' . $firewallContext, serialize($token)); } else { @@ -199,6 +201,13 @@ protected function getLogoutUrlGenerator(): ?LogoutUrlGenerator protected function getCurrentSession(): SessionInterface { - return $this->grabService('session'); + if ($this->_getContainer()->has('session')) { + return $this->grabService('session'); + } + + $session = $this->grabService('session.factory')->createSession(); + $this->_getContainer()->set('session', $session); + + return $session; } } From 2d0d11c75e81581fcc6c70f9eeefdd343726d754 Mon Sep 17 00:00:00 2001 From: semaz Date: Tue, 10 May 2022 22:16:01 +0300 Subject: [PATCH 2/3] brought back support for ^4.4 | ^5.0 symfony versions --- composer.json | 14 +++++------ src/Codeception/Module/Symfony.php | 3 ++- .../Module/Symfony/SessionAssertionsTrait.php | 24 ++++++++++++++++--- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index d3ad5022..0363fe31 100644 --- a/composer.json +++ b/composer.json @@ -25,13 +25,13 @@ "codeception/module-asserts": "^3.0", "codeception/module-doctrine2": "^3.0", "doctrine/orm": "^2.10", - "symfony/form": "^6.0", - "symfony/framework-bundle": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/mailer": "^6.0", - "symfony/routing": "^6.0", - "symfony/security-bundle": "^6.0", - "symfony/twig-bundle": "^6.0", + "symfony/form": "^4.4 | ^5.0 | ^6.0", + "symfony/framework-bundle": "^4.4 | ^5.0 | ^6.0", + "symfony/http-kernel": "^4.4 | ^5.0 | ^6.0", + "symfony/mailer": "^4.4 | ^5.0 | ^6.0", + "symfony/routing": "^4.4 | ^5.0 | ^6.0", + "symfony/security-bundle": "^4.4 | ^5.0 | ^6.0", + "symfony/twig-bundle": "^4.4 | ^5.0 | ^6.0", "vlucas/phpdotenv": "^4.2 | ^5.4" }, "suggest": { diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index 979855ae..7bfd7b0a 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -160,7 +160,8 @@ class Symfony extends Framework implements DoctrineProvider, PartedModule 'cache_router' => false, 'em_service' => 'doctrine.orm.entity_manager', 'rebootable_client' => true, - 'authenticator' => false + 'authenticator' => false, + 'guard' => false ]; /** diff --git a/src/Codeception/Module/Symfony/SessionAssertionsTrait.php b/src/Codeception/Module/Symfony/SessionAssertionsTrait.php index 55457934..532c5cd4 100644 --- a/src/Codeception/Module/Symfony/SessionAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/SessionAssertionsTrait.php @@ -9,6 +9,7 @@ use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\Security\Guard\Token\PostAuthenticationGuardToken; use Symfony\Component\Security\Http\Authenticator\Token\PostAuthenticationToken; use Symfony\Component\Security\Http\Logout\LogoutUrlGenerator; use function is_int; @@ -37,10 +38,18 @@ public function amLoggedInAs(UserInterface $user, string $firewallName = 'main', { $session = $this->getCurrentSession(); - if ($this->config['authenticator']) { - $token = new PostAuthenticationToken($user, $firewallName, $user->getRoles()); + if ($this->getSymfonyMajorVersion() < 6) { + if ($this->config['guard']) { + $token = new PostAuthenticationGuardToken($user, $firewallName, $user->getRoles()); + } else { + $token = new UsernamePasswordToken($user, null, $firewallName, $user->getRoles()); + } } else { - $token = new UsernamePasswordToken($user, $firewallName, $user->getRoles()); + if ($this->config['authenticator']) { + $token = new PostAuthenticationToken($user, $firewallName, $user->getRoles()); + } else { + $token = new UsernamePasswordToken($user, $firewallName, $user->getRoles()); + } } $this->getTokenStorage()->setToken($token); @@ -201,6 +210,10 @@ protected function getLogoutUrlGenerator(): ?LogoutUrlGenerator protected function getCurrentSession(): SessionInterface { + if ($this->getSymfonyMajorVersion() < 6) { + return $this->grabService('session'); + } + if ($this->_getContainer()->has('session')) { return $this->grabService('session'); } @@ -210,4 +223,9 @@ protected function getCurrentSession(): SessionInterface return $session; } + + protected function getSymfonyMajorVersion(): int + { + return $this->kernel::MAJOR_VERSION; + } } From 61de05450f5f30372ef5fc7142c43acf64c04f69 Mon Sep 17 00:00:00 2001 From: semaz Date: Tue, 10 May 2022 22:36:07 +0300 Subject: [PATCH 3/3] resolve pr conversations --- src/Codeception/Module/Symfony.php | 2 ++ .../Module/Symfony/SessionAssertionsTrait.php | 12 +++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index 7bfd7b0a..cdb206cc 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -83,6 +83,8 @@ * * debug: true - Turn on/off debug mode * * cache_router: 'false' - Enable router caching between tests in order to [increase performance](http://lakion.com/blog/how-did-we-speed-up-sylius-behat-suite-with-blackfire) * * rebootable_client: 'true' - Reboot client's kernel before each request + * * guard: 'false' - Enable custom authentication system with guard (only for 4.x and 5.x versions of the symfony) + * * authenticator: 'false' - Reboot client's kernel before each request (only for 6.x versions of the symfony) * * #### Example (`functional.suite.yml`) - Symfony 4 Directory Structure * diff --git a/src/Codeception/Module/Symfony/SessionAssertionsTrait.php b/src/Codeception/Module/Symfony/SessionAssertionsTrait.php index 532c5cd4..73a440dc 100644 --- a/src/Codeception/Module/Symfony/SessionAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/SessionAssertionsTrait.php @@ -210,16 +210,18 @@ protected function getLogoutUrlGenerator(): ?LogoutUrlGenerator protected function getCurrentSession(): SessionInterface { + $container = $this->_getContainer(); + if ($this->getSymfonyMajorVersion() < 6) { - return $this->grabService('session'); + return $container->get('session'); } - if ($this->_getContainer()->has('session')) { - return $this->grabService('session'); + if ($container->has('session')) { + return $container->get('session'); } - $session = $this->grabService('session.factory')->createSession(); - $this->_getContainer()->set('session', $session); + $session = $container->get('session.factory')->createSession(); + $container->set('session', $session); return $session; }