diff --git a/src/Reflection/Types/PropertyTypeFactory.php b/src/Reflection/Types/PropertyTypeFactory.php index 9b9931b..ecc2b4d 100644 --- a/src/Reflection/Types/PropertyTypeFactory.php +++ b/src/Reflection/Types/PropertyTypeFactory.php @@ -88,7 +88,7 @@ public static function create(RuntimeReflectionProperty $property) return new TransformableType( $type, - $isScalar, + $isNullable, ); } } diff --git a/tests/Integration/ClassTransformerFromArrayTest.php b/tests/Integration/ClassTransformerFromArrayTest.php index c0583fa..b8daddf 100644 --- a/tests/Integration/ClassTransformerFromArrayTest.php +++ b/tests/Integration/ClassTransformerFromArrayTest.php @@ -18,6 +18,7 @@ use Tests\Integration\DTO\UserEmptyTypeDTO; use ClassTransformer\Exceptions\ClassNotFoundException; +use Tests\Integration\DTO\UserNullableArrayDTO; use function count; /** @@ -221,4 +222,28 @@ public function testEmptyTypeObject(): void self::assertEquals($data['email'], $userDTO->email); self::assertEquals($data['balance'], $userDTO->balance); } + + public function testNullableTransformableProperty(): void + { + $data = [ + 'user' => null, + ]; + + $userNullableDTO = Hydrator::init()->create(UserNullableArrayDTO::class, $data); + + self::assertInstanceOf(UserNullableArrayDTO::class, $userNullableDTO); + self::assertNull($userNullableDTO->user); + } + + public function testNotNullableTransformableProperty(): void + { + $data = [ + 'user' => $this->getBaseArrayData(), + ]; + + $userNullableDTO = Hydrator::init()->create(UserNullableArrayDTO::class, $data); + + self::assertInstanceOf(UserNullableArrayDTO::class, $userNullableDTO); + self::assertInstanceOf(UserDTO::class, $userNullableDTO->user); + } } diff --git a/tests/Integration/DTO/UserNullableArrayDTO.php b/tests/Integration/DTO/UserNullableArrayDTO.php new file mode 100644 index 0000000..3b266d5 --- /dev/null +++ b/tests/Integration/DTO/UserNullableArrayDTO.php @@ -0,0 +1,9 @@ +castAttribute(null); $this->assertNull($value); + $caster = new ValueCasting(new RuntimeReflectionProperty(new \ReflectionProperty(TypesDto::class, 'nullableObject'))); + $value = $caster->castAttribute(null); + $this->assertNull($value); + } public function testCreateArrayProperty(): void