GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Passed
Pull Request — master (#7)
by Fábio Tadeu da
02:47
created

StubMapBasedTest::setUpDependencies()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 17
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox;
6
7
use Doctrine\ORM\EntityManagerInterface;
8
use Doctrine\ORM\Event\OnFlushEventArgs;
9
use Doctrine\ORM\UnitOfWork;
10
use Dsantang\DomainEvents\Counter;
11
use Dsantang\DomainEvents\DomainEvent;
12
use Dsantang\DomainEvents\EventAware;
13
use Dsantang\DomainEvents\Registry\OrderedEventRegistry;
14
use Dsantang\DomainEventsDoctrine\Outbox\Converter;
15
use Dsantang\DomainEventsDoctrine\Tests\OutboxSubClass;
16
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Converters\FirstOutboxConverter;
17
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Converters\SecondOutboxConverter;
18
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Converters\ThirdOutboxConverter;
19
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\DomainEvents\FirstDomainEvent;
20
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\DomainEvents\SecondDomainEvent;
21
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\DomainEvents\ThirdDomainEvent;
22
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\OutboxEntries\FirstOutboxEntry;
23
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\OutboxEntries\SecondOutboxEntry;
24
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\OutboxEntries\ThirdOutboxEntry;
25
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\StubMapBased;
26
use PHPUnit\Framework\MockObject\MockObject;
27
use PHPUnit\Framework\TestCase;
28
use function array_values;
29
30
final class StubMapBasedTest extends TestCase
31
{
32
    /** @var Converter[] */
33
    private $conversionMap;
34
35
    /** @var MockObject entityManager */
36
    private $entityManager;
37
38
    /** @var MockObject unitOfWork */
39
    private $unitOfWork;
40
41
    /**
42
     * @before
43
     */
44
    public function setUpDependencies() : void
45
    {
46
        $map = [
47
            'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\DomainEvents\FirstDomainEvent'  =>
48
                new FirstOutboxConverter(),
49
50
            'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\DomainEvents\SecondDomainEvent' =>
51
                new SecondOutboxConverter(),
52
53
            'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\DomainEvents\ThirdDomainEvent'  =>
54
                new ThirdOutboxConverter(),
55
        ];
56
57
        $this->conversionMap = $map;
58
59
        $this->entityManager = $this->createMock(EntityManagerInterface::class);
60
        $this->unitOfWork    = $this->createMock(UnitOfWork::class);
61
    }
62
63
    public function testGetDomainsEvents() : void
64
    {
65
        Counter::reset();
66
67
        $eventArgs = $this->getEventArgs();
68
69
        self::assertEquals(3, Counter::getNext());
70
71
        $mapBasedEventsHandler = new StubMapBased(new OutboxSubClass(), $this->conversionMap);
72
73
        $eventsResult = $mapBasedEventsHandler->getDomainEvents($eventArgs);
74
75
        self::assertEquals(0, Counter::getNext());
76
77
        $eventsExpected = [new FirstDomainEvent(), new SecondDomainEvent(), new ThirdDomainEvent()];
78
79
        self::assertEquals(array_values($eventsResult), array_values($eventsExpected));
80
    }
81
82
    public function testPersist() : void
83
    {
84
        $eventArgs      = $this->getEventArgs();
85
        $outboxSubClass = new OutboxSubClass();
86
87
        $mapBasedEventsHandler = new StubMapBased($outboxSubClass, $this->conversionMap);
88
        $mapBasedEventsHandler->getDomainEvents($eventArgs);
89
90
        $outboxEvents = [
91
            new ThirdOutboxEntry(new ThirdDomainEvent()),
92
            new FirstOutboxEntry(new FirstDomainEvent()),
93
            new SecondOutboxEntry(new SecondDomainEvent()),
94
        ];
95
96
        $this->unitOfWork->expects(self::once())
97
            ->method('computeChangeSets');
98
99
        $this->entityManager->expects(self::exactly(3))
100
            ->method('persist');
101
102
        $mapBasedEventsHandler->persist(
103
            $eventArgs->getEntityManager(),
104
            ...$outboxEvents
105
        );
106
    }
107
108
    public function testOnFlushWithDomainEvents() : void
109
    {
110
        $eventArgs = $this->getEventArgs();
111
112
        $mapBasedEventsHandler = new StubMapBased(new OutboxSubClass(), $this->conversionMap);
113
114
        $this->entityManager->expects(self::exactly(3))
115
            ->method('persist');
116
117
        $mapBasedEventsHandler->onFlush($eventArgs);
118
    }
119
120
    public function testOnFlushWithNoDomainEvents() : void
121
    {
122
        $eventArgs = $this->getEventArgs(false);
123
124
        $mapBasedEventsHandler = new StubMapBased(new OutboxSubClass(), $this->conversionMap);
125
        $mapBasedEventsHandler->onFlush($eventArgs);
126
127
        $this->entityManager->expects(self::never())
128
            ->method('persist');
129
    }
130
131
    /**
132
     * @return OnFlushEventArgs|MockObject
133
     */
134
    private function getEventArgs(bool $withEvents = true) : OnFlushEventArgs
135
    {
136
        $insertions = $updates = $deletions = [];
137
138
        if ($withEvents) {
139
            $entity1 = new class() implements EventAware {
140
                use OrderedEventRegistry;
141
142
                public function trigger(DomainEvent $event) : void
143
                {
144
                    $this->triggeredA($event);
145
                }
146
            };
147
148
            $entity2 = new class() implements EventAware {
149
                use OrderedEventRegistry;
150
151
                public function trigger(DomainEvent $event) : void
152
                {
153
                    $this->triggeredA($event);
154
                }
155
            };
156
157
            $entity3 = new class() implements EventAware {
158
                use OrderedEventRegistry;
159
160
                public function trigger(DomainEvent $event) : void
161
                {
162
                    $this->triggeredA($event);
163
                }
164
            };
165
166
            $domainEvent1 = new FirstDomainEvent();
167
            $domainEvent2 = new SecondDomainEvent();
168
            $domainEvent3 = new ThirdDomainEvent();
169
170
            $entity1->trigger($domainEvent1);
171
            $entity2->trigger($domainEvent2);
172
            $entity3->trigger($domainEvent3);
173
174
            $updates   = [$entity3];
175
            $deletions = [$entity2, $entity1];
176
        }
177
178
        $this->unitOfWork->expects(self::once())->method('getScheduledEntityInsertions')->willReturn($insertions);
179
        $this->unitOfWork->expects(self::once())->method('getScheduledEntityUpdates')->willReturn($updates);
180
        $this->unitOfWork->expects(self::once())->method('getScheduledEntityDeletions')->willReturn($deletions);
181
182
        $this->entityManager->expects(self::any())->method('getUnitOfWork')->willReturn($this->unitOfWork);
183
184
        $eventArgs = $this->createMock(OnFlushEventArgs::class);
185
        $eventArgs->expects(self::any())->method('getEntityManager')->willReturn($this->entityManager);
186
187
        return $eventArgs;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $eventArgs returns the type PHPUnit\Framework\MockObject\MockObject which is incompatible with the type-hinted return Doctrine\ORM\Event\OnFlushEventArgs.
Loading history...
188
    }
189
}
190