Failed Conditions
Push — issue#666 ( f415d0...521a08 )
by Guilherme
12:02
created

SessionStateTest::getClientManager()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * This file is part of the login-cidadao project or it's bundles.
4
 *
5
 * (c) Guilherme Donato <guilhermednt on github>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace LoginCidadao\OpenIDBundle\Tests\Storage;
12
13
use LoginCidadao\OAuthBundle\Entity\Client;
14
use LoginCidadao\OpenIDBundle\Entity\ClientMetadata;
15
use LoginCidadao\OpenIDBundle\Manager\ClientManager;
16
use LoginCidadao\OpenIDBundle\Storage\SessionState;
17
use Symfony\Component\HttpFoundation\Response;
18
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
19
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
20
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
21
22
class SessionStateTest extends \PHPUnit_Framework_TestCase
23
{
24
    public function testOnKernelResponseAddCookie()
25
    {
26
        /** @var ResponseHeaderBag|\PHPUnit_Framework_MockObject_MockObject $headers */
27
        $headers = $this->getMock('Symfony\Component\HttpFoundation\ResponseHeaderBag');
28
        $headers->expects($this->once())->method('setCookie')
29
            ->with($this->isInstanceOf('Symfony\Component\HttpFoundation\Cookie'));
30
31
        $response = new Response();
32
        $response->headers = $headers;
33
34
        $token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface');
35
        $token->expects($this->once())->method('serialize')->willReturn('serialized');
36
37
        $tokenStorage = $this->getTokenStorage();
38
        $tokenStorage->expects($this->once())
39
            ->method('getToken')->willReturn($token);
40
41
        $event = $this->getFilterResponseEvent($response);
42
43
        $sessionState = new SessionState($this->getClientManager(), $tokenStorage);
44
        $sessionState->onKernelResponse($event);
45
    }
46
47
    public function testOnKernelResponseRemoveCookie()
48
    {
49
        /** @var ResponseHeaderBag|\PHPUnit_Framework_MockObject_MockObject $headers */
50
        $headers = $this->getMock('Symfony\Component\HttpFoundation\ResponseHeaderBag');
51
        $headers->expects($this->once())->method('removeCookie')->with('session_state');
52
53
        $response = new Response();
54
        $response->headers = $headers;
55
56
        $event = $this->getFilterResponseEvent($response);
57
58
        $sessionState = new SessionState($this->getClientManager(), $this->getTokenStorage());
59
        $sessionState->onKernelResponse($event);
60
    }
61
62
    public function testGetSessionState()
63
    {
64
        $clientId = 'client_id';
65
        $sessionId = 'session_id';
66
        $client = (new Client())
67
            ->setMetadata((new ClientMetadata())
68
                ->setClientUri($url = 'https://example.com'));
69
70
        $clientManager = $this->getClientManager();
71
        $clientManager->expects($this->once())
72
            ->method('getClientById')->with($clientId)->willReturn($client);
73
74
        $sessionState = new SessionState($clientManager, $this->getTokenStorage());
75
76
        $state = $sessionState->getSessionState($clientId, $sessionId);
77
        $generatedSalt = explode('.', $state)[1];
78
79
        $expectedState = hash('sha256', $clientId.$url.$sessionId.$generatedSalt).".{$generatedSalt}";
80
        $this->assertSame($expectedState, $state);
81
    }
82
83
    /**
84
     * @return TokenStorageInterface|\PHPUnit_Framework_MockObject_MockObject
85
     */
86
    private function getTokenStorage()
87
    {
88
        return $this->getMock('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface');
89
    }
90
91
    /**
92
     * @return ClientManager|\PHPUnit_Framework_MockObject_MockObject
93
     */
94
    private function getClientManager()
95
    {
96
        return $this->getMockBuilder('LoginCidadao\OpenIDBundle\Manager\ClientManager')
97
            ->disableOriginalConstructor()->getMock();
98
    }
99
100
    /**
101
     * @return FilterResponseEvent|\PHPUnit_Framework_MockObject_MockObject
102
     */
103
    private function getFilterResponseEvent($response)
104
    {
105
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterResponseEvent')
106
            ->disableOriginalConstructor()->getMock();
107
        $event->expects($this->once())->method('isMasterRequest')->willReturn(true);
108
        $event->expects($this->once())->method('getResponse')->willReturn($response);
109
110
        return $event;
111
    }
112
}
113