diff --git a/src/Component/ComponentItemFactory.php b/src/Component/ComponentItemFactory.php index d5b1030..026189e 100644 --- a/src/Component/ComponentItemFactory.php +++ b/src/Component/ComponentItemFactory.php @@ -127,7 +127,7 @@ private function createVariationParameters(array $parameters, array $variation): foreach ($parameters as $name => $type) { if (\is_array($type)) { - $paramValue = $this->createVariationParameters($type, $variation[$name] ?? []); + $paramValue[$name] = $this->createVariationParameters($type, $variation[$name] ?? []); } else { $paramValue = $this->faker->getFakeData([$name => $type], $variation[$name] ?? null); } diff --git a/src/Component/Data/Faker.php b/src/Component/Data/Faker.php index 482198a..2d2f517 100644 --- a/src/Component/Data/Faker.php +++ b/src/Component/Data/Faker.php @@ -46,7 +46,7 @@ private function createFakeData(array $params, mixed $variation): array if (!\array_key_exists($name, $result)) { // set from variation - $result[$name] = $variation; + $result[$name] = $variation[$name] ?? $variation; } } diff --git a/src/Component/Data/Generator/NullGenerator.php b/src/Component/Data/Generator/NullGenerator.php index a723709..8c9687f 100644 --- a/src/Component/Data/Generator/NullGenerator.php +++ b/src/Component/Data/Generator/NullGenerator.php @@ -10,7 +10,7 @@ class NullGenerator implements GeneratorInterface { public function supports(string $type, mixed $context = null): bool { - return empty($context); + return null === $context || '' === $context; } public function generate(string $type, mixed $context = null): null diff --git a/tests/Functional/Service/ComponentItemFactoryTest.php b/tests/Functional/Service/ComponentItemFactoryTest.php index e6b8a4e..5fd9834 100644 --- a/tests/Functional/Service/ComponentItemFactoryTest.php +++ b/tests/Functional/Service/ComponentItemFactoryTest.php @@ -242,6 +242,43 @@ public function testCreateForParamWithOptionalVariationValue(): void self::assertNull($variations['variation1']['optionalEmpty']); } + public function testCreateForArrayParameter(): void + { + $data = [ + 'name' => 'TestComponent', + 'title' => 'Test title', + 'description' => 'description', + 'category' => 'MainCategory', + 'path' => 'path/to/component', + 'renderPath' => 'path/to/component', + 'parameters' => [ + 'arrayParam' => [ + 'param1' => 'String', + 'param2' => 'Boolean', + ], + ], + 'variations' => [ + 'variation1' => [ + 'arrayParam' => [ + 'param1' => 'Some cool hipster text', + 'param2' => false, + ], + ], + ], + ]; + + /** @var ComponentItemFactory $factory */ + $factory = self::getContainer()->get('twig_doc.service.component_factory'); + + $component = $factory->create($data); + $variations = $component->getVariations(); + + self::assertIsArray($variations); + self::assertArrayHasKey('variation1', $variations); + self::assertEquals('Some cool hipster text', $variations['variation1']['arrayParam']['param1']); + self::assertFalse($variations['variation1']['arrayParam']['param2']); + } + public static function getInvalidComponentConfigurationTestCases(): iterable { yield [