/** * {@inheritdoc} */ public static function deserialize(array $data) : QueryMessage { $keys = ['id', 'type', 'timestamp', 'meta_data', 'payload_type', 'payload']; foreach ($keys as $key) { if (!isset($data[$key])) { $message = sprintf('Invalid serialization data: %s', VarPrinter::toString($data)); throw new DomainException($message); } } if ($data['type'] !== MessageType::QUERY) { $message = sprintf('Invalid message type: %s', $data['type']); throw new DomainException($message); } /** @var MessageId $id */ $id = MessageId::fromString($data['id']); /** @var DateTime $timestamp */ $timestamp = DateTime::fromString($data['timestamp']); /** @var MetaData $metaData */ $metaData = MetaData::create($data['meta_data']); /** @var Type $payloadType */ $payloadType = Type::create($data['payload_type']); /** @var string $payloadClass */ $payloadClass = $payloadType->toClassName(); assert(Validate::implementsInterface($payloadClass, Query::class), sprintf('Unable to deserialize: %s', $payloadClass)); /** @var Query $payload */ $payload = $payloadClass::fromArray($data['payload']); return new static($id, $timestamp, $payload, $metaData); }
public function setUp() { $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $timestamp = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('foo', 'bar'); $metaData = new MetaData(['ip_address' => '127.0.0.1']); $sequence = 0; $this->eventMessage = new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); $this->storedEvent = new StoredEvent($this->eventMessage); }
public function test_that_event_is_dispatched_to_attached_service() { $dispatcher = $this->container->get('event.dispatcher'); $dispatcher->attachService('test.subscriber', TestSubscriber::class); $dispatcher = new FrozenDispatcher($dispatcher); $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $timestamp = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('foo', 'bar'); $metaData = new MetaData(); $sequence = 0; $eventMessage = new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); $dispatcher->dispatch($eventMessage); $this->assertTrue($this->container->get('test.subscriber')->thingHappened()); }
public function test_that_all_events_key_subscribes_to_any_event() { $subscriber = new EventLogSubscriber(); $this->dispatcher->attach($subscriber); $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $timestamp = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('foo', 'bar'); $metaData = new MetaData(); $sequence = 0; $eventMessage = new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); $this->dispatcher->dispatch($eventMessage); $logs = $subscriber->getLogs(); $expected = '{"message_id":"014ec11e-4343-49cd-9b7a-cdd4ced5cedc",' . '"timestamp":"2015-01-01T13:12:31.045234[America/Chicago]",' . '"event_type":"Novuso.Test.Common.Doubles.Domain.Messaging.Event.ThingHappenedEvent",' . '"event_data":{"foo":"foo","bar":"bar"},"meta_data":[],' . '"aggregate_type":"Novuso.Test.Common.Doubles.Domain.Model.Thing",' . '"aggregate_id":"014ec11d-2f21-4d33-a624-5df1196a4f85","sequence":0}'; $this->assertSame($expected, $logs[0]); }
protected function getEventMessages() { $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $dateTime = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('Leeroy Jenkins', 'ljenkins'); $sequence = 4; $eventMessage1 = new DomainEventMessage($this->thingId, $this->thingType, $messageId, $dateTime, $payload, $this->metaData, $sequence); $messageId = MessageId::fromString('014ec11f-317e-475a-9d5f-b8ae6c20aab1'); $dateTime = DateTime::fromString('2015-01-02T10:34:12.672291[America/Chicago]'); $payload = new ThingHappenedEvent('John Smith', 'jsmith'); $sequence = 5; $eventMessage2 = new DomainEventMessage($this->thingId, $this->thingType, $messageId, $dateTime, $payload, $this->metaData, $sequence); $messageId = MessageId::fromString('014ec170-e319-4875-937d-ead12b479682'); $dateTime = DateTime::fromString('2015-01-05T14:03:31.245115[America/Chicago]'); $payload = new ThingHappenedEvent('George Fox', 'gfox'); $sequence = 6; $eventMessage3 = new DomainEventMessage($this->thingId, $this->thingType, $messageId, $dateTime, $payload, $this->metaData, $sequence); return [$eventMessage1, $eventMessage2, $eventMessage3]; }
protected function setUp() { $this->message = new EventMessage(MessageId::fromString('0150deae-68df-40ca-aea1-6b4b06aadfc3'), DateTime::fromString('2015-11-06T15:23:03[America/Chicago]'), UserRegisteredEvent::fromArray(['prefix' => null, 'first_name' => 'James', 'middle_name' => 'D', 'last_name' => 'Smith', 'suffix' => null, 'email' => '*****@*****.**']), MetaData::create(['foo' => 'bar'])); }
protected function setUp() { $this->message = new QueryMessage(MessageId::fromString('0150deae-68df-40ca-aea1-6b4b06aadfc3'), DateTime::fromString('2015-11-06T15:23:03[America/Chicago]'), UserByEmailQuery::fromArray(['email' => '*****@*****.**']), MetaData::create(['foo' => 'bar'])); }
/** * Converts data to an event message * * @return EventMessage */ public function toEventMessage() { $aggregateIdClass = Type::create($this->aggregateIdType)->toClassName(); $aggregateId = $aggregateIdClass::fromString($this->aggregateId); $aggregateType = Type::create($this->aggregateType); $messageId = MessageId::fromString($this->messageId); $timestamp = DateTime::fromString($this->timestamp); $payload = unserialize($this->payload); $metaData = unserialize($this->metaData); $sequence = $this->sequence; $message = new DomainEventMessage($aggregateId, $aggregateType, $messageId, $timestamp, $payload, $metaData, $sequence); return $message; }
protected function getNextEvent() { $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11f-317e-475a-9d5f-b8ae6c20aab1'); $timestamp = DateTime::fromString('2015-01-02T10:34:12.672291[America/Chicago]'); $metaData = new MetaData(); $payload = new ThingHappenedEvent('foo', 'bar'); $sequence = 1; return new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); }
protected function getNextQuery() { $messageId = MessageId::fromString('014ec11f-317e-475a-9d5f-b8ae6c20aab1'); $timestamp = DateTime::fromString('2015-01-02T10:34:12.672291[America/Chicago]'); $metaData = new MetaData(); $payload = new GetThingQuery('014ec11d-2f21-4d33-a624-5df1196a4f85'); return new DomainQueryMessage($messageId, $timestamp, $payload, $metaData); }
protected function getNextCommand() { $messageId = MessageId::fromString('014ec11f-317e-475a-9d5f-b8ae6c20aab1'); $timestamp = DateTime::fromString('2015-01-02T10:34:12.672291[America/Chicago]'); $metaData = new MetaData(); $payload = new MakeThingCommand('foo', 'bar'); return new DomainCommandMessage($messageId, $timestamp, $payload, $metaData); }
protected function setUp() { $this->message = new CommandMessage(MessageId::fromString('0150deae-68df-40ca-aea1-6b4b06aadfc3'), DateTime::fromString('2015-11-06T15:23:03[America/Chicago]'), RegisterUserCommand::fromArray(['prefix' => null, 'first_name' => 'James', 'middle_name' => 'D', 'last_name' => 'Smith', 'suffix' => null, 'email' => '*****@*****.**', 'password' => '$2y$10$NXQfVDFu3.Tyd97bnm4TPO/jdrbgL918xeXM5USqfB.qIHFB6mgjC']), MetaData::create(['foo' => 'bar'])); }