From ff08dcaca65b8ef98eebdcd71c14f4da9576a635 Mon Sep 17 00:00:00 2001 From: Wouter de Jong Date: Tue, 6 Jul 2021 17:45:30 +0200 Subject: [PATCH 1/6] [GHA] Clarify some bits in the deps=high script --- .github/workflows/unit-tests.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 6ce52878ac..6066b9b8b7 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -184,10 +184,12 @@ jobs: # matrix.mode = high-deps echo "$COMPONENTS" | xargs -n1 | parallel -j +3 "_run_tests {} 'cd {} && $COMPOSER_UP && $PHPUNIT$LEGACY'" || X=1 + # get a list of the patched components (relies on .github/build-packages.php being called in the previous step) (cd src/Symfony/Component/HttpFoundation; mv composer.bak composer.json) - COMPONENTS=$(git diff --name-only src/ | grep composer.json || true) + PATCHED_COMPONENTS=$(git diff --name-only src/ | grep composer.json || true) - if [[ $COMPONENTS && $SYMFONY_VERSION = *.4 ]]; then + # for x.4 branches, checkout and test previous major with the patched components (only for patched components) + if [[ $PATCHED_COMPONENTS && $SYMFONY_VERSION = *.4 ]]; then export FLIP='^' SYMFONY_VERSION=$(echo $SYMFONY_VERSION | awk '{print $1 - 1}') echo -e "\\n\\e[33;1mChecking out Symfony $SYMFONY_VERSION and running tests with patched components as deps\\e[0m" @@ -195,13 +197,13 @@ jobs: export SYMFONY_REQUIRE=">=$SYMFONY_VERSION" git fetch --depth=2 origin $SYMFONY_VERSION git checkout -m FETCH_HEAD - COMPONENTS=$(echo "$COMPONENTS" | xargs dirname | xargs -n1 -I{} bash -c "[ -e '{}/phpunit.xml.dist' ] && echo '{}'" | sort || true) + PATCHED_COMPONENTS=$(echo "$PATCHED_COMPONENTS" | xargs dirname | xargs -n1 -I{} bash -c "[ -e '{}/phpunit.xml.dist' ] && echo '{}'" | sort || true) (cd src/Symfony/Component/HttpFoundation; composer require --dev --no-update mongodb/mongodb) - if [[ $COMPONENTS ]]; then + if [[ $PATCHED_COMPONENTS ]]; then echo "::group::install phpunit" ./phpunit install echo "::endgroup::" - echo "$COMPONENTS" | parallel -j +3 "_run_tests {} 'cd {} && rm composer.lock vendor/ -Rf && $COMPOSER_UP && $PHPUNIT$LEGACY'" || X=1 + echo "$PATCHED_COMPONENTS" | parallel -j +3 "_run_tests {} 'cd {} && rm composer.lock vendor/ -Rf && $COMPOSER_UP && $PHPUNIT$LEGACY'" || X=1 fi fi From b3c28ca02ceb67a055285410a265d3042df48d38 Mon Sep 17 00:00:00 2001 From: Andrii Bodnar Date: Thu, 8 Jul 2021 11:30:06 +0300 Subject: [PATCH 2/6] [Validator] Added Ukrainian translations --- .../Validator/Resources/translations/validators.uk.xlf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf index 7ea908e757..e8845ec005 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf @@ -386,6 +386,10 @@ This value is not a valid International Securities Identification Number (ISIN). Це значення не є дійсним міжнародним ідентифікаційним номером цінних паперів (ISIN). + + This value should be a valid expression. + Це значення має бути дійсним виразом. + From 387254ff5abd923f9407ded5da9335c5e2480956 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Thu, 8 Jul 2021 10:41:14 +0200 Subject: [PATCH 3/6] [ErrorHandle] Remove a link from the exception page --- .../TwigBundle/Resources/views/images/icon-support.svg | 1 - .../Bundle/TwigBundle/Resources/views/layout.html.twig | 7 ------- .../ErrorHandler/Resources/views/exception_full.html.php | 7 ------- 3 files changed, 15 deletions(-) delete mode 100644 src/Symfony/Bundle/TwigBundle/Resources/views/images/icon-support.svg diff --git a/src/Symfony/Bundle/TwigBundle/Resources/views/images/icon-support.svg b/src/Symfony/Bundle/TwigBundle/Resources/views/images/icon-support.svg deleted file mode 100644 index 03fd8e7678..0000000000 --- a/src/Symfony/Bundle/TwigBundle/Resources/views/images/icon-support.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/Symfony/Bundle/TwigBundle/Resources/views/layout.html.twig b/src/Symfony/Bundle/TwigBundle/Resources/views/layout.html.twig index 5bcd82a200..9324a4f0c2 100644 --- a/src/Symfony/Bundle/TwigBundle/Resources/views/layout.html.twig +++ b/src/Symfony/Bundle/TwigBundle/Resources/views/layout.html.twig @@ -22,13 +22,6 @@ Symfony Docs - - diff --git a/src/Symfony/Component/ErrorHandler/Resources/views/exception_full.html.php b/src/Symfony/Component/ErrorHandler/Resources/views/exception_full.html.php index 6898ce028d..cb5a56754e 100644 --- a/src/Symfony/Component/ErrorHandler/Resources/views/exception_full.html.php +++ b/src/Symfony/Component/ErrorHandler/Resources/views/exception_full.html.php @@ -22,13 +22,6 @@ Symfony Docs - - From d10b3a63e5d38ae80a5d265eb6e6aff755c4ad9c Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Thu, 8 Jul 2021 13:32:35 +0200 Subject: [PATCH 4/6] recover from failed deserializations --- src/Symfony/Component/HttpKernel/HttpCache/Store.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/HttpCache/Store.php b/src/Symfony/Component/HttpKernel/HttpCache/Store.php index 7dfdc491dd..eeb7a6ef94 100644 --- a/src/Symfony/Component/HttpKernel/HttpCache/Store.php +++ b/src/Symfony/Component/HttpKernel/HttpCache/Store.php @@ -298,7 +298,7 @@ class Store implements StoreInterface return []; } - return unserialize($entries); + return unserialize($entries) ?: []; } /** From 8da1969afc5a379e127d5053a693368ffb210034 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 9 Jul 2021 12:48:54 +0200 Subject: [PATCH 5/6] do not mock event classes --- .../Processor/ConsoleCommandProcessorTest.php | 6 +- .../AddRequestFormatsListenerTest.php | 13 +---- .../EventListener/SaveSessionListenerTest.php | 12 ++-- .../EventListener/SessionListenerTest.php | 4 +- .../AbstractPreAuthenticatedListenerTest.php | 44 ++------------- .../BasicAuthenticationListenerTest.php | 56 ++++--------------- .../Tests/Firewall/ChannelListenerTest.php | 55 +++++------------- .../Tests/Firewall/ContextListenerTest.php | 22 +------- .../Tests/Firewall/LogoutListenerTest.php | 46 ++++++--------- .../Tests/Firewall/RememberMeListenerTest.php | 6 -- .../SimplePreAuthenticationListenerTest.php | 8 +-- ...PasswordFormAuthenticationListenerTest.php | 9 +-- 12 files changed, 65 insertions(+), 216 deletions(-) diff --git a/src/Symfony/Bridge/Monolog/Tests/Processor/ConsoleCommandProcessorTest.php b/src/Symfony/Bridge/Monolog/Tests/Processor/ConsoleCommandProcessorTest.php index 6ee30da38a..424f9ce10d 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Processor/ConsoleCommandProcessorTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Processor/ConsoleCommandProcessorTest.php @@ -16,6 +16,7 @@ use Symfony\Bridge\Monolog\Processor\ConsoleCommandProcessor; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Event\ConsoleEvent; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; class ConsoleCommandProcessorTest extends TestCase { @@ -66,10 +67,7 @@ class ConsoleCommandProcessorTest extends TestCase $input->method('getOptions')->willReturn(self::TEST_OPTIONS); $command = $this->createMock(Command::class); $command->method('getName')->willReturn(self::TEST_NAME); - $consoleEvent = $this->createMock(ConsoleEvent::class); - $consoleEvent->method('getCommand')->willReturn($command); - $consoleEvent->method('getInput')->willReturn($input); - return $consoleEvent; + return new ConsoleEvent($command, $input, $this->createMock(OutputInterface::class)); } } diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php index fab9a8a38f..9b3c1a2e58 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/AddRequestFormatsListenerTest.php @@ -16,6 +16,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\EventListener\AddRequestFormatsListener; +use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -54,7 +55,7 @@ class AddRequestFormatsListenerTest extends TestCase public function testSetAdditionalFormats() { $request = $this->createMock(Request::class); - $event = $this->getRequestEventMock($request); + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $request->expects($this->once()) ->method('setFormat') @@ -62,14 +63,4 @@ class AddRequestFormatsListenerTest extends TestCase $this->listener->onKernelRequest($event); } - - protected function getRequestEventMock(Request $request) - { - $event = $this->createMock(RequestEvent::class); - $event->expects($this->any()) - ->method('getRequest') - ->willReturn($request); - - return $event; - } } diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SaveSessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SaveSessionListenerTest.php index f79b73c5fe..bbb76771e0 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SaveSessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SaveSessionListenerTest.php @@ -26,13 +26,17 @@ class SaveSessionListenerTest extends TestCase { public function testOnlyTriggeredOnMasterRequest() { + $session = $this->createMock(SessionInterface::class); + $session->expects($this->never())->method('save'); + $session->expects($this->any())->method('isStarted')->willReturn(true); + + $request = new Request(); + $request->setSession($session); + $listener = new SaveSessionListener(); - $event = $this->createMock(ResponseEvent::class); - $event->expects($this->once())->method('isMasterRequest')->willReturn(false); - $event->expects($this->never())->method('getRequest'); // sub request - $listener->onKernelResponse($event); + $listener->onKernelResponse(new ResponseEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::SUB_REQUEST, new Response())); } public function testSessionSaved() diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php index e0dba81683..d6ff42f926 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php @@ -58,9 +58,7 @@ class SessionListenerTest extends TestCase $request = new Request(); $listener = new SessionListener($container); - $event = $this->createMock(RequestEvent::class); - $event->expects($this->exactly(2))->method('isMasterRequest')->willReturn(true); - $event->expects($this->once())->method('getRequest')->willReturn($request); + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener->onKernelRequest($event); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php index e841273f78..41d8f00360 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/AbstractPreAuthenticatedListenerTest.php @@ -14,6 +14,7 @@ namespace Symfony\Component\Security\Http\Tests\Firewall; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; @@ -62,14 +63,7 @@ class AbstractPreAuthenticatedListenerTest extends TestCase ->method('getPreAuthenticatedData') ->willReturn($userCredentials); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testHandleWhenAuthenticationFails() @@ -109,14 +103,7 @@ class AbstractPreAuthenticatedListenerTest extends TestCase ->method('getPreAuthenticatedData') ->willReturn($userCredentials); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testHandleWhenAuthenticationFailsWithDifferentToken() @@ -158,12 +145,7 @@ class AbstractPreAuthenticatedListenerTest extends TestCase ->method('getPreAuthenticatedData') ->willReturn($userCredentials); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener($event); } @@ -200,14 +182,7 @@ class AbstractPreAuthenticatedListenerTest extends TestCase ->method('getPreAuthenticatedData') ->willReturn($userCredentials); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testHandleWithAnInvalidSimilarToken() @@ -250,13 +225,6 @@ class AbstractPreAuthenticatedListenerTest extends TestCase ->method('getPreAuthenticatedData') ->willReturn($userCredentials); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } } diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/BasicAuthenticationListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/BasicAuthenticationListenerTest.php index 2993b4956f..8216d277e7 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/BasicAuthenticationListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/BasicAuthenticationListenerTest.php @@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager; use Symfony\Component\Security\Core\Authentication\Provider\AuthenticationProviderInterface; @@ -64,14 +65,7 @@ class BasicAuthenticationListenerTest extends TestCase $this->createMock(AuthenticationEntryPointInterface::class) ); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testHandleWhenAuthenticationFails() @@ -109,19 +103,11 @@ class BasicAuthenticationListenerTest extends TestCase $authenticationEntryPoint ); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - $event - ->expects($this->once()) - ->method('setResponse') - ->with($this->equalTo($response)) - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener($event); + + $this->assertSame($response, $event->getResponse()); } public function testHandleWithNoUsernameServerParameter() @@ -141,14 +127,7 @@ class BasicAuthenticationListenerTest extends TestCase $this->createMock(AuthenticationEntryPointInterface::class) ); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testHandleWithASimilarAuthenticatedToken() @@ -177,14 +156,7 @@ class BasicAuthenticationListenerTest extends TestCase $this->createMock(AuthenticationEntryPointInterface::class) ); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testItRequiresProviderKey() @@ -236,18 +208,10 @@ class BasicAuthenticationListenerTest extends TestCase $authenticationEntryPoint ); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - $event - ->expects($this->once()) - ->method('setResponse') - ->with($this->equalTo($response)) - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener($event); + + $this->assertSame($response, $event->getResponse()); } } diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/ChannelListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/ChannelListenerTest.php index 42dd734fca..5fab54c132 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/ChannelListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/ChannelListenerTest.php @@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Http\AccessMapInterface; use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; use Symfony\Component\Security\Http\Firewall\ChannelListener; @@ -44,19 +45,12 @@ class ChannelListenerTest extends TestCase ->method('start') ; - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - $event - ->expects($this->never()) - ->method('setResponse') - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener = new ChannelListener($accessMap, $entryPoint); $listener($event); + + $this->assertNull($event->getResponse()); } public function testHandleWithSecuredRequestAndHttpsChannel() @@ -82,19 +76,12 @@ class ChannelListenerTest extends TestCase ->method('start') ; - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - $event - ->expects($this->never()) - ->method('setResponse') - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener = new ChannelListener($accessMap, $entryPoint); $listener($event); + + $this->assertNull($event->getResponse()); } public function testHandleWithNotSecuredRequestAndHttpsChannel() @@ -124,20 +111,12 @@ class ChannelListenerTest extends TestCase ->willReturn($response) ; - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - $event - ->expects($this->once()) - ->method('setResponse') - ->with($this->equalTo($response)) - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener = new ChannelListener($accessMap, $entryPoint); $listener($event); + + $this->assertSame($response, $event->getResponse()); } public function testHandleWithSecuredRequestAndHttpChannel() @@ -167,19 +146,11 @@ class ChannelListenerTest extends TestCase ->willReturn($response) ; - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - $event - ->expects($this->once()) - ->method('setResponse') - ->with($this->equalTo($response)) - ; + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $listener = new ChannelListener($accessMap, $entryPoint); $listener($event); + + $this->assertSame($response, $event->getResponse()); } } diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php index f83f8d6803..7c60132bc0 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.php @@ -146,13 +146,9 @@ class ContextListenerTest extends TestCase public function testInvalidTokenInSession($token) { $tokenStorage = $this->createMock(TokenStorageInterface::class); - $event = $this->createMock(RequestEvent::class); $request = $this->createMock(Request::class); $session = $this->createMock(SessionInterface::class); - $event->expects($this->any()) - ->method('getRequest') - ->willReturn($request); $request->expects($this->any()) ->method('hasPreviousSession') ->willReturn(true); @@ -168,7 +164,7 @@ class ContextListenerTest extends TestCase ->with(null); $listener = new ContextListener($tokenStorage, [], 'key123'); - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function provideInvalidToken() @@ -186,22 +182,13 @@ class ContextListenerTest extends TestCase { $tokenStorage = $this->createMock(TokenStorageInterface::class); $dispatcher = $this->createMock(EventDispatcherInterface::class); - $event = $this->createMock(RequestEvent::class); - $listener = new ContextListener($tokenStorage, [], 'key123', null, $dispatcher); - $event->expects($this->any()) - ->method('isMasterRequest') - ->willReturn(true); - $event->expects($this->any()) - ->method('getRequest') - ->willReturn($this->createMock(Request::class)); - $dispatcher->expects($this->once()) ->method('addListener') ->with(KernelEvents::RESPONSE, [$listener, 'onKernelResponse']); - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), new Request(), HttpKernelInterface::MASTER_REQUEST)); } public function testOnKernelResponseListenerRemovesItself() @@ -234,14 +221,11 @@ class ContextListenerTest extends TestCase $request = $this->createMock(Request::class); $request->expects($this->any())->method('hasPreviousSession')->willReturn(false); - $event = $this->createMock(RequestEvent::class); - $event->expects($this->any())->method('getRequest')->willReturn($request); - $tokenStorage = $this->createMock(TokenStorageInterface::class); $tokenStorage->expects($this->once())->method('setToken')->with(null); $listener = new ContextListener($tokenStorage, [], 'key123'); - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } public function testIfTokenIsDeauthenticated() diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php index f5c6107051..397639fd94 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/LogoutListenerTest.php @@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Exception\LogoutException; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; @@ -30,10 +31,8 @@ class LogoutListenerTest extends TestCase { [$listener, , $httpUtils, $options] = $this->getListener(); - [$event, $request] = $this->getGetResponseEvent(); - - $event->expects($this->never()) - ->method('setResponse'); + $request = new Request(); + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $httpUtils->expects($this->once()) ->method('checkRequestPath') @@ -41,6 +40,8 @@ class LogoutListenerTest extends TestCase ->willReturn(false); $listener($event); + + $this->assertNull($event->getResponse()); } public function testHandleMatchedPathWithSuccessHandlerAndCsrfValidation() @@ -50,7 +51,8 @@ class LogoutListenerTest extends TestCase [$listener, $tokenStorage, $httpUtils, $options] = $this->getListener($successHandler, $tokenManager); - [$event, $request] = $this->getGetResponseEvent(); + $request = new Request(); + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $request->query->set('_csrf_token', 'token'); @@ -81,13 +83,11 @@ class LogoutListenerTest extends TestCase ->method('setToken') ->with(null); - $event->expects($this->once()) - ->method('setResponse') - ->with($response); - $listener->addHandler($handler); $listener($event); + + $this->assertSame($response, $event->getResponse()); } public function testHandleMatchedPathWithoutSuccessHandlerAndCsrfValidation() @@ -96,7 +96,8 @@ class LogoutListenerTest extends TestCase [$listener, $tokenStorage, $httpUtils, $options] = $this->getListener($successHandler); - [$event, $request] = $this->getGetResponseEvent(); + $request = new Request(); + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $httpUtils->expects($this->once()) ->method('checkRequestPath') @@ -121,13 +122,11 @@ class LogoutListenerTest extends TestCase ->method('setToken') ->with(null); - $event->expects($this->once()) - ->method('setResponse') - ->with($response); - $listener->addHandler($handler); $listener($event); + + $this->assertSame($response, $event->getResponse()); } public function testSuccessHandlerReturnsNonResponse() @@ -137,7 +136,8 @@ class LogoutListenerTest extends TestCase [$listener, , $httpUtils, $options] = $this->getListener($successHandler); - [$event, $request] = $this->getGetResponseEvent(); + $request = new Request(); + $event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST); $httpUtils->expects($this->once()) ->method('checkRequestPath') @@ -159,8 +159,7 @@ class LogoutListenerTest extends TestCase [$listener, , $httpUtils, $options] = $this->getListener(null, $tokenManager); - [$event, $request] = $this->getGetResponseEvent(); - + $request = new Request(); $request->query->set('_csrf_token', 'token'); $httpUtils->expects($this->once()) @@ -172,7 +171,7 @@ class LogoutListenerTest extends TestCase ->method('isTokenValid') ->willReturn(false); - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } private function getTokenManager() @@ -185,17 +184,6 @@ class LogoutListenerTest extends TestCase return $this->createMock(TokenStorageInterface::class); } - private function getGetResponseEvent() - { - $event = $this->createMock(RequestEvent::class); - - $event->expects($this->any()) - ->method('getRequest') - ->willReturn($request = new Request()); - - return [$event, $request]; - } - private function getHandler() { return $this->createMock(LogoutHandlerInterface::class); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php index ac6186b55a..c6da58ce1f 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php @@ -16,7 +16,6 @@ use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpKernel\Event\RequestEvent; -use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; @@ -363,11 +362,6 @@ class RememberMeListenerTest extends TestCase return $event; } - protected function getResponseEvent(): ResponseEvent - { - return $this->createMock(ResponseEvent::class); - } - protected function getListener($withDispatcher = false, $catchExceptions = true, $withSessionStrategy = false) { $listener = new RememberMeListener( diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/SimplePreAuthenticationListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/SimplePreAuthenticationListenerTest.php index 868d811030..78853dac87 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/SimplePreAuthenticationListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/SimplePreAuthenticationListenerTest.php @@ -16,6 +16,7 @@ use Psr\Log\LoggerInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\Security\Core\Authentication\AuthenticationProviderManager; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; @@ -110,12 +111,7 @@ class SimplePreAuthenticationListenerTest extends TestCase $this->request = new Request([], [], [], [], [], []); - $this->event = $this->createMock(RequestEvent::class); - $this->event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($this->request) - ; + $this->event = new RequestEvent($this->createMock(HttpKernelInterface::class), $this->request, HttpKernelInterface::MASTER_REQUEST); $this->logger = $this->createMock(LoggerInterface::class); $this->tokenStorage = $this->createMock(TokenStorageInterface::class); diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php index c1299fd1fe..312014cd1a 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php @@ -78,14 +78,7 @@ class UsernamePasswordFormAuthenticationListenerTest extends TestCase ['require_previous_session' => false] ); - $event = $this->createMock(RequestEvent::class); - $event - ->expects($this->any()) - ->method('getRequest') - ->willReturn($request) - ; - - $listener($event); + $listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MASTER_REQUEST)); } /** From 968809c2f166b39c944d1b9b84cefa1fd9168e22 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 9 Jul 2021 16:39:14 +0200 Subject: [PATCH 6/6] do not mock the Request class --- .../WebDebugToolbarListenerTest.php | 65 ++++++------------- .../DisallowRobotsIndexingListenerTest.php | 2 +- 2 files changed, 22 insertions(+), 45 deletions(-) diff --git a/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php b/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php index 01d586346a..60c430f9b0 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Tests/EventListener/WebDebugToolbarListenerTest.php @@ -13,10 +13,8 @@ namespace Symfony\Bundle\WebProfilerBundle\Tests\EventListener; use PHPUnit\Framework\TestCase; use Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener; -use Symfony\Component\HttpFoundation\HeaderBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Kernel; @@ -61,11 +59,11 @@ class WebDebugToolbarListenerTest extends TestCase /** * @dataProvider provideRedirects */ - public function testHtmlRedirectionIsIntercepted($statusCode, $hasSession) + public function testHtmlRedirectionIsIntercepted($statusCode) { $response = new Response('Some content', $statusCode); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'html', $hasSession), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock('Redirection'), true); $listener->onKernelResponse($event); @@ -78,7 +76,7 @@ class WebDebugToolbarListenerTest extends TestCase { $response = new Response('Some content', '301'); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'json', true), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request([], [], ['_format' => 'json']), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock('Redirection'), true); $listener->onKernelResponse($event); @@ -92,7 +90,7 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response(''); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -108,7 +106,7 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response(''); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); $response->headers->set('Content-Type', 'text/xml'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -124,7 +122,7 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response(''); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); $response->headers->set('Content-Disposition', 'attachment; filename=test.html'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'html'), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -136,11 +134,11 @@ class WebDebugToolbarListenerTest extends TestCase * @depends testToolbarIsInjected * @dataProvider provideRedirects */ - public function testToolbarIsNotInjectedOnRedirection($statusCode, $hasSession) + public function testToolbarIsNotInjectedOnRedirection($statusCode) { $response = new Response('', $statusCode); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'html', $hasSession), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -151,10 +149,8 @@ class WebDebugToolbarListenerTest extends TestCase public function provideRedirects() { return [ - [301, true], - [302, true], - [301, false], - [302, false], + [301], + [302], ]; } @@ -165,7 +161,7 @@ class WebDebugToolbarListenerTest extends TestCase { $response = new Response(''); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -181,7 +177,7 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response(''); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::SUB_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::SUB_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -197,7 +193,7 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response('
Some content
'); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -213,7 +209,10 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response(''); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(true), HttpKernelInterface::MASTER_REQUEST, $response); + $request = new Request(); + $request->headers->set('X-Requested-With', 'XMLHttpRequest'); + + $event = new ResponseEvent($this->createMock(Kernel::class), $request, HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -229,7 +228,7 @@ class WebDebugToolbarListenerTest extends TestCase $response = new Response(''); $response->headers->set('X-Debug-Token', 'xxxxxxxx'); - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(false, 'json'), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request([], [], ['_format' => 'json']), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock()); $listener->onKernelResponse($event); @@ -250,7 +249,7 @@ class WebDebugToolbarListenerTest extends TestCase ->willReturn('http://mydomain.com/_profiler/xxxxxxxx') ; - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, $urlGenerator); $listener->onKernelResponse($event); @@ -271,7 +270,7 @@ class WebDebugToolbarListenerTest extends TestCase ->willThrowException(new \Exception('foo')) ; - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, $urlGenerator); $listener->onKernelResponse($event); @@ -292,7 +291,7 @@ class WebDebugToolbarListenerTest extends TestCase ->willThrowException(new \Exception("This\nmultiline\r\ntabbed text should\tcome out\r on\n \ta single plain\r\nline")) ; - $event = new ResponseEvent($this->createMock(Kernel::class), $this->getRequestMock(), HttpKernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(Kernel::class), new Request(), HttpKernelInterface::MASTER_REQUEST, $response); $listener = new WebDebugToolbarListener($this->getTwigMock(), false, WebDebugToolbarListener::ENABLED, $urlGenerator); $listener->onKernelResponse($event); @@ -300,28 +299,6 @@ class WebDebugToolbarListenerTest extends TestCase $this->assertEquals('Exception: This multiline tabbed text should come out on a single plain line', $response->headers->get('X-Debug-Error')); } - protected function getRequestMock($isXmlHttpRequest = false, $requestFormat = 'html', $hasSession = true) - { - $request = $this->getMockBuilder(Request::class)->setMethods(['getSession', 'isXmlHttpRequest', 'getRequestFormat'])->disableOriginalConstructor()->getMock(); - $request->expects($this->any()) - ->method('isXmlHttpRequest') - ->willReturn($isXmlHttpRequest); - $request->expects($this->any()) - ->method('getRequestFormat') - ->willReturn($requestFormat); - - $request->headers = new HeaderBag(); - - if ($hasSession) { - $session = $this->createMock(Session::class); - $request->expects($this->any()) - ->method('getSession') - ->willReturn($session); - } - - return $request; - } - protected function getTwigMock($render = 'WDT') { $templating = $this->createMock(Environment::class); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/DisallowRobotsIndexingListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/DisallowRobotsIndexingListenerTest.php index 6534ebf4e2..4a05d65188 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/DisallowRobotsIndexingListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/DisallowRobotsIndexingListenerTest.php @@ -29,7 +29,7 @@ class DisallowRobotsIndexingListenerTest extends TestCase $response = new Response(...$responseArgs); $listener = new DisallowRobotsIndexingListener(); - $event = new ResponseEvent($this->createMock(HttpKernelInterface::class), $this->createMock(Request::class), KernelInterface::MASTER_REQUEST, $response); + $event = new ResponseEvent($this->createMock(HttpKernelInterface::class), new Request(), KernelInterface::MASTER_REQUEST, $response); $listener->onResponse($event);