Skip to content

Commit

Permalink
Merge pull request #10 from barryosull/fix/nullable-composite-bug
Browse files Browse the repository at this point in the history
Fix for the valueobjects issue
  • Loading branch information
Barry O Sullivan committed Nov 10, 2017
2 parents 1b410c7 + 8e9a80f commit ac99f11
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 9 deletions.
22 changes: 13 additions & 9 deletions src/Serializer/Serializer/Composite.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ public function serialize(AbstractComposite $object)
$properties = $this->reflector->get_properties($object);

$serialized = [];

if ($this->all_properties_are_null($object, $properties)) {
return null;
}

foreach ($properties as $parameter) {
$name = $parameter->getName();
$value_object = $parameter->getValue($object);
Expand All @@ -30,18 +35,17 @@ public function serialize(AbstractComposite $object)
}
}

if ($this->all_properties_are_null($serialized)) {
return null;
}

return $serialized;
}

private function all_properties_are_null($serialized)
private function all_properties_are_null($object, $properties)
{
$no_nulls = array_filter($serialized, function($var){
return !is_null($var);
} );
return count($no_nulls) == 0;
foreach ($properties as $parameter) {
$value_object = $parameter->getValue($object);
if ($value_object) {
return false;
}
}
return true;
}
}
8 changes: 8 additions & 0 deletions src/ValueObject/AcceptAnything.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php namespace EventSourced\ValueObject\ValueObject;

use EventSourced\ValueObject\ValueObject\Type\AbstractSingleValue;

class AcceptAnything extends AbstractSingleValue
{

}
15 changes: 15 additions & 0 deletions src/ValueObject/NonNullableComposite.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php namespace EventSourced\ValueObject\ValueObject;

use EventSourced\ValueObject\ValueObject\Type\AbstractComposite;

class NonNullableComposite extends AbstractComposite
{
protected $property_1;
protected $property_2;

public function __construct(AcceptAnything $property_1, AcceptAnything $property_2)
{
$this->property_1 = $property_1;
$this->property_2 = $property_2;
}
}
30 changes: 30 additions & 0 deletions test/Deserializer/NonNullableCompositesTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

use EventSourced\ValueObject\Reflector\Reflector;
use EventSourced\ValueObject\Deserializer;
use EventSourced\ValueObject\ValueObject\NonNullableComposite;

class NonNullableCompositesTest extends \PHPUnit_Framework_TestCase
{
private $deserializer;

public function setUp()
{
$reflector = new Reflector();
$extensions = new EventSourced\ValueObject\Extensions\ExtensionRepository();
$this->deserializer = new Deserializer\Deserializer($reflector, $extensions);
parent::setUp();
}

public function test_deserialises_into_objects()
{
$serialized = [
'property_1' => null,
'property_2' => null
];

$vo = $this->deserializer->deserialize(NonNullableComposite::class, $serialized);

$this->assertNotEmpty($vo);
}
}
33 changes: 33 additions & 0 deletions test/Serializer/NonNullableCompositeTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

use EventSourced\ValueObject\Reflector\Reflector;
use EventSourced\ValueObject\Serializer;
use EventSourced\ValueObject\ValueObject\NonNullableComposite;
use EventSourced\ValueObject\ValueObject\AcceptAnything;

class NonNullableCompositeTest extends \PHPUnit_Framework_TestCase
{
private $serializer;

public function setUp()
{
$reflector = new Reflector();
$extensions = new EventSourced\ValueObject\Extensions\ExtensionRepository();
$this->serializer = new Serializer\Serializer($reflector, $extensions);
parent::setUp();
}

public function test_deserialises_into_objects()
{
$vo = new NonNullableComposite(new AcceptAnything(null), new AcceptAnything(null));

$actual = $this->serializer->serialize($vo);

$expected = [
'property_1' => null,
'property_2' => null
];

$this->assertEquals($expected, $actual);
}
}

0 comments on commit ac99f11

Please sign in to comment.