Skip to content

Commit

Permalink
Merge pull request #29 from codeliner/feature/message-factory-defaults
Browse files Browse the repository at this point in the history
Handle defaults
  • Loading branch information
codeliner committed Jul 30, 2015
2 parents bd87e2a + 87116c1 commit 46d0bb5
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
21 changes: 20 additions & 1 deletion src/Messaging/FQCNMessageFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*/
namespace Prooph\Common\Messaging;
use Assert\Assertion;
use Rhumsaa\Uuid\Uuid;

/**
* Class FQCNMessageFactory
Expand Down Expand Up @@ -41,7 +42,25 @@ public function createMessageFromArray($messageName, array $messageData)
));
}

$messageData['message_name'] = $messageName;
if (! isset($messageData['message_name'])) {
$messageData['message_name'] = $messageName;
}

if (! isset($messageData['uuid'])) {
$messageData['uuid'] = Uuid::uuid4();
}

if (! isset($messageData['version'])) {
$messageData['version'] = 1;
}

if (! isset($messageData['created_at'])) {
$messageData['created_at'] = new \DateTimeImmutable();
}

if (! isset($messageData['metadata'])) {
$messageData['metadata'] = [];
}

return $messageName::fromArray($messageData);
}
Expand Down
3 changes: 3 additions & 0 deletions src/Messaging/MessageFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
interface MessageFactory
{
/**
* Message data should contain at least a "payload" key
* but may also contain "uuid", "message_name", "version", "metadata", and "created_at".
*
* @param string $messageName
* @param array $messageData
* @return DomainMessage
Expand Down
19 changes: 17 additions & 2 deletions tests/Messaging/FQCNMessageFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ function it_creates_a_new_message_from_array_and_fqcn()

$command = $this->messageFactory->createMessageFromArray(DoSomething::class, [
'uuid' => $uuid->toString(),
'version' => 1,
'version' => 2,
'payload' => ['command' => 'payload'],
'metadata' => ['command' => 'metadata'],
'created_at' => $createdAt->format(\DateTime::ISO8601),
Expand All @@ -52,11 +52,26 @@ function it_creates_a_new_message_from_array_and_fqcn()
$this->assertEquals(DoSomething::class, $command->messageName());
$this->assertEquals($uuid->toString(), $command->uuid()->toString());
$this->assertEquals($createdAt->format(\DateTime::ISO8601), $command->createdAt()->format(\DateTime::ISO8601));
$this->assertEquals(1, $command->version());
$this->assertEquals(2, $command->version());
$this->assertEquals(['command' => 'payload'], $command->payload());
$this->assertEquals(['command' => 'metadata'], $command->metadata());
}

/**
* @test
*/
function it_creates_a_new_message_with_defaults_from_array_and_fqcn()
{
$command = $this->messageFactory->createMessageFromArray(DoSomething::class, [
'payload' => ['command' => 'payload'],
]);

$this->assertEquals(DoSomething::class, $command->messageName());
$this->assertEquals(1, $command->version());
$this->assertEquals(['command' => 'payload'], $command->payload());
$this->assertEquals([], $command->metadata());
}

/**
* @test
* @expectedException \UnexpectedValueException
Expand Down

0 comments on commit 46d0bb5

Please sign in to comment.