diff --git a/src/bundle/DependencyInjection/Configuration/Parser/SubtreeOperations.php b/src/bundle/DependencyInjection/Configuration/Parser/SubtreeOperations.php index 734e8db113..066539d54d 100644 --- a/src/bundle/DependencyInjection/Configuration/Parser/SubtreeOperations.php +++ b/src/bundle/DependencyInjection/Configuration/Parser/SubtreeOperations.php @@ -17,7 +17,7 @@ * * Example configuration: * ```yaml - * ezpublish: + * ibexa: * system: * default: # configuration per siteaccess or siteaccess group * subtree_operations: @@ -27,37 +27,20 @@ */ class SubtreeOperations extends AbstractParser { - /** - * {@inheritdoc} - */ - public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerInterface $contextualizer) + public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerInterface $contextualizer): void { - if (empty($scopeSettings['subtree_operations'])) { + if (!isset($scopeSettings['subtree_operations']['copy_subtree']['limit'])) { return; } - $settings = $scopeSettings['subtree_operations']; - $nodes = ['copy_subtree' => ['limit']]; - - foreach ($nodes as $node => $keys) { - foreach ($keys as $key) { - if (!isset($settings[$node][$key]) || empty($settings[$node][$key])) { - continue; - } - - $contextualizer->setContextualParameter( - sprintf('subtree_operations.%s.%s', $node, $key), - $currentScope, - $settings[$node][$key] - ); - } - } + $contextualizer->setContextualParameter( + 'subtree_operations.copy_subtree.limit', + $currentScope, + $scopeSettings['subtree_operations']['copy_subtree']['limit'] + ); } - /** - * {@inheritdoc} - */ - public function addSemanticConfig(NodeBuilder $nodeBuilder) + public function addSemanticConfig(NodeBuilder $nodeBuilder): void { $nodeBuilder ->arrayNode('subtree_operations') diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php new file mode 100644 index 0000000000..5a7337f0e2 --- /dev/null +++ b/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php @@ -0,0 +1,80 @@ + + */ + public function getExpectedCopySubtreeLimit(): iterable + { + yield 'default = 100' => [100]; + yield 'no limit = -1' => [-1]; + yield 'disabled = 0' => [0]; + } + + protected function setUp(): void + { + $this->parser = new SubtreeOperations(); + $this->contextualizer = $this->createMock(ContextualizerInterface::class); + } + + /** + * @dataProvider getExpectedCopySubtreeLimit + */ + public function testCopySubtreeLimit(int $expectedCopySubtreeLimit): void + { + $scopeSettings = [ + 'subtree_operations' => [ + 'copy_subtree' => [ + 'limit' => $expectedCopySubtreeLimit, + ], + ], + ]; + $currentScope = 'admin_group'; + + $this->contextualizer + ->expects(self::once()) + ->method('setContextualParameter') + ->with( + 'subtree_operations.copy_subtree.limit', + $currentScope, + $expectedCopySubtreeLimit + ); + + $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); + } + + public function testCopySubtreeLimitNotSet(): void + { + $scopeSettings = [ + 'subtree_operations' => null, + ]; + $currentScope = 'admin_group'; + + $this->contextualizer + ->expects(self::never()) + ->method('setContextualParameter'); + + $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); + } +}