From 6847201f50a61d2fc69a8907d67074a7377d4396 Mon Sep 17 00:00:00 2001 From: Leo Feyer Date: Mon, 11 Jun 2018 12:02:13 +0200 Subject: [PATCH] Fix a comment and add the unit tests. --- src/Resources/config/listener.yml | 2 +- .../ContaoCoreExtensionTest.php | 18 +++ .../ClearFormDataListenerTest.php | 132 ++++++++++++++++++ 3 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 tests/EventListener/ClearFormDataListenerTest.php diff --git a/src/Resources/config/listener.yml b/src/Resources/config/listener.yml index ea3a42c40d..bf8f957142 100644 --- a/src/Resources/config/listener.yml +++ b/src/Resources/config/listener.yml @@ -44,7 +44,7 @@ services: contao.listener.clear_form_data: class: Contao\CoreBundle\EventListener\ClearFormDataListener tags: - # The priority must be lower than the one of the Symfony save session listener (defaults to -1000) + # The priority must be higher than the one of the Symfony save session listener (defaults to -1000) - { name: kernel.event_listener, event: kernel.response, method: onKernelResponse, priority: -768 } contao.listener.command_scheduler: diff --git a/tests/DependencyInjection/ContaoCoreExtensionTest.php b/tests/DependencyInjection/ContaoCoreExtensionTest.php index 52d0c2d808..4d6a841e6a 100644 --- a/tests/DependencyInjection/ContaoCoreExtensionTest.php +++ b/tests/DependencyInjection/ContaoCoreExtensionTest.php @@ -35,6 +35,7 @@ use Contao\CoreBundle\EventListener\BackendLocaleListener; use Contao\CoreBundle\EventListener\BackendMenuListener; use Contao\CoreBundle\EventListener\BypassMaintenanceListener; +use Contao\CoreBundle\EventListener\ClearFormDataListener; use Contao\CoreBundle\EventListener\CommandSchedulerListener; use Contao\CoreBundle\EventListener\CsrfTokenCookieListener; use Contao\CoreBundle\EventListener\DoctrineSchemaListener; @@ -267,6 +268,23 @@ public function testRegistersTheBypassMaintenanceListener(): void $this->assertSame(6, $tags['kernel.event_listener'][0]['priority']); } + public function testRegistersTheClearFormDataListener(): void + { + $this->assertTrue($this->container->has('contao.listener.clear_form_data')); + + $definition = $this->container->getDefinition('contao.listener.clear_form_data'); + + $this->assertSame(ClearFormDataListener::class, $definition->getClass()); + $this->assertTrue($definition->isPrivate()); + + $tags = $definition->getTags(); + + $this->assertArrayHasKey('kernel.event_listener', $tags); + $this->assertSame('kernel.response', $tags['kernel.event_listener'][0]['event']); + $this->assertSame('onKernelResponse', $tags['kernel.event_listener'][0]['method']); + $this->assertSame(-768, $tags['kernel.event_listener'][0]['priority']); + } + public function testRegistersTheCommandSchedulerListener(): void { $this->assertTrue($this->container->has('contao.listener.command_scheduler')); diff --git a/tests/EventListener/ClearFormDataListenerTest.php b/tests/EventListener/ClearFormDataListenerTest.php new file mode 100644 index 0000000000..f04939166b --- /dev/null +++ b/tests/EventListener/ClearFormDataListenerTest.php @@ -0,0 +1,132 @@ +assertInstanceOf('Contao\CoreBundle\EventListener\ClearFormDataListener', $listener); + } + + public function testClearsTheFormData(): void + { + $session = $this->createMock(Session::class); + + $session + ->expects($this->once()) + ->method('isStarted') + ->willReturn(true) + ; + + $request = new Request(); + $request->setSession($session); + + $event = new FilterResponseEvent( + $this->createMock(KernelInterface::class), + $request, + HttpKernelInterface::MASTER_REQUEST, + new Response() + ); + + $_SESSION['FORM_DATA'] = ['foo' => 'bar']; + + $listener = new ClearFormDataListener(); + $listener->onKernelResponse($event); + + $this->assertArrayNotHasKey('FORM_DATA', $_SESSION); + } + + public function testDoesNotClearTheFormDataUponSubrequests(): void + { + $request = $this->createMock(Request::class); + + $request + ->expects($this->never()) + ->method('isMethod') + ; + + $event = new FilterResponseEvent( + $this->createMock(KernelInterface::class), + $request, + HttpKernelInterface::SUB_REQUEST, + new Response() + ); + + $listener = new ClearFormDataListener(); + $listener->onKernelResponse($event); + } + + public function testDoesNotClearTheFormDataUponPostRequests(): void + { + $session = $this->createMock(Session::class); + + $session + ->expects($this->never()) + ->method('isStarted') + ; + + $request = new Request(); + $request->setSession($session); + $request->setMethod('POST'); + + $event = new FilterResponseEvent( + $this->createMock(KernelInterface::class), + $request, + HttpKernelInterface::MASTER_REQUEST, + new Response() + ); + + $listener = new ClearFormDataListener(); + $listener->onKernelResponse($event); + } + + public function testDoesNotClearTheFormDataIfTheSessionIsNotStarted(): void + { + $session = $this->createMock(Session::class); + + $session + ->expects($this->once()) + ->method('isStarted') + ->willReturn(false) + ; + + $request = new Request(); + $request->setSession($session); + + $event = new FilterResponseEvent( + $this->createMock(KernelInterface::class), + $request, + HttpKernelInterface::MASTER_REQUEST, + new Response() + ); + + $_SESSION['FORM_DATA'] = ['foo' => 'bar']; + + $listener = new ClearFormDataListener(); + $listener->onKernelResponse($event); + + $this->assertSame(['foo' => 'bar'], $_SESSION['FORM_DATA']); + } +}