diff --git a/Model/Config/Parser/ParserChain.php b/Model/Config/Parser/ParserChain.php index 5eb6980bcb12d5eb60281da600a5b384c914c9fe..eefbbe8b47234f9274e53718ac9d1d35708008b3 100644 --- a/Model/Config/Parser/ParserChain.php +++ b/Model/Config/Parser/ParserChain.php @@ -39,9 +39,11 @@ class ParserChain implements ConfigParserInterface public function execute(DOMElement $element): array { $data = []; + foreach ($this->parser as $parser) { - $data = array_merge($data, $parser->execute($element)); + $data[] = $parser->execute($element); } - return $data; + + return array_merge(...$data); } } diff --git a/README.md b/README.md index 68eb33453e2b74fb138049fc768c83ed0bfc3bf0..c911fd51f0bb199831da69da97263b058d46b65a 100644 --- a/README.md +++ b/README.md @@ -169,3 +169,7 @@ Feel free to add your ideas there. ## Changelog See [changelog file](CHANGELOG.md) +## Extensions for this extension ;) +For [`magenerds/pagedesigner`](https://github.com/Magenerds/PageDesigner) there is an module, which extends this content +provisioning module: [`techdivision/pagedesigner-content-provisioning`](https://github.com/techdivision/pagedesigner-content-provisioning). + diff --git a/Test/Integration/Model/Config/Parser/Query/FetchMediaFilesChainTest.php b/Test/Integration/Model/Config/Parser/Query/FetchMediaFilesChainTest.php new file mode 100644 index 0000000000000000000000000000000000000000..7688e15c10c2516a779d1b6c72af7b79b61720c9 --- /dev/null +++ b/Test/Integration/Model/Config/Parser/Query/FetchMediaFilesChainTest.php @@ -0,0 +1,66 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Test\Integration\Model\Config\Parser\Query; + +use Firegento\ContentProvisioning\Api\MediaFilesParserInterface; +use Firegento\ContentProvisioning\Model\Config\Parser\Query\FetchMediaFilesChain; +use PHPUnit\Framework\MockObject\MockObject; + +class FetchMediaFilesChainTest extends \PHPUnit\Framework\TestCase +{ + /** + * @var FetchMediaFilesChain + */ + private $chain; + + /** + * @var MediaFilesParserInterface|MockObject + */ + private $parser1; + + /** + * @var MediaFilesParserInterface|MockObject + */ + private $parser2; + + protected function setUp() + { + $this->parser1 = self::getMockBuilder(MediaFilesParserInterface::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->parser2 = self::getMockBuilder(MediaFilesParserInterface::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->chain = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->create(FetchMediaFilesChain::class, ['parsers' => [ + $this->parser1, + $this->parser2, + ]]); + } + + public function testMergingData() + { + $this->parser1->method('execute')->willReturn([ + 'path/to/file1.png', + 'path/to/file2.png', + 'file3.png', + ]); + $this->parser2->method('execute')->willReturn([ + 'file3.png', + 'some/other/path.jpg', + ]); + + $result = $this->chain->execute(''); + + $this->assertSame([ + 'path/to/file1.png', + 'path/to/file2.png', + 'file3.png', + 'file3.png', + 'some/other/path.jpg', + ], $result); + } +}