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/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); + } +}