From c93c47cdec05134119c289d287c00bab89fd0eae Mon Sep 17 00:00:00 2001 From: Yassine Guedidi Date: Sun, 21 Jan 2024 13:21:00 +0100 Subject: [PATCH] Fix CreateConfigListener to not use session in CLI context --- .../Event/Listener/CreateConfigListener.php | 17 ++++++++++++----- .../Event/Listener/CreateConfigListenerTest.php | 10 ++++++---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Wallabag/CoreBundle/Event/Listener/CreateConfigListener.php b/src/Wallabag/CoreBundle/Event/Listener/CreateConfigListener.php index bbb25a311..613ec219d 100644 --- a/src/Wallabag/CoreBundle/Event/Listener/CreateConfigListener.php +++ b/src/Wallabag/CoreBundle/Event/Listener/CreateConfigListener.php @@ -6,7 +6,7 @@ use Doctrine\ORM\EntityManagerInterface; use FOS\UserBundle\Event\UserEvent; use FOS\UserBundle\FOSUserEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpFoundation\RequestStack; use Wallabag\CoreBundle\Entity\Config; /** @@ -22,10 +22,10 @@ class CreateConfigListener implements EventSubscriberInterface private $readingSpeed; private $actionMarkAsRead; private $listMode; - private $session; + private $requestStack; private $displayThumbnails; - public function __construct(EntityManagerInterface $em, $itemsOnPage, $feedLimit, $language, $readingSpeed, $actionMarkAsRead, $listMode, $displayThumbnails, SessionInterface $session) + public function __construct(EntityManagerInterface $em, $itemsOnPage, $feedLimit, $language, $readingSpeed, $actionMarkAsRead, $listMode, $displayThumbnails, RequestStack $requestStack) { $this->em = $em; $this->itemsOnPage = $itemsOnPage; @@ -34,7 +34,7 @@ class CreateConfigListener implements EventSubscriberInterface $this->readingSpeed = $readingSpeed; $this->actionMarkAsRead = $actionMarkAsRead; $this->listMode = $listMode; - $this->session = $session; + $this->requestStack = $requestStack; $this->displayThumbnails = $displayThumbnails; } @@ -51,10 +51,17 @@ class CreateConfigListener implements EventSubscriberInterface public function createConfig(UserEvent $event) { + $language = $this->language; + + if ($this->requestStack->getMasterRequest()) { + $session = $this->requestStack->getMasterRequest()->getSession(); + $language = $session->get('_locale', $this->language); + } + $config = new Config($event->getUser()); $config->setItemsPerPage($this->itemsOnPage); $config->setFeedLimit($this->feedLimit); - $config->setLanguage($this->session->get('_locale', $this->language)); + $config->setLanguage($language); $config->setReadingSpeed($this->readingSpeed); $config->setActionMarkAsRead($this->actionMarkAsRead); $config->setListMode($this->listMode); diff --git a/tests/Wallabag/CoreBundle/Event/Listener/CreateConfigListenerTest.php b/tests/Wallabag/CoreBundle/Event/Listener/CreateConfigListenerTest.php index 20da9f624..130b6c4b7 100644 --- a/tests/Wallabag/CoreBundle/Event/Listener/CreateConfigListenerTest.php +++ b/tests/Wallabag/CoreBundle/Event/Listener/CreateConfigListenerTest.php @@ -8,9 +8,8 @@ use FOS\UserBundle\FOSUserEvents; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpFoundation\Session\Session; -use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage; use Wallabag\CoreBundle\Entity\Config; use Wallabag\CoreBundle\Entity\User; use Wallabag\CoreBundle\Event\Listener\CreateConfigListener; @@ -22,13 +21,16 @@ class CreateConfigListenerTest extends TestCase private $dispatcher; private $request; private $response; + private $requestStack; protected function setUp(): void { - $session = new Session(new MockArraySessionStorage()); $this->em = $this->getMockBuilder(EntityManager::class) ->disableOriginalConstructor() ->getMock(); + $this->requestStack = $this->getMockBuilder(RequestStack::class) + ->disableOriginalConstructor() + ->getMock(); $this->listener = new CreateConfigListener( $this->em, @@ -39,7 +41,7 @@ class CreateConfigListenerTest extends TestCase 1, 1, 1, - $session + $this->requestStack ); $this->dispatcher = new EventDispatcher();