3 namespace Tests\Wallabag\CoreBundle\Event\Listener
;
5 use PHPUnit\Framework\TestCase
;
6 use Symfony\Component\EventDispatcher\EventDispatcher
;
7 use Symfony\Component\HttpFoundation\Request
;
8 use Symfony\Component\HttpFoundation\Session\Session
;
9 use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage
;
10 use Symfony\Component\HttpKernel\Event\GetResponseEvent
;
11 use Symfony\Component\HttpKernel\HttpKernelInterface
;
12 use Symfony\Component\HttpKernel\KernelEvents
;
13 use Wallabag\CoreBundle\Event\Listener\LocaleListener
;
15 class LocaleListenerTest
extends TestCase
17 public function testWithoutSession()
19 $request = Request
::create('/');
21 $listener = new LocaleListener('fr');
22 $event = $this->getEvent($request);
24 $listener->onKernelRequest($event);
25 $this->assertSame('en', $request->getLocale());
28 public function testWithPreviousSession()
30 $request = Request
::create('/');
31 // generate a previous session
32 $request->cookies
->set('MOCKSESSID', 'foo');
33 $request->setSession(new Session(new MockArraySessionStorage()));
35 $listener = new LocaleListener('fr');
36 $event = $this->getEvent($request);
38 $listener->onKernelRequest($event);
39 $this->assertSame('fr', $request->getLocale());
42 public function testLocaleFromRequestAttribute()
44 $request = Request
::create('/');
45 // generate a previous session
46 $request->cookies
->set('MOCKSESSID', 'foo');
47 $request->setSession(new Session(new MockArraySessionStorage()));
48 $request->attributes
->set('_locale', 'es');
50 $listener = new LocaleListener('fr');
51 $event = $this->getEvent($request);
53 $listener->onKernelRequest($event);
54 $this->assertSame('en', $request->getLocale());
55 $this->assertSame('es', $request->getSession()->get('_locale'));
58 public function testSubscribedEvents()
60 $request = Request
::create('/');
61 // generate a previous session
62 $request->cookies
->set('MOCKSESSID', 'foo');
63 $request->setSession(new Session(new MockArraySessionStorage()));
65 $listener = new LocaleListener('fr');
66 $event = $this->getEvent($request);
68 $dispatcher = new EventDispatcher();
69 $dispatcher->addSubscriber($listener);
71 $dispatcher->dispatch(
72 KernelEvents
::REQUEST
,
76 $this->assertSame('fr', $request->getLocale());
79 private function getEvent(Request
$request)
81 $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')
82 ->disableOriginalConstructor()
85 return new GetResponseEvent($kernel, $request, HttpKernelInterface
::MASTER_REQUEST
);