From c5cadd90cfd0df3dddb7eef14c4aa49ccd129c9f Mon Sep 17 00:00:00 2001 From: Bertrand Gauthier <bertrand.gauthier@unicaen.fr> Date: Tue, 26 Mar 2019 20:44:49 +0100 Subject: [PATCH] =?UTF-8?q?SessionManager:=20d=C3=A9placement=20de=20Conta?= =?UTF-8?q?iner::setDefaultManager()=20en=20dehors=20de=20la=20factory,=20?= =?UTF-8?q?c'est=20plus=20mieux=20bien=20;=20test=20unitaire=20en=20=C3=A9?= =?UTF-8?q?chec.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Module.php | 12 ++++-- .../Session/SessionManagerFactory.php | 23 ++++------- .../Session/SessionManagerFactoryTest.php | 40 ++++++++++--------- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/Module.php b/Module.php index c9410a69..39aa2870 100644 --- a/Module.php +++ b/Module.php @@ -21,6 +21,8 @@ use Zend\ModuleManager\Feature\ServiceProviderInterface; use Zend\Mvc\Console\View\ExceptionStrategy as ConsoleExceptionStrategy; use Zend\Mvc\View\Http\ExceptionStrategy as HttpExceptionStrategy; use Zend\ServiceManager\ServiceManager; +use Zend\Session\Container; +use Zend\Session\SessionManager; use Zend\Validator\AbstractValidator; use Zend\View\Helper\Navigation; use Zend\View\HelperPluginManager; @@ -151,12 +153,14 @@ class Module implements return; } - $session = $e->getApplication()->getServiceManager()->get('Zend\Session\SessionManager'); - $session->start(); + /** @var SessionManager $sessionManager */ + $sessionManager = $e->getApplication()->getServiceManager()->get(SessionManager::class); + Container::setDefaultManager($sessionManager); + $sessionManager->start(); - $container = new \Zend\Session\Container('initialized'); + $container = new Container('initialized'); if (!isset($container->init)) { - $session->regenerateId(true); + $sessionManager->regenerateId(true); $container->init = 1; } } diff --git a/src/UnicaenApp/Session/SessionManagerFactory.php b/src/UnicaenApp/Session/SessionManagerFactory.php index 6470b269..7519b9ba 100644 --- a/src/UnicaenApp/Session/SessionManagerFactory.php +++ b/src/UnicaenApp/Session/SessionManagerFactory.php @@ -3,10 +3,8 @@ namespace UnicaenApp\Session; use Interop\Container\ContainerInterface; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use UnicaenApp\Options\ModuleOptions; use Zend\Session\Config\SessionConfig; -use Zend\Session\Container; use Zend\Session\SessionManager; use Zend\Session\Validator\HttpUserAgent; use Zend\Session\Validator\RemoteAddr; @@ -16,21 +14,18 @@ use Zend\Session\Validator\RemoteAddr; * * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> */ -class SessionManagerFactory implements FactoryInterface +class SessionManagerFactory { - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container) { - return $this->__invoke($serviceLocator, '?'); - } - - public function __invoke(ContainerInterface $container, $requestedName, array $options = null) - { - $appInfos = $container->get('unicaen-app_module_options')->getAppInfos(); + /** @var ModuleOptions $moduleOptions */ + $moduleOptions = $container->get('unicaen-app_module_options'); + $appInfos = $moduleOptions->getAppInfos(); $sessionConfig = new SessionConfig(); - $sessionConfig->setOptions(array( + $sessionConfig->setOptions([ 'name' => md5($appInfos['nom']), - )); + ]); $sessionManager = new SessionManager($sessionConfig); @@ -38,8 +33,6 @@ class SessionManagerFactory implements FactoryInterface $chain->attach('session.validate', array(new RemoteAddr(), 'isValid')); $chain->attach('session.validate', array(new HttpUserAgent(), 'isValid')); - Container::setDefaultManager($sessionManager); - return $sessionManager; } } \ No newline at end of file diff --git a/tests/UnicaenAppTest/Session/SessionManagerFactoryTest.php b/tests/UnicaenAppTest/Session/SessionManagerFactoryTest.php index f9d19028..3ff9cf63 100644 --- a/tests/UnicaenAppTest/Session/SessionManagerFactoryTest.php +++ b/tests/UnicaenAppTest/Session/SessionManagerFactoryTest.php @@ -2,9 +2,11 @@ namespace UnicaenAppTest\Session; +use UnicaenApp\Options\ModuleOptions; use UnicaenApp\Session\SessionManagerFactory; use UnicaenAppTest\BaseServiceFactoryTest; use Zend\Session\Container; +use Zend\Session\SessionManager; /** * Description of ModuleOptionsFactoryTest @@ -18,29 +20,31 @@ class ModuleOptionsFactoryTest extends BaseServiceFactoryTest */ protected $factory; - protected $factoryClass = 'UnicaenApp\Session\SessionManagerFactory'; - protected $serviceClass = 'Zend\Session\SessionManager'; - + protected $factoryClass = SessionManagerFactory::class; + protected $serviceClass = SessionManager::class; + public function testCanCreateService() { - $appInfos = array( + $appInfos = [ 'nom' => "Mon application", - ); - - $moduleOptions = $this->createMock('UnicaenApp\Options\ModuleOptions'/*, array('getAppInfos')*/); - $moduleOptions->expects($this->once()) - ->method('getAppInfos') - ->will($this->returnValue($appInfos)); - - $this->serviceManager->expects($this->once()) - ->method('get') - ->with('unicaen-app_module_options') - ->will($this->returnValue($moduleOptions)); - - $service = $this->factory->__invoke($this->serviceManager, ''); /* @var $service \Zend\Session\SessionManager */ + ]; + + $moduleOptions = $this->createMock(ModuleOptions::class); + $moduleOptions + ->expects($this->once()) + ->method('getAppInfos') + ->willReturn($appInfos); + + $this->serviceManager + ->expects($this->once()) + ->method('get') + ->with('unicaen-app_module_options') + ->willReturn($moduleOptions); + + $service = $this->factory->__invoke($this->serviceManager); + /* @var $service \Zend\Session\SessionManager */ $this->assertInstanceOf($this->serviceClass, $service); - $this->assertSame($service, Container::getDefaultManager()); $this->assertNotEmpty($service->getValidatorChain()->getListeners('session.validate')); $this->assertEquals($service->getConfig()->getName(), md5($appInfos['nom'])); } -- GitLab