/**
  * @test
  */
 public function event_is_converted_to_stream_data()
 {
     $uuid = new UUID();
     $event = new WritableEvent($uuid, 'Foo', ['bar']);
     $streamData = ['eventId' => $uuid->toNative(), 'eventType' => 'Foo', 'data' => ['bar'], 'metadata' => []];
     $this->assertEquals($streamData, $event->toStreamData());
 }
 public function testEventStoreCanCreateAStreamAndOpenIt()
 {
     $es = $this->getEventStore();
     $event = WritableEvent::newInstance('SomethingHappened', ['foo' => 'bar']);
     $streamName = 'StreamName';
     $es->writeToStream($streamName, $event);
     $es->openStreamFeed($streamName);
 }
 /**
  * @param DomainEvent $event
  * @return WritableEvent
  */
 public function toWritableEvent(DomainEvent $event)
 {
     $serializedEvent = $this->arraySerializer->serialize($event);
     $eventType = $serializedEvent['messageType'];
     $data = $serializedEvent['payload'];
     unset($data['aggregateId']);
     unset($data['version']);
     return WritableEvent::newInstance($eventType, $data);
 }
/**
 * @param  int    $length
 * @param  array  $metadata
 * @return string
 */
function prepare_test_stream(EventStore $es, $length = 1, $metadata = [])
{
    $streamName = uniqid();
    $events = [];
    for ($i = 0; $i < $length; ++$i) {
        $events[] = WritableEvent::newInstance('Foo', ['foo' => 'bar'], $metadata);
    }
    $collection = new WritableEventCollection($events);
    $es->writeToStream($streamName, $collection);
    return $streamName;
}
 /**
  * @inheritDoc
  */
 public function append($id, DomainEventStreamInterface $eventStream)
 {
     $events = [];
     $playhead = null;
     foreach ($eventStream as $message) {
         $payload = $message->getPayload();
         if ($playhead === null) {
             $playhead = $message->getPlayhead();
         }
         $events[] = WritableEvent::newInstance(get_class($payload), array_merge($payload->serialize(), ['broadway_recorded_on' => $message->getRecordedOn()->toString()]), $message->getMetadata()->serialize());
     }
     try {
         $this->eventStore->writeToStream($id, new WritableEventCollection($events), $playhead - 1);
     } catch (WrongExpectedVersionException $e) {
         throw new BroadwayOptimisticLockException($e->getMessage());
     }
 }
 /**
  * @param object|IsEventSourced $aggregateRoot
  *
  * @return array
  */
 private function getWriteableEventsFromAggregate($aggregateRoot)
 {
     $domainEvents = $aggregateRoot->extractRecordedEvents();
     $eventsArray = [];
     foreach ($domainEvents as $event) {
         $metadata = [];
         if ($this->metadataStore) {
             $metadata = $this->metadataStore->metadata($event);
         }
         $eventsArray[] = WritableEvent::newInstance(get_class($event), $this->eventSerializer->serialize($event), $metadata);
     }
     return $eventsArray;
 }