]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Add tests on listeners 1446/head
authorJeremy Benoist <jeremy.benoist@gmail.com>
Fri, 16 Oct 2015 05:40:09 +0000 (07:40 +0200)
committerJeremy Benoist <jeremy.benoist@gmail.com>
Fri, 16 Oct 2015 05:40:09 +0000 (07:40 +0200)
src/Wallabag/CoreBundle/EventListener/LocaleListener.php
src/Wallabag/CoreBundle/EventListener/UserLocaleListener.php
src/Wallabag/CoreBundle/Tests/EventListener/LocaleListenerTest.php [new file with mode: 0644]
src/Wallabag/CoreBundle/Tests/EventListener/UserLocaleListenerTest.php [new file with mode: 0644]

index 7179531618f3103bd1f2dd59fda4ca6ae2bc1fb4..80f5950462bd108a1e6ce4bfff00453627fb13a6 100644 (file)
@@ -6,6 +6,9 @@ use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
+/**
+ * @see http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html
+ */
 class LocaleListener implements EventSubscriberInterface
 {
     private $defaultLocale;
index 97bfabc825e45b4952867a288aca41747d6db070..82d1a63a53a39623744e2339a5cb344d79c9e13e 100644 (file)
@@ -8,6 +8,8 @@ use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
 /**
  * Stores the locale of the user in the session after the
  * login. This can be used by the LocaleListener afterwards.
+ *
+ * @see http://symfony.com/doc/master/cookbook/session/locale_sticky_session.html
  */
 class UserLocaleListener
 {
diff --git a/src/Wallabag/CoreBundle/Tests/EventListener/LocaleListenerTest.php b/src/Wallabag/CoreBundle/Tests/EventListener/LocaleListenerTest.php
new file mode 100644 (file)
index 0000000..356a411
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+
+namespace Wallabag\CoreBundle\Tests\EventListener;
+
+use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
+use Symfony\Component\EventDispatcher\EventDispatcher;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\HttpKernel\Event\GetResponseEvent;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
+use Symfony\Component\HttpFoundation\Session\Session;
+use Wallabag\CoreBundle\EventListener\LocaleListener;
+
+class LocaleListenerTest extends KernelTestCase
+{
+    private function getEvent(Request $request)
+    {
+        return new GetResponseEvent($this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'), $request, HttpKernelInterface::MASTER_REQUEST);
+    }
+
+    public function testWithoutSession()
+    {
+        $request = Request::create('/');
+
+        $listener = new LocaleListener('fr');
+        $event = $this->getEvent($request);
+
+        $listener->onKernelRequest($event);
+        $this->assertEquals('en', $request->getLocale());
+    }
+
+    public function testWithPreviousSession()
+    {
+        $request = Request::create('/');
+        // generate a previous session
+        $request->cookies->set('MOCKSESSID', 'foo');
+        $request->setSession(new Session(new MockArraySessionStorage()));
+
+        $listener = new LocaleListener('fr');
+        $event = $this->getEvent($request);
+
+        $listener->onKernelRequest($event);
+        $this->assertEquals('fr', $request->getLocale());
+    }
+
+    public function testLocaleFromRequestAttribute()
+    {
+        $request = Request::create('/');
+        // generate a previous session
+        $request->cookies->set('MOCKSESSID', 'foo');
+        $request->setSession(new Session(new MockArraySessionStorage()));
+        $request->attributes->set('_locale', 'es');
+
+        $listener = new LocaleListener('fr');
+        $event = $this->getEvent($request);
+
+        $listener->onKernelRequest($event);
+        $this->assertEquals('en', $request->getLocale());
+        $this->assertEquals('es', $request->getSession()->get('_locale'));
+    }
+
+    public function testSubscribedEvents()
+    {
+        $request = Request::create('/');
+        // generate a previous session
+        $request->cookies->set('MOCKSESSID', 'foo');
+        $request->setSession(new Session(new MockArraySessionStorage()));
+
+        $listener = new LocaleListener('fr');
+        $event = $this->getEvent($request);
+
+        $dispatcher = new EventDispatcher();
+        $dispatcher->addSubscriber($listener);
+
+        $dispatcher->dispatch(
+            KernelEvents::REQUEST,
+            $event
+        );
+
+        $this->assertEquals('fr', $request->getLocale());
+    }
+}
diff --git a/src/Wallabag/CoreBundle/Tests/EventListener/UserLocaleListenerTest.php b/src/Wallabag/CoreBundle/Tests/EventListener/UserLocaleListenerTest.php
new file mode 100644 (file)
index 0000000..e8a65fb
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+namespace Wallabag\CoreBundle\Tests\EventListener;
+
+use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
+use Symfony\Component\HttpFoundation\Session\Session;
+use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
+use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
+use Wallabag\CoreBundle\EventListener\UserLocaleListener;
+use Wallabag\CoreBundle\Entity\Config;
+use Wallabag\UserBundle\Entity\User;
+
+class UserLocaleListenerTest extends KernelTestCase
+{
+    public function testWithLanguage()
+    {
+        $session = new Session(new MockArraySessionStorage());
+        $listener = new UserLocaleListener($session);
+
+        $user = new User();
+        $user->setEnabled(true);
+
+        $config = new Config($user);
+        $config->setLanguage('fr');
+
+        $user->setConfig($config);
+
+        $userToken = new UsernamePasswordToken($user, '', 'test');
+        $request = Request::create('/');
+        $event = new InteractiveLoginEvent($request, $userToken);
+
+        $listener->onInteractiveLogin($event);
+
+        $this->assertEquals('fr', $session->get('_locale'));
+    }
+
+    public function testWithoutLanguage()
+    {
+        $session = new Session(new MockArraySessionStorage());
+        $listener = new UserLocaleListener($session);
+
+        $user = new User();
+        $user->setEnabled(true);
+
+        $config = new Config($user);
+
+        $user->setConfig($config);
+
+        $userToken = new UsernamePasswordToken($user, '', 'test');
+        $request = Request::create('/');
+        $event = new InteractiveLoginEvent($request, $userToken);
+
+        $listener->onInteractiveLogin($event);
+
+        $this->assertEquals('', $session->get('_locale'));
+    }
+}