Failed Conditions
Pull Request — master (#790)
by Guilherme
05:12
created

NfgSubscriberTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 2 Features 1
Metric Value
dl 0
loc 101
ccs 0
cts 67
cp 0
rs 10
c 2
b 2
f 1
wmc 4
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 PROCERGS\LoginCidadao\NfgBundle\Tests\EventListener;
12
13
use Doctrine\ORM\EntityManagerInterface;
14
use libphonenumber\PhoneNumber;
15
use LoginCidadao\CoreBundle\Entity\Person;
16
use LoginCidadao\CoreBundle\Model\PersonInterface;
17
use PHPUnit\Framework\MockObject\MockObject;
18
use PHPUnit\Framework\TestCase;
19
use PROCERGS\LoginCidadao\CoreBundle\Entity\PersonMeuRS;
20
use PROCERGS\LoginCidadao\NfgBundle\Entity\NfgProfile;
21
use PROCERGS\LoginCidadao\NfgBundle\Event\GetConnectCallbackResponseEvent;
22
use PROCERGS\LoginCidadao\NfgBundle\EventListener\NfgSubscriber;
23
use PROCERGS\LoginCidadao\NfgBundle\NfgEvents;
24
use Psr\Log\LoggerInterface;
25
26
class NfgSubscriberTest extends TestCase
27
{
28
    public function testGetSubscribedEvents()
29
    {
30
        $events = NfgSubscriber::getSubscribedEvents();
31
32
        $this->assertCount(1, $events);
33
        $this->assertEquals([
34
            NfgEvents::CONNECT_CALLBACK_RESPONSE => 'onConnectCallbackResponse',
35
        ], $events);
36
    }
37
38
    public function testOnConnectCallbackResponseNoPersonOrNfgProfile()
39
    {
40
        /** @var EntityManagerInterface|MockObject $em */
41
        $em = $this->createMock('Doctrine\ORM\EntityManagerInterface');
42
        $em->expects($this->never())->method('persist');
43
        $em->expects($this->never())->method('flush');
44
45
        /** @var LoggerInterface|MockObject $logger */
46
        $logger = $this->createMock('Psr\Log\LoggerInterface');
47
        $logger->expects($this->never())->method('notice');
48
49
        $personMeuRS = new PersonMeuRS();
50
51
        /** @var GetConnectCallbackResponseEvent|MockObject $event */
52
        $event = $this->getMockBuilder('PROCERGS\LoginCidadao\NfgBundle\Event\GetConnectCallbackResponseEvent')
53
            ->disableOriginalConstructor()->getMock();
54
        $event->expects($this->exactly(2))->method('getPersonMeuRS')->willReturn($personMeuRS);
55
56
        $subscriber = new NfgSubscriber($em);
57
        $subscriber->setLogger($logger);
58
59
        $subscriber->onConnectCallbackResponse($event);
60
    }
61
62
    public function testOnConnectCallbackResponseDoNothing()
63
    {
64
        /** @var EntityManagerInterface|MockObject $em */
65
        $em = $this->createMock('Doctrine\ORM\EntityManagerInterface');
66
        $em->expects($this->never())->method('persist');
67
        $em->expects($this->never())->method('flush');
68
69
        /** @var LoggerInterface|MockObject $logger */
70
        $logger = $this->createMock('Psr\Log\LoggerInterface');
71
        $logger->expects($this->never())->method('notice');
72
73
        $person = new Person();
74
        $person->setBirthdate(new \DateTime());
75
        $person->setMobile(new PhoneNumber());
76
77
        $personMeuRS = new PersonMeuRS();
78
        $personMeuRS->setPerson($person);
79
80
        /** @var GetConnectCallbackResponseEvent|MockObject $event */
81
        $event = $this->getMockBuilder('PROCERGS\LoginCidadao\NfgBundle\Event\GetConnectCallbackResponseEvent')
82
            ->disableOriginalConstructor()->getMock();
83
        $event->expects($this->exactly(2))->method('getPersonMeuRS')->willReturn($personMeuRS);
84
85
        $subscriber = new NfgSubscriber($em);
86
        $subscriber->setLogger($logger);
87
88
        $subscriber->onConnectCallbackResponse($event);
89
    }
90
91
    public function testOnConnectCallbackResponseUpdate()
92
    {
93
        $personInterface = 'LoginCidadao\CoreBundle\Model\PersonInterface';
94
        /** @var EntityManagerInterface|MockObject $em */
95
        $em = $this->createMock('Doctrine\ORM\EntityManagerInterface');
96
        $em->expects($this->once())->method('persist')
97
            ->with($this->isInstanceOf($personInterface));
98
        $em->expects($this->once())->method('flush');
99
100
        /** @var LoggerInterface|MockObject $logger */
101
        $logger = $this->createMock('Psr\Log\LoggerInterface');
102
        $logger->expects($this->exactly(2))->method('notice');
103
104
        $phoneNumber = new PhoneNumber();
105
106
        /** @var PersonInterface|MockObject $person */
107
        $person = $this->createMock($personInterface);
108
        $person->expects($this->once())->method('setBirthdate');
109
        $person->expects($this->once())->method('setMobile')->with($phoneNumber);
110
111
        $nfgProfile = new NfgProfile();
112
        $nfgProfile->setMobile($phoneNumber);
113
        $nfgProfile->setBirthdate(new \DateTime());
114
115
        $personMeuRS = new PersonMeuRS();
116
        $personMeuRS->setPerson($person);
117
        $personMeuRS->setNfgProfile($nfgProfile);
118
119
        $event = $this->getMockBuilder('PROCERGS\LoginCidadao\NfgBundle\Event\GetConnectCallbackResponseEvent')
120
            ->disableOriginalConstructor()->getMock();
121
        $event->expects($this->exactly(2))->method('getPersonMeuRS')->willReturn($personMeuRS);
122
123
        $subscriber = new NfgSubscriber($em);
124
        $subscriber->setLogger($logger);
125
126
        $subscriber->onConnectCallbackResponse($event);
127
    }
128
}
129