Skip to content

Commit be1e126

Browse files
author
Nick Spelt
committed
Add tests
1 parent baf55f4 commit be1e126

File tree

11 files changed

+170
-35
lines changed

11 files changed

+170
-35
lines changed

.DS_Store

8 KB
Binary file not shown.

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
],
1616
"require": {
1717
"php": "^7.1",
18-
"psr/container": "1.0.0",
19-
"event-sourcery/event-sourcery": "^0"
18+
"event-sourcery/event-sourcery": "dev-master",
19+
"psr/container": "1.0.0"
2020
},
2121
"require-dev": {
2222
"orchestra/testbench": "^3.6",

composer.lock

Lines changed: 12 additions & 23 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/DispatchDomainEvents.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<?php namespace EventSourcery\Laravel;
22

3+
use EventSourcery\EventSourcery\EventDispatch\EventDispatcher;
4+
use EventSourcery\EventSourcery\Serialization\DomainEventSerializer;
35
use Illuminate\Bus\Queueable;
46
use Illuminate\Contracts\Queue\ShouldQueue;
57
use Illuminate\Queue\InteractsWithQueue;
68
use Illuminate\Queue\SerializesModels;
79
use EventSourcery\EventSourcery\EventSourcing\DomainEvent;
810
use EventSourcery\EventSourcery\EventSourcing\DomainEvents;
9-
use EventSourcery\EventSourcery\EventSourcing\DomainEventSerializer;
10-
use EventSourcery\EventSourcery\EventSourcing\EventDispatcher;
1111

1212
class DispatchDomainEvents implements ShouldQueue {
1313

@@ -20,8 +20,10 @@ public function __construct(DomainEvents $events) {
2020
return $this->nameOfEvent($event);
2121
})->toArray();
2222

23-
$serializedEvents = $events->map(function (DomainEvent $event) {
24-
return $event->serialize();
23+
/** @var DomainEventSerializer $serializer */
24+
$serializer = app(DomainEventSerializer::class);
25+
$serializedEvents = $events->map(function (DomainEvent $event) use ($serializer) {
26+
return $serializer->serialize($event);
2527
})->toArray();
2628

2729
for ($i = 0; $i < $events->count(); $i++) {
@@ -50,10 +52,7 @@ private function deserializeEvents(DomainEventSerializer $serializer) {
5052
$events = [];
5153
foreach ($this->serializedEvents as $serializedEvent) {
5254
list($eventName, $eventData) = $serializedEvent;
53-
$events[] = $serializer->deserialize((object) [
54-
'event_name' => $eventName,
55-
'event_data' => $eventData,
56-
]);
55+
$events[] = $serializer->deserialize(json_decode($eventData, true));
5756
}
5857
return DomainEvents::make($events);
5958
}
@@ -71,4 +70,4 @@ private function tryToDeserializeEvents(DomainEventSerializer $serializer) {
7170
throw $e;
7271
}
7372
}
74-
}
73+
}

src/RelationalEventStore.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function getStream(StreamId $id): StreamEvents {
3232
return new StreamEvent(
3333
StreamId::fromString($e->stream_id),
3434
StreamVersion::fromInt($e->stream_version),
35-
$this->serializer->deserialize($e)
35+
$this->serializer->deserialize($e->event_data)
3636
);
3737
})
3838
->toArray()

tests/RelationalEventStoreTest.php

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php namespace Tests\EventSourcery\Laravel;
2+
3+
use EventSourcery\EventSourcery\EventSourcing\StreamId;
4+
use EventSourcery\EventSourcery\PersonalData\CryptographicDetails;
5+
use EventSourcery\EventSourcery\PersonalData\EncryptionKey;
6+
use EventSourcery\EventSourcery\PersonalData\InitializationVector;
7+
use EventSourcery\EventSourcery\PersonalData\PersonalKey;
8+
use EventSourcery\Laravel\LaravelPersonalCryptographyStore;
9+
use EventSourcery\Laravel\RelationalEventStore;
10+
use Illuminate\Foundation\Testing\Concerns\InteractsWithDatabase;
11+
use Tests\EventSourcery\Laravel\Stubs\TestEmail;
12+
use Tests\EventSourcery\Laravel\Stubs\TestPersonalEvent;
13+
use Tests\EventSourcery\Laravel\Stubs\TestEvent;
14+
15+
class RelationalEventStoreTest extends TestCase {
16+
17+
use InteractsWithDatabase;
18+
19+
/** @var RelationalEventStore */
20+
private $dataStore;
21+
22+
/** @var LaravelPersonalCryptographyStore */
23+
private $cryptoStore;
24+
25+
function setUp() {
26+
parent::setUp();
27+
$this->dataStore = $this->app->make(RelationalEventStore::class);
28+
$this->cryptoStore = new LaravelPersonalCryptographyStore();
29+
30+
$person = PersonalKey::fromString("123");
31+
32+
$crypto = new CryptographicDetails(
33+
EncryptionKey::generate(),
34+
InitializationVector::generate()
35+
);
36+
37+
$this->cryptoStore->addPerson($person, $crypto);
38+
}
39+
40+
public function testItCanStoreAnEventWithPersonalData() {
41+
$event = new TestPersonalEvent(new TestEmail(PersonalKey::fromString("123"), "test@abc.com"));
42+
$this->dataStore->storeEvent($event);
43+
$this->assertDatabaseHas('event_store', [
44+
'event_name' => "TestPersonalEvent",
45+
]);
46+
}
47+
48+
public function testItCanDeSerializeAnEventWithPersonalData() {
49+
$event = new TestPersonalEvent(new TestEmail(PersonalKey::fromString("123"), "test@abc.com"));
50+
$this->dataStore->storeEvent($event);
51+
$events = $this->dataStore->getStream(StreamId::fromString(0));
52+
$this->assertTrue($event == $events->toDomainEvents()->first());
53+
}
54+
55+
public function testItCanStoreASimpleEvent() {
56+
$event = new TestEvent(1);
57+
$this->dataStore->storeEvent($event);
58+
$this->assertDatabaseHas('event_store', [
59+
'event_name' => "TestEvent",
60+
'event_data' => json_encode([
61+
'eventName' => "TestEvent",
62+
'fields' => [
63+
'number' => 1
64+
]
65+
])
66+
]);
67+
}
68+
}

tests/Stubs/TestEmail.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php namespace Tests\EventSourcery\Laravel\Stubs;
2+
3+
use EventSourcery\EventSourcery\PersonalData\PersonalKey;
4+
use EventSourcery\EventSourcery\PersonalData\SerializablePersonalDataValue;
5+
6+
class TestEmail implements SerializablePersonalDataValue {
7+
/**
8+
* @var PersonalKey
9+
*/
10+
private $personalKey;
11+
/**
12+
* @var string
13+
*/
14+
private $email;
15+
16+
public function __construct(PersonalKey $personalKey, string $email) {
17+
$this->personalKey = $personalKey;
18+
$this->email = $email;
19+
}
20+
21+
public function personalKey(): PersonalKey {
22+
return $this->personalKey;
23+
}
24+
25+
public function serialize(): string {
26+
return json_encode([
27+
'personalKey' => $this->personalKey->toString(),
28+
'email' => $this->email,
29+
]);
30+
}
31+
32+
public static function deserialize(string $string) {
33+
$values = json_decode($string);
34+
return new static(PersonalKey::fromString($values->personalKey), $values->email);
35+
}
36+
}

tests/Stubs/TestEvent.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php namespace Tests\EventSourcery\Laravel\Stubs;
2+
3+
use EventSourcery\EventSourcery\EventSourcing\DomainEvent;
4+
5+
class TestEvent implements DomainEvent {
6+
7+
/** @var int $number */
8+
public $number;
9+
10+
public function __construct(int $number = 0) {
11+
$this->number = $number;
12+
}
13+
}

tests/Stubs/TestId.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php namespace Tests\EventSourcery\Laravel\Stubs;
2+
3+
use EventSourcery\EventSourcery\EventSourcing\Id;
4+
5+
class TestId extends Id {}

tests/Stubs/TestPersonalEvent.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php namespace Tests\EventSourcery\Laravel\Stubs;
2+
3+
use EventSourcery\EventSourcery\EventSourcing\DomainEvent;
4+
5+
class TestPersonalEvent implements DomainEvent {
6+
7+
/**
8+
* @var TestEmail
9+
*/
10+
public $email;
11+
12+
public function __construct(TestEmail $email) {
13+
$this->email = $email;
14+
}
15+
}

0 commit comments

Comments
 (0)