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.
Test Failed
Pull Request — master (#7)
by Fábio Tadeu da
01:42
created

MapBasedTest::testPersist()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 18
nc 1
nop 0
dl 0
loc 26
rs 9.6666
c 0
b 0
f 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\Tests\OutboxSubClass;
15
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\FirstDomainEvent;
16
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\FirstOutboxEvent;
17
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\SecondDomainEvent;
18
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\SecondOutboxEvent;
19
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\ThirdDomainEvent;
20
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\ThirdOutboxEvent;
21
use Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\StubMapBased;
22
use PHPUnit\Framework\TestCase;
23
24
final class MapBasedTest extends TestCase
25
{
26
    /** @var array */
27
    private $conversionMap;
28
29
    /** @var StubMapBased */
30
    private $mapBasedEventsHandler;
31
32
    /**
33
     * @before
34
     */
35
    public function setUpDependencies() : void
36
    {
37
        $this->conversionMap =             [
38
            'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\FirstDomainEvent'  =>
39
                'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\FirstOutboxEvent',
40
41
            'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\SecondDomainEvent' =>
42
                'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\SecondOutboxEvent',
43
44
            'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\ThirdDomainEvent'  =>
45
                'Dsantang\DomainEventsDoctrine\Tests\Unit\Outbox\Stub\Events\ThirdOutboxEvent',
46
        ];
47
    }
48
49
    public function testGetDomainsEvents() : void
50
    {
51
        Counter::reset();
52
53
        $eventArgs = $this->getEventArgs();
54
55
        self::assertEquals(3, Counter::getNext());
56
57
        $this->mapBasedEventsHandler = new StubMapBased(new OutboxSubClass(), $this->conversionMap);
58
        $this->mapBasedEventsHandler->getDomainsEvents($eventArgs);
59
    }
60
61
    public function testConvert() : void
62
    {
63
        $this->mapBasedEventsHandler = new StubMapBased(new OutboxSubClass(), $this->conversionMap);
64
65
        $domainEvents = [new ThirdDomainEvent(), new FirstDomainEvent(), new SecondDomainEvent()];
66
67
        $returnedOutboxEvents = $this->mapBasedEventsHandler->convert($this->conversionMap, ...$domainEvents);
68
69
        $expectedOutboxEvents = [
70
            new ThirdOutboxEvent(new ThirdDomainEvent()),
71
            new FirstOutboxEvent(new FirstDomainEvent()),
72
            new SecondOutboxEvent(new SecondDomainEvent()),
73
        ];
74
75
        self::assertEquals($expectedOutboxEvents, $returnedOutboxEvents);
76
    }
77
78
    public function testPersist() : void
79
    {
80
        $eventArgs      = $this->getEventArgs();
81
        $outboxSubClass = new OutboxSubClass();
82
83
        $this->mapBasedEventsHandler = new StubMapBased($outboxSubClass, $this->conversionMap);
84
        $this->mapBasedEventsHandler->getDomainsEvents($eventArgs);
85
86
        $outboxEvents = [
87
            new ThirdOutboxEvent(new ThirdDomainEvent()),
88
            new FirstOutboxEvent(new FirstDomainEvent()),
89
            new SecondOutboxEvent(new SecondDomainEvent()),
90
        ];
91
92
        $eventArgs->getEntityManager()->expects(self::exactly(3))
0 ignored issues
show
Bug introduced by
The method getEntityManager() does not exist on PHPUnit\Framework\MockObject\MockObject. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

92
        $eventArgs->/** @scrutinizer ignore-call */ 
93
                    getEntityManager()->expects(self::exactly(3))

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
93
            ->method('persist')
94
            ->withConsecutive(
95
                [$outboxSubClass->withOutboxEntry($outboxEvents[0])],
96
                [$outboxSubClass->withOutboxEntry($outboxEvents[1])],
97
                [$outboxSubClass->withOutboxEntry($outboxEvents[2])]
98
            );
99
100
        $this->mapBasedEventsHandler->persist(
101
            $eventArgs->getEntityManager(),
102
            new OutboxSubClass(),
103
            ...$outboxEvents
104
        );
105
    }
106
107
    private function getEventArgs()
108
    {
109
        $entity1 = $this->getEntityClass();
110
        $entity2 = $this->getEntityClass();
111
        $entity3 = $this->getEntityClass();
112
113
        $domainEvent1 = new FirstDomainEvent();
114
        $domainEvent2 = new SecondDomainEvent();
115
        $domainEvent3 = new ThirdDomainEvent();
116
117
        $entity1->trigger($domainEvent1);
118
        $entity2->trigger($domainEvent2);
119
        $entity3->trigger($domainEvent3);
120
121
        $unitOfWork = $this->createMock(UnitOfWork::class);
122
        $unitOfWork->expects(self::once())->method('getScheduledEntityInsertions')->willReturn([$entity1]);
123
        $unitOfWork->expects(self::once())->method('getScheduledEntityUpdates')->willReturn([]);
124
        $unitOfWork->expects(self::once())->method('getScheduledEntityDeletions')->willReturn([$entity2, $entity3]);
125
126
        $entityManager = $this->createMock(EntityManagerInterface::class);
127
        $entityManager->expects(self::any())->method('getUnitOfWork')->willReturn($unitOfWork);
128
129
        $eventArgs = $this->createMock(OnFlushEventArgs::class);
130
        $eventArgs->expects(self::any())->method('getEntityManager')->willReturn($entityManager);
131
132
        return $eventArgs;
133
    }
134
135
    private function getEntityClass()
136
    {
137
        return new class() implements EventAware {
138
            use OrderedEventRegistry;
139
140
            public function trigger(DomainEvent $event) : void
141
            {
142
                $this->triggeredA($event);
143
            }
144
        };
145
    }
146
}
147