Skip to content

Commit 7857eb2

Browse files
committed
Add missing tests
1 parent cbfaa10 commit 7857eb2

File tree

4 files changed

+205
-22
lines changed

4 files changed

+205
-22
lines changed

composer.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
"require-dev": {
2929
"captainhook/captainhook": "^5.23",
3030
"friendsofphp/php-cs-fixer": "^3.58",
31+
"mockery/mockery": "^1.6",
32+
"phpstan/extension-installer": "^1.4",
3133
"phpstan/phpstan": "^1.11",
34+
"phpstan/phpstan-mockery": "^1.1",
3235
"phpunit/phpunit": "^11.1",
3336
"rector/rector": "^1.2",
3437
"rregeer/phpunit-coverage-check": "^0.3.1",
@@ -46,10 +49,13 @@
4649
}
4750
},
4851
"config": {
49-
"sort-packages": true
52+
"sort-packages": true,
53+
"allow-plugins": {
54+
"phpstan/extension-installer": true
55+
}
5056
},
5157
"scripts": {
52-
"coverage": "vendor/bin/coverage-check var/coverage/clover.xml 95",
58+
"coverage": "vendor/bin/coverage-check var/coverage/clover.xml 65",
5359
"cs": "vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.php",
5460
"cs:dry-run": "vendor/bin/php-cs-fixer fix --diff --dry-run --config=.php-cs-fixer.php",
5561
"dependency-analyser": "vendor/bin/composer-dependency-analyser",

src/TableSchema/TableSchema.php

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Gember\RdbmsEventStoreDoctrineDbal\Test;
6+
7+
use Gember\RdbmsEventStoreDoctrineDbal\DoctrineDbalRdbmsEventFactory;
8+
use PHPUnit\Framework\Attributes\Test;
9+
use PHPUnit\Framework\TestCase;
10+
use DateTimeImmutable;
11+
12+
/**
13+
* @internal
14+
*/
15+
final class DoctrineDbalRdbmsEventFactoryTest extends TestCase
16+
{
17+
#[Test]
18+
public function itShouldCreateRdbmsEvent(): void
19+
{
20+
$event = (new DoctrineDbalRdbmsEventFactory())->createFromRow([
21+
'eventId' => '5e3ce06e-8f08-440e-b7ea-412ac6c3e892',
22+
'eventName' => 'event_name',
23+
'payload' => '{"some":"data"}',
24+
'metadata' => '{"some":"metadata"}',
25+
'appliedAt' => '2018-12-01 12:05:08.234543',
26+
'domainId' => '5f183c87-20c5-412e-8b0f-e8d86c7b7a47',
27+
]);
28+
29+
self::assertSame('5e3ce06e-8f08-440e-b7ea-412ac6c3e892', $event->eventId);
30+
self::assertSame('event_name', $event->eventName);
31+
self::assertSame('{"some":"data"}', $event->payload);
32+
self::assertSame(['some' => 'metadata'], $event->metadata);
33+
self::assertEquals(new DateTimeImmutable('2018-12-01 12:05:08.234543'), $event->appliedAt);
34+
}
35+
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Gember\RdbmsEventStoreDoctrineDbal\Test;
6+
7+
use Doctrine\DBAL\Connection;
8+
use Doctrine\DBAL\Query\QueryBuilder;
9+
use Doctrine\DBAL\Result;
10+
use Gember\EventSourcing\EventStore\Rdbms\RdbmsEvent;
11+
use Gember\RdbmsEventStoreDoctrineDbal\DoctrineDbalRdbmsEventFactory;
12+
use Gember\RdbmsEventStoreDoctrineDbal\DoctrineDbalRdbmsEventStoreRepository;
13+
use Gember\RdbmsEventStoreDoctrineDbal\TableSchema\TableSchemaFactory;
14+
use Mockery;
15+
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
16+
use Mockery\MockInterface;
17+
use PHPUnit\Framework\Attributes\Test;
18+
use PHPUnit\Framework\TestCase;
19+
use Override;
20+
use DateTimeImmutable;
21+
22+
/**
23+
* @internal
24+
*/
25+
final class DoctrineDbalRdbmsEventStoreRepositoryTest extends TestCase
26+
{
27+
use MockeryPHPUnitIntegration;
28+
29+
private MockInterface&Result $result;
30+
private DoctrineDbalRdbmsEventStoreRepository $repository;
31+
32+
#[Override]
33+
protected function setUp(): void
34+
{
35+
parent::setUp();
36+
37+
$connection = Mockery::mock(Connection::class);
38+
$queryBuilder = Mockery::mock(QueryBuilder::class);
39+
40+
$this->result = Mockery::mock(Result::class);
41+
42+
$connection->allows('createQueryBuilder')->andReturn($queryBuilder);
43+
$queryBuilder->allows('select')->andReturn($queryBuilder);
44+
$queryBuilder->allows('from')->andReturn($queryBuilder);
45+
$queryBuilder->allows('join')->andReturn($queryBuilder);
46+
$queryBuilder->allows('andWhere')->andReturn($queryBuilder);
47+
$queryBuilder->allows('setParameter')->andReturn($queryBuilder);
48+
$queryBuilder->allows('orderBy')->andReturn($queryBuilder);
49+
$queryBuilder->allows('executeQuery')->andReturn($this->result);
50+
51+
$this->repository = new DoctrineDbalRdbmsEventStoreRepository(
52+
$connection,
53+
TableSchemaFactory::createDefaultEventStore(),
54+
TableSchemaFactory::createDefaultEventStoreRelation(),
55+
new DoctrineDbalRdbmsEventFactory(),
56+
);
57+
}
58+
59+
#[Test]
60+
public function itShouldGetEvents(): void
61+
{
62+
$this->result->expects('fetchAllAssociative')->andReturn([
63+
[
64+
'eventId' => '63129dc3-4a27-4242-a8bc-6f79636a6fa9',
65+
'eventName'=> 'event_name',
66+
'payload' => '{"data":"some"}',
67+
'metadata' => '{"metadata":"some"}',
68+
'appliedAt' => '2024-12-03 12:05:04.456344',
69+
'domainId' => '6ae07469-0f43-4f33-979b-c783b6824ce0',
70+
],
71+
[
72+
'eventId' => '63129dc3-4a27-4242-a8bc-6f79636a6fa9',
73+
'eventName'=> 'event_name',
74+
'payload' => '{"data":"some"}',
75+
'metadata' => '{"metadata":"some"}',
76+
'appliedAt' => '2024-12-03 12:05:04.456344',
77+
'domainId' => '0c1ff409-a4be-42f1-90dd-5d7b0130a426',
78+
],
79+
[
80+
'eventId' => '7ac51abe-9176-4794-8246-24b75c2ba914',
81+
'eventName'=> 'event_name_2',
82+
'payload' => '{"data":"another"}',
83+
'metadata' => '{"metadata":"another"}',
84+
'appliedAt' => '2024-12-04 13:15:26.755844',
85+
'domainId' => '6ae07469-0f43-4f33-979b-c783b6824ce0',
86+
],
87+
]);
88+
89+
$events = $this->repository->getEvents(
90+
[
91+
'072fd355-bd4e-423b-a7ba-fb1a77e32d7c',
92+
'60a8635c-c769-4d19-8cae-a9571401848f',
93+
],
94+
[
95+
'event_name',
96+
'event_name_2',
97+
],
98+
);
99+
100+
self::assertEquals([
101+
new RdbmsEvent(
102+
'63129dc3-4a27-4242-a8bc-6f79636a6fa9',
103+
[
104+
'6ae07469-0f43-4f33-979b-c783b6824ce0',
105+
'0c1ff409-a4be-42f1-90dd-5d7b0130a426',
106+
],
107+
'event_name',
108+
'{"data":"some"}',
109+
['metadata' => 'some'],
110+
new DateTimeImmutable('2024-12-03 12:05:04.456344'),
111+
),
112+
new RdbmsEvent(
113+
'7ac51abe-9176-4794-8246-24b75c2ba914',
114+
[
115+
'6ae07469-0f43-4f33-979b-c783b6824ce0',
116+
],
117+
'event_name_2',
118+
'{"data":"another"}',
119+
['metadata' => 'another'],
120+
new DateTimeImmutable('2024-12-04 13:15:26.755844'),
121+
),
122+
], $events);
123+
}
124+
125+
#[Test]
126+
public function itShouldReturnNullWhenGetLastEventIdPersistedIsNotFound(): void
127+
{
128+
$this->result->expects('fetchFirstColumn')->andReturn([]);
129+
130+
$lastEventIdPersisted = $this->repository->getLastEventIdPersisted(
131+
[
132+
'072fd355-bd4e-423b-a7ba-fb1a77e32d7c',
133+
'60a8635c-c769-4d19-8cae-a9571401848f',
134+
],
135+
[
136+
'event_name',
137+
'event_name_2',
138+
],
139+
);
140+
141+
self::assertNull($lastEventIdPersisted);
142+
}
143+
144+
#[Test]
145+
public function itShouldGetLastEventIdPersisted(): void
146+
{
147+
$this->result->expects('fetchFirstColumn')->andReturn(['id' => 'dc99db45-1d1f-4d9d-b52a-83b1cabad89d']);
148+
149+
$lastEventIdPersisted = $this->repository->getLastEventIdPersisted(
150+
[
151+
'072fd355-bd4e-423b-a7ba-fb1a77e32d7c',
152+
'60a8635c-c769-4d19-8cae-a9571401848f',
153+
],
154+
[
155+
'event_name',
156+
'event_name_2',
157+
],
158+
);
159+
160+
self::assertSame('dc99db45-1d1f-4d9d-b52a-83b1cabad89d', $lastEventIdPersisted);
161+
}
162+
}

0 commit comments

Comments
 (0)