Passed
Push — issue#767 ( 011dde...50feef )
by Guilherme
05:46
created

AnnotationListenerTest::testOnKernelResponse()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 31
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 18
nc 1
nop 0
dl 0
loc 31
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: gdnt
5
 * Date: 11/04/18
6
 * Time: 00:27
7
 */
8
9
namespace LoginCidadao\APIBundle\Tests\Event\Security;
10
11
use Doctrine\Common\Annotations\Reader;
12
use LoginCidadao\APIBundle\Controller\PersonController;
13
use LoginCidadao\APIBundle\Event\Security\AnnotationListener;
14
use LoginCidadao\APIBundle\Security\Audit\ActionLogger;
15
use LoginCidadao\APIBundle\Security\Audit\Annotation\Loggable;
16
use Symfony\Component\HttpFoundation\Request;
17
use Symfony\Component\HttpFoundation\Response;
18
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
19
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
20
21
class AnnotationListenerTest extends \PHPUnit_Framework_TestCase
22
{
23
24
    public function testOnKernelResponse()
25
    {
26
        $logId = 'logId666';
27
        $responseCode = 200;
28
29
        /** @var Reader|\PHPUnit_Framework_MockObject_MockObject $reader */
30
        $reader = $this->getMock('Doctrine\Common\Annotations\Reader');
31
32
        /** @var ActionLogger|\PHPUnit_Framework_MockObject_MockObject $logger */
33
        $logger = $this->getMockBuilder('LoginCidadao\APIBundle\Security\Audit\ActionLogger')
34
            ->disableOriginalConstructor()->getMock();
35
        $logger->expects($this->once())->method('updateResponseCode')->with($logId, $responseCode);
36
37
        $attrs = [
38
            '_loggable' => [
39
                (new Loggable(['type' => 'LOGIN']))
40
                    ->setActionLogId($logId),
41
            ],
42
        ];
43
        $request = new Request([], [], $attrs);
44
45
        $response = new Response('', $responseCode);
46
47
        /** @var FilterResponseEvent|\PHPUnit_Framework_MockObject_MockObject $event */
48
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterResponseEvent')
49
            ->disableOriginalConstructor()->getMock();
50
        $event->expects($this->once())->method('getRequest')->willReturn($request);
51
        $event->expects($this->once())->method('getResponse')->willReturn($response);
52
53
        $listener = new AnnotationListener($reader, $logger);
54
        $listener->onKernelResponse($event);
55
    }
56
57
    public function testOnKernelController()
58
    {
59
        $logId = 'logId666';
60
        $controller = new PersonController();
61
        $request = new Request();
62
63
        $annotation = (new Loggable(['type' => 'LOGIN']))
64
            ->setActionLogId($logId);
65
66
        /** @var Reader|\PHPUnit_Framework_MockObject_MockObject $reader */
67
        $reader = $this->getMock('Doctrine\Common\Annotations\Reader');
68
        $reader->expects($this->once())
69
            ->method('getMethodAnnotations')->willReturn([$annotation]);
70
71
        /** @var ActionLogger|\PHPUnit_Framework_MockObject_MockObject $logger */
72
        $logger = $this->getMockBuilder('LoginCidadao\APIBundle\Security\Audit\ActionLogger')
73
            ->disableOriginalConstructor()->getMock();
74
        $logger->expects($this->once())->method('logActivity')->with($request, $annotation, [$controller, 'getPersonAction']);
75
76
        /** @var FilterControllerEvent|\PHPUnit_Framework_MockObject_MockObject $event */
77
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterControllerEvent')
78
            ->disableOriginalConstructor()->getMock();
79
        $event->expects($this->once())
80
            ->method('getController')
81
            ->willReturn([$controller, 'getPersonAction']);
82
        $event->expects($this->once())
83
            ->method('getRequest')
84
            ->willReturn($request);
85
86
        $listener = new AnnotationListener($reader, $logger);
87
        $listener->onKernelController($event);
88
    }
89
90
    public function testOnKernelControllerMissingController()
91
    {
92
        /** @var Reader|\PHPUnit_Framework_MockObject_MockObject $reader */
93
        $reader = $this->getMock('Doctrine\Common\Annotations\Reader');
94
95
        /** @var ActionLogger|\PHPUnit_Framework_MockObject_MockObject $logger */
96
        $logger = $this->getMockBuilder('LoginCidadao\APIBundle\Security\Audit\ActionLogger')
97
            ->disableOriginalConstructor()->getMock();
98
99
        /** @var FilterControllerEvent|\PHPUnit_Framework_MockObject_MockObject $event */
100
        $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\FilterControllerEvent')
101
            ->disableOriginalConstructor()->getMock();
102
        $event->expects($this->once())
103
            ->method('getController')
104
            ->willReturn(null);
105
106
        $listener = new AnnotationListener($reader, $logger);
107
        $listener->onKernelController($event);
108
    }
109
}
110