diff --git a/src/lib/Form/Transformer/JsonToArrayTransformer.php b/src/lib/Form/Transformer/JsonToArrayTransformer.php index 9ae6111a..07649c25 100644 --- a/src/lib/Form/Transformer/JsonToArrayTransformer.php +++ b/src/lib/Form/Transformer/JsonToArrayTransformer.php @@ -34,7 +34,7 @@ public function transform($value) public function reverseTransform($value) { - if ($value === null) { + if ($value === null || $value === '') { return []; } diff --git a/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php b/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php new file mode 100644 index 00000000..38c1a8cc --- /dev/null +++ b/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php @@ -0,0 +1,67 @@ + + */ + public static function provideDataForTestTransform(): iterable + { + yield 'null value' => [null, '']; + yield 'associative array' => [['foo' => 'bar'], '{"foo":"bar"}']; + yield 'empty array' => [[], '{}']; + } + + /** + * @param string[]|null $value + * @dataProvider provideDataForTestTransform + */ + public function testTransform(?array $value, string $expected): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame($expected, $transformer->transform($value)); + } + + /** + * @return iterable + */ + public static function provideDataForTestReverseTransform(): iterable + { + yield 'null value' => [null, []]; + yield 'empty string' => ['', []]; + yield 'JSON string' => ['{"foo":"bar"}', ['foo' => 'bar']]; + yield 'zero string' => ['0', 0]; + } + + /** + * @param string[]|int $expected + * @dataProvider provideDataForTestReverseTransform + */ + public function testReverseTransform(?string $value, $expected): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame($expected, $transformer->reverseTransform($value)); + } + + public function testReverseTransformInvalidJsonThrowsException(): void + { + $transformer = new JsonToArrayTransformer(); + + $this->expectException(TransformationFailedException::class); + $transformer->reverseTransform('{invalid}'); + } +}