Failed Conditions
Push — issue#785 ( 0adb82...cc35f8 )
by Guilherme
04:03
created

SerializationSubscriberTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 129
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 129
rs 10
c 0
b 0
f 0
wmc 8
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\BadgesControlBundle\Tests\Event;
12
13
use JMS\Serializer\EventDispatcher\ObjectEvent;
14
use JMS\Serializer\EventDispatcher\PreSerializeEvent;
15
use LoginCidadao\APIBundle\Service\VersionService;
16
use LoginCidadao\BadgesControlBundle\Event\SerializationSubscriber;
17
use LoginCidadao\BadgesControlBundle\Handler\BadgesHandler;
18
use LoginCidadao\BadgesControlBundle\Model\Badge;
19
use PHPUnit\Framework\TestCase;
20
21
class SerializationSubscriberTest extends TestCase
22
{
23
    /**
24
     * @return \PHPUnit_Framework_MockObject_MockObject|BadgesHandler
25
     */
26
    private function getBadgesHandler()
27
    {
28
        return $this->getMockBuilder('LoginCidadao\BadgesControlBundle\Handler\BadgesHandler')
29
            ->disableOriginalConstructor()->getMock();
30
    }
31
32
    /**
33
     * @return \PHPUnit_Framework_MockObject_MockObject|VersionService
34
     */
35
    private function getVersionService()
36
    {
37
        return $this->getMockBuilder('LoginCidadao\APIBundle\Service\VersionService')
38
            ->disableOriginalConstructor()->getMock();
39
    }
40
41
    public function testGetSubscribedEvents()
42
    {
43
        $this->assertEquals([
44
            [
45
                'event' => 'serializer.pre_serialize',
46
                'method' => 'onPreSerialize',
47
                'class' => 'LoginCidadao\CoreBundle\Model\PersonInterface',
48
            ],
49
            [
50
                'event' => 'serializer.post_serialize',
51
                'method' => 'onPostSerialize',
52
                'class' => 'LoginCidadao\CoreBundle\Model\PersonInterface',
53
            ],
54
        ], SerializationSubscriber::getSubscribedEvents());
55
    }
56
57
    public function testOnPreSerializePerson()
58
    {
59
        $person = $this->createMock('LoginCidadao\CoreBundle\Model\PersonInterface');
60
61
        /** @var \PHPUnit_Framework_MockObject_MockObject|PreSerializeEvent $event */
62
        $event = $this->getMockBuilder('JMS\Serializer\EventDispatcher\PreSerializeEvent')
63
            ->disableOriginalConstructor()->getMock();
64
        $event->expects($this->once())->method('getObject')->willReturn($person);
65
66
        $handler = $this->getBadgesHandler();
67
        $handler->expects($this->once())->method('evaluate')->with($person);
68
69
        $subscriber = new SerializationSubscriber($handler, $this->getVersionService());
70
        $subscriber->onPreSerialize($event);
71
    }
72
73
    public function testOnPreSerializeNonPerson()
74
    {
75
        $object = new \stdClass();
76
77
        /** @var \PHPUnit_Framework_MockObject_MockObject|PreSerializeEvent $event */
78
        $event = $this->getMockBuilder('JMS\Serializer\EventDispatcher\PreSerializeEvent')
79
            ->disableOriginalConstructor()->getMock();
80
        $event->expects($this->once())->method('getObject')->willReturn($object);
81
82
        $handler = $this->getBadgesHandler();
83
        $handler->expects($this->never())->method('evaluate');
84
85
        $subscriber = new SerializationSubscriber($handler, $this->getVersionService());
86
        $subscriber->onPreSerialize($event);
87
    }
88
89
    public function testOnPostSerializePersonV1()
90
    {
91
        $badges = [
92
            new Badge('namespace', 'name', 'data'),
93
        ];
94
95
        $badgesSerialized = [
96
            'namespace.name' => 'data',
97
        ];
98
99
        $person = $this->createMock('LoginCidadao\CoreBundle\Model\PersonInterface');
100
        $person->expects($this->once())->method('getBadges')->willReturn($badges);
101
102
        $visitor = $this->getMockBuilder('JMS\Serializer\GenericSerializationVisitor')
103
            ->disableOriginalConstructor()->getMock();
104
        $visitor->expects($this->once())->method('setData')->with('badges', $badgesSerialized);
105
106
        /** @var \PHPUnit_Framework_MockObject_MockObject|ObjectEvent $event */
107
        $event = $this->getMockBuilder('JMS\Serializer\EventDispatcher\ObjectEvent')
108
            ->disableOriginalConstructor()->getMock();
109
        $event->expects($this->once())->method('getObject')->willReturn($person);
110
        $event->expects($this->once())->method('getVisitor')->willReturn($visitor);
111
112
        $versionService = $this->getVersionService();
113
        $versionService->expects($this->once())->method('getVersionFromRequest')->willReturn([1, 0, 0]);
114
        $versionService->expects($this->once())->method('getString')->willReturn('1.0.0');
115
116
        $subscriber = new SerializationSubscriber($this->getBadgesHandler(), $versionService);
117
        $subscriber->onPostSerialize($event);
118
    }
119
120
    public function testOnPostSerializePersonV2()
121
    {
122
        $person = $this->createMock('LoginCidadao\CoreBundle\Model\PersonInterface');
123
124
        /** @var \PHPUnit_Framework_MockObject_MockObject|ObjectEvent $event */
125
        $event = $this->getMockBuilder('JMS\Serializer\EventDispatcher\ObjectEvent')
126
            ->disableOriginalConstructor()->getMock();
127
        $event->expects($this->once())->method('getObject')->willReturn($person);
128
        $event->expects($this->never())->method('getVisitor');
129
130
        $versionService = $this->getVersionService();
131
        $versionService->expects($this->once())->method('getVersionFromRequest')->willReturn([2, 0, 0]);
132
        $versionService->expects($this->once())->method('getString')->willReturn('2.0.0');
133
134
        $subscriber = new SerializationSubscriber($this->getBadgesHandler(), $versionService);
135
        $subscriber->onPostSerialize($event);
136
    }
137
138
    public function testOnPostSerializeNonPerson()
139
    {
140
        $object = new \stdClass();
141
142
        /** @var \PHPUnit_Framework_MockObject_MockObject|ObjectEvent $event */
143
        $event = $this->getMockBuilder('JMS\Serializer\EventDispatcher\ObjectEvent')
144
            ->disableOriginalConstructor()->getMock();
145
        $event->expects($this->once())->method('getObject')->willReturn($object);
146
        $event->expects($this->never())->method('getVisitor');
147
148
        $subscriber = new SerializationSubscriber($this->getBadgesHandler(), $this->getVersionService());
149
        $subscriber->onPostSerialize($event);
150
    }
151
}
152