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

AnnotationListenerTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 87
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
B testOnKernelResponse() 0 31 1
A testOnKernelControllerMissingController() 0 18 1
B testOnKernelController() 0 31 1
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\APIBundle\Tests\Event\Security;
12
13
use Doctrine\Common\Annotations\Reader;
14
use LoginCidadao\APIBundle\Controller\PersonController;
15
use LoginCidadao\APIBundle\Event\Security\AnnotationListener;
16
use LoginCidadao\APIBundle\Security\Audit\ActionLogger;
17
use LoginCidadao\APIBundle\Security\Audit\Annotation\Loggable;
18
use Symfony\Component\HttpFoundation\Request;
19
use Symfony\Component\HttpFoundation\Response;
20
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
21
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
22
23
class AnnotationListenerTest extends \PHPUnit_Framework_TestCase
24
{
25
26
    public function testOnKernelResponse()
27
    {
28
        $logId = 'logId666';
29
        $responseCode = 200;
30
31
        /** @var Reader|\PHPUnit_Framework_MockObject_MockObject $reader */
32
        $reader = $this->getMock('Doctrine\Common\Annotations\Reader');
33
34
        /** @var ActionLogger|\PHPUnit_Framework_MockObject_MockObject $logger */
35
        $logger = $this->getMockBuilder('LoginCidadao\APIBundle\Security\Audit\ActionLogger')
36
            ->disableOriginalConstructor()->getMock();
37
        $logger->expects($this->once())->method('updateResponseCode')->with($logId, $responseCode);
38
39
        $attrs = [
40
            '_loggable' => [
41
                (new Loggable(['type' => 'LOGIN']))
42
                    ->setActionLogId($logId),
43
            ],
44
        ];
45
        $request = new Request([], [], $attrs);
46
47
        $response = new Response('', $responseCode);
48
49
        /** @var FilterResponseEvent|\PHPUnit_Framework_MockObject_MockObject $event */
50
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterResponseEvent')
51
            ->disableOriginalConstructor()->getMock();
52
        $event->expects($this->once())->method('getRequest')->willReturn($request);
53
        $event->expects($this->once())->method('getResponse')->willReturn($response);
54
55
        $listener = new AnnotationListener($reader, $logger);
56
        $listener->onKernelResponse($event);
57
    }
58
59
    public function testOnKernelController()
60
    {
61
        $logId = 'logId666';
62
        $controller = new PersonController();
63
        $request = new Request();
64
65
        $annotation = (new Loggable(['type' => 'LOGIN']))
66
            ->setActionLogId($logId);
67
68
        /** @var Reader|\PHPUnit_Framework_MockObject_MockObject $reader */
69
        $reader = $this->getMock('Doctrine\Common\Annotations\Reader');
70
        $reader->expects($this->once())
71
            ->method('getMethodAnnotations')->willReturn([$annotation]);
72
73
        /** @var ActionLogger|\PHPUnit_Framework_MockObject_MockObject $logger */
74
        $logger = $this->getMockBuilder('LoginCidadao\APIBundle\Security\Audit\ActionLogger')
75
            ->disableOriginalConstructor()->getMock();
76
        $logger->expects($this->once())->method('logActivity')->with($request, $annotation, [$controller, 'getPersonAction']);
77
78
        /** @var FilterControllerEvent|\PHPUnit_Framework_MockObject_MockObject $event */
79
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterControllerEvent')
80
            ->disableOriginalConstructor()->getMock();
81
        $event->expects($this->once())
82
            ->method('getController')
83
            ->willReturn([$controller, 'getPersonAction']);
84
        $event->expects($this->once())
85
            ->method('getRequest')
86
            ->willReturn($request);
87
88
        $listener = new AnnotationListener($reader, $logger);
89
        $listener->onKernelController($event);
90
    }
91
92
    public function testOnKernelControllerMissingController()
93
    {
94
        /** @var Reader|\PHPUnit_Framework_MockObject_MockObject $reader */
95
        $reader = $this->getMock('Doctrine\Common\Annotations\Reader');
96
97
        /** @var ActionLogger|\PHPUnit_Framework_MockObject_MockObject $logger */
98
        $logger = $this->getMockBuilder('LoginCidadao\APIBundle\Security\Audit\ActionLogger')
99
            ->disableOriginalConstructor()->getMock();
100
101
        /** @var FilterControllerEvent|\PHPUnit_Framework_MockObject_MockObject $event */
102
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterControllerEvent')
103
            ->disableOriginalConstructor()->getMock();
104
        $event->expects($this->once())
105
            ->method('getController')
106
            ->willReturn(null);
107
108
        $listener = new AnnotationListener($reader, $logger);
109
        $listener->onKernelController($event);
110
    }
111
}
112