/**
  * @param array $metadata
  * @return GenericCommandMessage
  */
 public function withMetaData(array $metadata = [])
 {
     if ($this->metaData->isEqualTo($metadata)) {
         return $this;
     }
     return new GenericCommandMessage($this->payload, new MetaData($metadata), $this->id, $this->commandName);
 }
 public function testRegisterCallbackInvokedWithAllRegisteredEvents()
 {
     $container = new EventContainer(Uuid::uuid1()->toString());
     $container->addEvent(MetaData::emptyInstance(), new Event());
     $this->assertFalse(current($container->getEventList())->getMetaData()->has("key"));
     $container->addEventRegistrationCallback(new TestEventRegistrationCallback());
     $this->assertEquals("value", current($container->getEventList())->getMetadata()->get("key"));
 }
 public function testProvideAuditData()
 {
     $metaData = MetaData::emptyInstance();
     $message = new GenericCommandMessage(new \stdClass(), $metaData);
     $provider = new CommandMetaDataProvider();
     $actual = $provider->provideAuditDataFor($message);
     $this->assertSame($metaData->all(), $actual);
 }
 /**
  * @param mixed $payload
  * @param MetaData $metadata
  * @param string $id
  */
 public function __construct($payload, MetaData $metadata = null, $id = null)
 {
     if (!is_object($payload)) {
         throw new \InvalidArgumentException("Payload needs to be an object.");
     }
     $this->id = isset($id) ? $id : Uuid::uuid1()->toString();
     $this->metadata = isset($metadata) ? $metadata : MetaData::emptyInstance();
     $this->payload = $payload;
 }
 /**
  * @param mixed $payload
  * @param MetaData $metaData
  */
 public function apply($payload, MetaData $metaData = null)
 {
     $metaData = isset($metaData) ? $metaData : MetaData::emptyInstance();
     if (null === $this->getIdentifier()) {
         if ($this->getUncommittedEventCount() > 0 || $this->getVersion() !== null) {
             throw new \RuntimeException("The Aggregate Identifier has not been initialized. " . "It must be initialized at the latest when the " . "first event is applied.");
         }
         $this->handleRecursively(new GenericDomainEventMessage(null, 0, $payload, $metaData));
         $this->registerEvent($payload, $metaData);
     } else {
         $event = $this->registerEvent($payload, $metaData);
         $this->handleRecursively($event);
     }
 }
 public function testConstructor()
 {
     $payload = new \stdClass();
     $message1 = new GenericCommandMessage($payload);
     $metaDataMap = array("key" => "value");
     $metaData = new MetaData($metaDataMap);
     $message2 = new GenericCommandMessage($payload, $metaData);
     $this->assertSame(MetaData::emptyInstance(), $message1->getMetaData());
     $this->assertEquals('stdClass', get_class($message1->getPayload()));
     $this->assertEquals('stdClass', $message1->getPayloadType());
     $this->assertSame($metaData, $message2->getMetaData());
     $this->assertEquals('stdClass', get_class($message2->getPayload()));
     $this->assertEquals('stdClass', $message2->getPayloadType());
     $this->assertFalse($message1->getIdentifier() === $message2->getIdentifier());
 }
 public function testConstructor()
 {
     $payload = new \stdClass();
     $message1 = new GenericEventMessage($payload);
     $metaData = new MetaData(['key' => 'value']);
     $message2 = new GenericEventMessage($payload, $metaData);
     $this->assertSame(MetaData::emptyInstance(), $message1->getMetaData());
     $this->assertEquals('stdClass', get_class($message1->getPayload()));
     $this->assertEquals('stdClass', $message1->getPayloadType());
     $this->assertSame($payload, $message1->getPayload());
     $this->assertSame($metaData, $message2->getMetaData());
     $this->assertEquals('stdClass', get_class($message2->getPayload()));
     $this->assertEquals('stdClass', $message2->getPayloadType());
     $this->assertEquals($payload, $message2->getPayload());
     $this->assertFalse($message1->getIdentifier() === $message2->getIdentifier());
 }
 /**
  * @covers Governor\Framework\Domain\GenericDomainEventMessage::__construct
  */
 public function testConstructor()
 {
     $payload = new Payload();
     $seqNo = 0;
     $id = Uuid::uuid1();
     $message1 = new GenericDomainEventMessage($id, $seqNo, $payload, MetaData::emptyInstance());
     $metaData = new Metadata(['key' => 'value']);
     $message2 = new GenericDomainEventMessage($id, $seqNo, $payload, $metaData);
     $this->assertSame($id, $message1->getAggregateIdentifier());
     $this->assertEquals($seqNo, $message1->getScn());
     $this->assertSame(MetaData::emptyInstance(), $message1->getMetaData());
     $this->assertEquals(get_class($payload), get_class($message1->getPayload()));
     $this->assertEquals(get_class($payload), $message1->getPayloadType());
     $this->assertSame($id, $message2->getAggregateIdentifier());
     $this->assertEquals($seqNo, $message2->getScn());
     $this->assertSame($metaData, $message2->getMetaData());
     $this->assertEquals(get_class($payload), get_class($message2->getPayload()));
     $this->assertEquals(get_class($payload), $message2->getPayloadType());
     $this->assertNotEquals($message1->getIdentifier(), $message2->getIdentifier());
 }
 public function createSnapshotEvent()
 {
     return new GenericDomainEventMessage($this->getIdentifier(), $this->getVersion(), new StubStateChangedEvent(), MetaData::emptyInstance());
 }
 /**
  * @expectedException \Governor\Framework\CommandHandling\NoHandlerForCommandException
  */
 public function testDispatchCommand_NoHandlerSubscribed()
 {
     $this->commandBus->dispatch(new GenericCommandMessage(new TestCommand('hi'), MetaData::emptyInstance()));
 }
 protected function registerEvent($payload, MetaData $metaData = null)
 {
     $meta = null === $metaData ? MetaData::emptyInstance() : $metaData;
     return $this->getEventContainer()->addEvent($meta, $payload);
 }
 private function domainEvent(StubDomainEvent $stubDomainEvent)
 {
     return new GenericDomainEventMessage(Uuid::uuid1(), 0, $stubDomainEvent, MetaData::emptyInstance());
 }
 public function testLoadAndSaveWithoutConflictingChanges()
 {
     $conflictResolver = $this->getMock('Governor\\Framework\\EventSourcing\\ConflictResolverInterface');
     $identifier = Uuid::uuid1()->toString();
     $event2 = new GenericDomainEventMessage($identifier, 2, new \stdClass(), MetaData::emptyInstance());
     $event3 = new GenericDomainEventMessage($identifier, 3, new \stdClass(), MetaData::emptyInstance());
     $this->mockEventStore->expects($this->once())->method('readEvents')->with($this->identicalTo("test"), $this->identicalTo($identifier))->will($this->returnValue(new SimpleDomainEventStream(array(new GenericDomainEventMessage($identifier, 1, new \stdClass()), $event2, $event3))));
     $this->testSubject->setConflictResolver($conflictResolver);
     $actual = $this->testSubject->load($identifier, 3);
     $conflictResolver->expects($this->never())->method('resolveConflicts');
     $actual->apply(new StubDomainEvent());
     $conflictResolver->expects($this->never())->method('resolveConflicts');
     CurrentUnitOfWork::commit();
 }
Example #14
0
 /**
  * @covers Governor\Framework\Domain\MetaData::emptyInstance
  * @covers Governor\Framework\Domain\MetaData::isEmpty
  */
 public function testEmptyInstance()
 {
     $metaData1 = MetaData::emptyInstance();
     $metaData2 = MetaData::emptyInstance();
     $this->assertEquals($metaData1, $metaData2);
     $this->assertTrue($metaData1->isEmpty());
 }