diff --git a/src/DataTransferObject.php b/src/DataTransferObject.php index dff82f8c..d1396ac2 100755 --- a/src/DataTransferObject.php +++ b/src/DataTransferObject.php @@ -20,12 +20,12 @@ abstract class DataTransferObject * * @return \Spatie\DataTransferObject\ImmutableDataTransferObject|static */ - public static function immutable(array $parameters): ImmutableDataTransferObject + public static function immutable(array $parameters = []): ImmutableDataTransferObject { return new ImmutableDataTransferObject(new static($parameters)); } - public function __construct(array $parameters) + public function __construct(array $parameters = []) { $class = new ReflectionClass(static::class); diff --git a/tests/DataTransferTransferObjectTest.php b/tests/DataTransferObjectTest.php similarity index 96% rename from tests/DataTransferTransferObjectTest.php rename to tests/DataTransferObjectTest.php index e404ab45..db08ccad 100644 --- a/tests/DataTransferTransferObjectTest.php +++ b/tests/DataTransferObjectTest.php @@ -369,4 +369,18 @@ public function empty_dto_objects_can_be_cast_using_arrays() $this->assertInstanceOf(EmptyChild::class, $object->child); } + + /** @test */ + public function empty_constructor_is_supported() + { + $valueObject = new class() extends DataTransferObject { + /** @var string */ + public $foo = 'abc'; + + /** @var bool|null */ + public $bar; + }; + + $this->assertEquals(['foo' => 'abc', 'bar' => null], $valueObject->all()); + } } diff --git a/tests/ImmutableTest.php b/tests/ImmutableTest.php index 2b375e06..2d4f4a51 100644 --- a/tests/ImmutableTest.php +++ b/tests/ImmutableTest.php @@ -4,6 +4,7 @@ use Spatie\DataTransferObject\DataTransferObjectError; use Spatie\DataTransferObject\Tests\TestClasses\TestDataTransferObject; +use Spatie\DataTransferObject\Tests\TestClasses\NullableTestDataTransferObject; class ImmutableTest extends TestCase { @@ -30,4 +31,12 @@ public function method_calls_are_proxied() $this->assertEquals(['testProperty' => 1], $dto->toArray()); } + + /** @test */ + public function passing_parameters_is_not_required() + { + $dto = NullableTestDataTransferObject::immutable(); + + $this->assertEquals(['foo' => 'abc', 'bar' => null], $dto->toArray()); + } } diff --git a/tests/TestClasses/NullableTestDataTransferObject.php b/tests/TestClasses/NullableTestDataTransferObject.php new file mode 100644 index 00000000..4c163015 --- /dev/null +++ b/tests/TestClasses/NullableTestDataTransferObject.php @@ -0,0 +1,16 @@ +