From 09c087a9205a30d095127adac2df441d36849ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Mon, 21 Sep 2026 14:57:43 +0200 Subject: [PATCH 1/2] IBX-12533: Fixed JsonToArrayTransformer rejecting empty string values --- .../Transformer/JsonToArrayTransformer.php | 2 +- .../JsonToArrayTransformerTest.php | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 tests/lib/Form/Transformer/JsonToArrayTransformerTest.php 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..4350f9c6 --- /dev/null +++ b/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php @@ -0,0 +1,73 @@ +transform(null)); + } + + public function testTransformArray(): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame('{"foo":"bar"}', $transformer->transform(['foo' => 'bar'])); + } + + public function testTransformEmptyArray(): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame('{}', $transformer->transform([])); + } + + public function testReverseTransformNull(): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame([], $transformer->reverseTransform(null)); + } + + public function testReverseTransformEmptyString(): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame([], $transformer->reverseTransform('')); + } + + public function testReverseTransformJsonString(): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame(['foo' => 'bar'], $transformer->reverseTransform('{"foo":"bar"}')); + } + + public function testReverseTransformZeroString(): void + { + $transformer = new JsonToArrayTransformer(); + + self::assertSame(0, $transformer->reverseTransform('0')); + } + + public function testReverseTransformInvalidJsonThrowsException(): void + { + $transformer = new JsonToArrayTransformer(); + + $this->expectException(TransformationFailedException::class); + $transformer->reverseTransform('{invalid}'); + } +} From b30165c4bfc29dd860ba862c297609f4d7f6aff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 23 Sep 2026 10:07:17 +0200 Subject: [PATCH 2/2] Corrected CS --- .../JsonToArrayTransformerTest.php | 62 +++++++++---------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php b/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php index 4350f9c6..38c1a8cc 100644 --- a/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php +++ b/tests/lib/Form/Transformer/JsonToArrayTransformerTest.php @@ -12,55 +12,49 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; -class JsonToArrayTransformerTest extends TestCase +final class JsonToArrayTransformerTest extends TestCase { - public function testTransformNull(): void + /** + * @return iterable + */ + public static function provideDataForTestTransform(): iterable { - $transformer = new JsonToArrayTransformer(); - - self::assertSame('', $transformer->transform(null)); - } - - public function testTransformArray(): void - { - $transformer = new JsonToArrayTransformer(); - - self::assertSame('{"foo":"bar"}', $transformer->transform(['foo' => 'bar'])); + yield 'null value' => [null, '']; + yield 'associative array' => [['foo' => 'bar'], '{"foo":"bar"}']; + yield 'empty array' => [[], '{}']; } - public function testTransformEmptyArray(): void + /** + * @param string[]|null $value + * @dataProvider provideDataForTestTransform + */ + public function testTransform(?array $value, string $expected): void { $transformer = new JsonToArrayTransformer(); - self::assertSame('{}', $transformer->transform([])); + self::assertSame($expected, $transformer->transform($value)); } - public function testReverseTransformNull(): void + /** + * @return iterable + */ + public static function provideDataForTestReverseTransform(): iterable { - $transformer = new JsonToArrayTransformer(); - - self::assertSame([], $transformer->reverseTransform(null)); - } - - public function testReverseTransformEmptyString(): void - { - $transformer = new JsonToArrayTransformer(); - - self::assertSame([], $transformer->reverseTransform('')); - } - - public function testReverseTransformJsonString(): void - { - $transformer = new JsonToArrayTransformer(); - - self::assertSame(['foo' => 'bar'], $transformer->reverseTransform('{"foo":"bar"}')); + yield 'null value' => [null, []]; + yield 'empty string' => ['', []]; + yield 'JSON string' => ['{"foo":"bar"}', ['foo' => 'bar']]; + yield 'zero string' => ['0', 0]; } - public function testReverseTransformZeroString(): void + /** + * @param string[]|int $expected + * @dataProvider provideDataForTestReverseTransform + */ + public function testReverseTransform(?string $value, $expected): void { $transformer = new JsonToArrayTransformer(); - self::assertSame(0, $transformer->reverseTransform('0')); + self::assertSame($expected, $transformer->reverseTransform($value)); } public function testReverseTransformInvalidJsonThrowsException(): void