Version 1
[yaffs-website] / vendor / symfony / http-kernel / Tests / EventListener / LocaleListenerTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\HttpKernel\Tests\EventListener;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\HttpFoundation\Request;
16 use Symfony\Component\HttpKernel\EventListener\LocaleListener;
17 use Symfony\Component\HttpKernel\HttpKernelInterface;
18 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
19
20 class LocaleListenerTest extends TestCase
21 {
22     private $requestStack;
23
24     protected function setUp()
25     {
26         $this->requestStack = $this->getMockBuilder('Symfony\Component\HttpFoundation\RequestStack')->disableOriginalConstructor()->getMock();
27     }
28
29     public function testDefaultLocaleWithoutSession()
30     {
31         $listener = new LocaleListener($this->requestStack, 'fr');
32         $event = $this->getEvent($request = Request::create('/'));
33
34         $listener->onKernelRequest($event);
35         $this->assertEquals('fr', $request->getLocale());
36     }
37
38     public function testLocaleFromRequestAttribute()
39     {
40         $request = Request::create('/');
41         session_name('foo');
42         $request->cookies->set('foo', 'value');
43
44         $request->attributes->set('_locale', 'es');
45         $listener = new LocaleListener($this->requestStack, 'fr');
46         $event = $this->getEvent($request);
47
48         $listener->onKernelRequest($event);
49         $this->assertEquals('es', $request->getLocale());
50     }
51
52     public function testLocaleSetForRoutingContext()
53     {
54         // the request context is updated
55         $context = $this->getMockBuilder('Symfony\Component\Routing\RequestContext')->getMock();
56         $context->expects($this->once())->method('setParameter')->with('_locale', 'es');
57
58         $router = $this->getMockBuilder('Symfony\Component\Routing\Router')->setMethods(array('getContext'))->disableOriginalConstructor()->getMock();
59         $router->expects($this->once())->method('getContext')->will($this->returnValue($context));
60
61         $request = Request::create('/');
62
63         $request->attributes->set('_locale', 'es');
64         $listener = new LocaleListener($this->requestStack, 'fr', $router);
65         $listener->onKernelRequest($this->getEvent($request));
66     }
67
68     public function testRouterResetWithParentRequestOnKernelFinishRequest()
69     {
70         // the request context is updated
71         $context = $this->getMockBuilder('Symfony\Component\Routing\RequestContext')->getMock();
72         $context->expects($this->once())->method('setParameter')->with('_locale', 'es');
73
74         $router = $this->getMockBuilder('Symfony\Component\Routing\Router')->setMethods(array('getContext'))->disableOriginalConstructor()->getMock();
75         $router->expects($this->once())->method('getContext')->will($this->returnValue($context));
76
77         $parentRequest = Request::create('/');
78         $parentRequest->setLocale('es');
79
80         $this->requestStack->expects($this->once())->method('getParentRequest')->will($this->returnValue($parentRequest));
81
82         $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FinishRequestEvent')->disableOriginalConstructor()->getMock();
83
84         $listener = new LocaleListener($this->requestStack, 'fr', $router);
85         $listener->onKernelFinishRequest($event);
86     }
87
88     public function testRequestLocaleIsNotOverridden()
89     {
90         $request = Request::create('/');
91         $request->setLocale('de');
92         $listener = new LocaleListener($this->requestStack, 'fr');
93         $event = $this->getEvent($request);
94
95         $listener->onKernelRequest($event);
96         $this->assertEquals('de', $request->getLocale());
97     }
98
99     private function getEvent(Request $request)
100     {
101         return new GetResponseEvent($this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(), $request, HttpKernelInterface::MASTER_REQUEST);
102     }
103 }