3 namespace Tests\Wallabag\CoreBundle\Event\Listener
;
5 use Symfony\Component\EventDispatcher\EventDispatcher
;
6 use Symfony\Component\HttpFoundation\Request
;
7 use Symfony\Component\HttpFoundation\Session\Session
;
8 use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage
;
9 use Symfony\Component\HttpKernel\Event\GetResponseEvent
;
10 use Symfony\Component\HttpKernel\HttpKernelInterface
;
11 use Symfony\Component\HttpKernel\KernelEvents
;
12 use Wallabag\CoreBundle\Event\Listener\LocaleListener
;
14 class LocaleListenerTest
extends \PHPUnit_Framework_TestCase
16 public function testWithoutSession()
18 $request = Request
::create('/');
20 $listener = new LocaleListener('fr');
21 $event = $this->getEvent($request);
23 $listener->onKernelRequest($event);
24 $this->assertSame('en', $request->getLocale());
27 public function testWithPreviousSession()
29 $request = Request
::create('/');
30 // generate a previous session
31 $request->cookies
->set('MOCKSESSID', 'foo');
32 $request->setSession(new Session(new MockArraySessionStorage()));
34 $listener = new LocaleListener('fr');
35 $event = $this->getEvent($request);
37 $listener->onKernelRequest($event);
38 $this->assertSame('fr', $request->getLocale());
41 public function testLocaleFromRequestAttribute()
43 $request = Request
::create('/');
44 // generate a previous session
45 $request->cookies
->set('MOCKSESSID', 'foo');
46 $request->setSession(new Session(new MockArraySessionStorage()));
47 $request->attributes
->set('_locale', 'es');
49 $listener = new LocaleListener('fr');
50 $event = $this->getEvent($request);
52 $listener->onKernelRequest($event);
53 $this->assertSame('en', $request->getLocale());
54 $this->assertSame('es', $request->getSession()->get('_locale'));
57 public function testSubscribedEvents()
59 $request = Request
::create('/');
60 // generate a previous session
61 $request->cookies
->set('MOCKSESSID', 'foo');
62 $request->setSession(new Session(new MockArraySessionStorage()));
64 $listener = new LocaleListener('fr');
65 $event = $this->getEvent($request);
67 $dispatcher = new EventDispatcher();
68 $dispatcher->addSubscriber($listener);
70 $dispatcher->dispatch(
71 KernelEvents
::REQUEST
,
75 $this->assertSame('fr', $request->getLocale());
78 private function getEvent(Request
$request)
80 $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')
81 ->disableOriginalConstructor()
84 return new GetResponseEvent($kernel, $request, HttpKernelInterface
::MASTER_REQUEST
);