LocaleSubscriberTest::getEvent()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Sonata Project package.
7
 *
8
 * (c) Thomas Rabaix <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Sonata\TranslationBundle\Tests\EventSubscriber;
15
16
use PHPUnit\Framework\TestCase;
17
use Sonata\TranslationBundle\EventSubscriber\LocaleSubscriber;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\HttpFoundation\Session\Session;
20
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
21
use Symfony\Component\HttpKernel\Event\RequestEvent;
22
use Symfony\Component\HttpKernel\HttpKernelInterface;
23
24
/**
25
 * @author Jonathan Vautrin <[email protected]>
26
 */
27
final class LocaleSubscriberTest extends TestCase
28
{
29
    /**
30
     * Check if LocaleSubscriber set the request locale to the session
31
     * locale if no locale has been set in the request.
32
     */
33
    public function testLocaleSubscriberFromSession(): void
34
    {
35
        $session = new Session(new MockArraySessionStorage());
36
        $session->set('_locale', 'fr');
37
        $request = new Request();
38
        $request->setSession($session);
39
        // Here we simulate that request has previous session
40
        $request->cookies->add([$session->getName() => null]);
41
        $event = $this->getEvent($request);
42
        $localeSubscriber = new LocaleSubscriber();
43
        $localeSubscriber->onKernelRequest($event);
44
        $this->assertSame('fr', $request->getLocale());
45
    }
46
47
    /**
48
     * Check if LocaleSubscriber set the session locale to the request
49
     * _locale routing parameter.
50
     */
51
    public function testLocaleSubscriberFromRequest(): void
52
    {
53
        $session = new Session(new MockArraySessionStorage());
54
        $session->set('_locale', 'en');
55
        $request = new Request();
56
        $request->setSession($session);
57
        // Here we simulate that request has previous session
58
        $request->cookies->add([$session->getName() => null]);
59
        $request->attributes->set('_locale', 'fr');
60
        $event = $this->getEvent($request);
61
        $localeSubscriber = new LocaleSubscriber();
62
        $localeSubscriber->onKernelRequest($event);
63
        $this->assertSame('fr', $session->get('_locale'));
64
    }
65
66
    /**
67
     * Check if LocaleSubscriber set the request locale to default
68
     * value when no locale has been set in request and session.
69
     */
70
    public function testLocaleSubscriberDefault(): void
71
    {
72
        $session = new Session(new MockArraySessionStorage());
73
        $request = new Request();
74
        $request->setSession($session);
75
        // Here we simulate that request has previous session
76
        $request->cookies->add([$session->getName() => null]);
77
        $event = $this->getEvent($request);
78
        $localeSubscriber = new LocaleSubscriber('fr');
79
        $localeSubscriber->onKernelRequest($event);
80
        $this->assertSame('fr', $request->getLocale());
81
    }
82
83
    private function getEvent(Request $request): RequestEvent
84
    {
85
        return new RequestEvent(
86
            $this->createMock(HttpKernelInterface::class),
87
            $request,
88
            HttpKernelInterface::MASTER_REQUEST
89
        );
90
    }
91
}
92