diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductImageGroupPageDataExpander.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductImageGroupPageDataExpander.php new file mode 100644 index 0000000..c5e108f --- /dev/null +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductImageGroupPageDataExpander.php @@ -0,0 +1,80 @@ +urlValidator = $urlValidator; + } + + /** + * {@inheritDoc} + * + * @api + * + * @param array $productData + * @param \Generated\Shared\Transfer\ProductPageSearchTransfer $productAbstractPageSearchTransfer + * + * @return \Generated\Shared\Transfer\ProductPageSearchTransfer + */ + public function expandProductPageData(array $productData, ProductPageSearchTransfer $productAbstractPageSearchTransfer): ProductPageSearchTransfer + { + /** @var \Generated\Shared\Transfer\ProductPayloadTransfer $productPayloadTransfer */ + $productPayloadTransfer = $productData[ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA]; + $imageSets = $productPayloadTransfer->getImages(); + /** @var array<\Orm\Zed\ProductImage\Persistence\SpyProductImageSet> $imageSetsByLocale */ + $imageSetsByLocale = $imageSets[$productData['fk_locale']] ?? []; + + $productImages = $productAbstractPageSearchTransfer->getProductImages(); + + $regrouped = []; + + foreach ($imageSetsByLocale as $imageSet) { + foreach ($productImages as $productImage) { + if ($productImage['fk_product_image_set'] === $imageSet->getIdProductImageSet()) { + $key = $imageSet->getName(); + $regrouped[$key === null || $key === '' ? static::IMAGE_GROUP_NAME_EMPTY : $key][] = $this->validateProductImageUrls($productImage); + } + } + } + + return $productAbstractPageSearchTransfer->setGroupedProductImages($regrouped); + } + + /** + * @param array $productImage + * + * @return array + */ + protected function validateProductImageUrls(array $productImage): array + { + foreach ($productImage as $key => $data) { + if ($data !== null && str_starts_with($key, static::EXTERNAL_URL_PREFIX)) { + $productImage[$key] = $this->urlValidator->isValid($data) ? $data : null; + } + } + + return $productImage; + } +} diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductPageDataExpanderInterface.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductPageDataExpanderInterface.php new file mode 100644 index 0000000..176be47 --- /dev/null +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductPageDataExpanderInterface.php @@ -0,0 +1,20 @@ + $productData + * @param \Generated\Shared\Transfer\ProductPageSearchTransfer $productAbstractPageSearchTransfer + * + * @return \Generated\Shared\Transfer\ProductPageSearchTransfer + */ + public function expandProductPageData(array $productData, ProductPageSearchTransfer $productAbstractPageSearchTransfer): ProductPageSearchTransfer; +} diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchBusinessFactory.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchBusinessFactory.php new file mode 100644 index 0000000..f406ab8 --- /dev/null +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchBusinessFactory.php @@ -0,0 +1,28 @@ +createUrlValidator()); + } + + /** + * @return \FondOfImpala\Zed\ProductImageGroupingProductPageSearch\Business\Validator\UrlValidatorInterface + */ + public function createUrlValidator(): UrlValidatorInterface + { + return new UrlValidator(); + } +} diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchFacade.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchFacade.php new file mode 100644 index 0000000..be2c5d3 --- /dev/null +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchFacade.php @@ -0,0 +1,27 @@ + $productData + * @param \Generated\Shared\Transfer\ProductPageSearchTransfer $productAbstractPageSearchTransfer + * + * @return \Generated\Shared\Transfer\ProductPageSearchTransfer + */ + public function groupProductImageData(array $productData, ProductPageSearchTransfer $productAbstractPageSearchTransfer): ProductPageSearchTransfer + { + return $this->getFactory()->createProductImageGroupPageDataExpander()->expandProductPageData($productData, $productAbstractPageSearchTransfer); + } +} diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchFacadeInterface.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchFacadeInterface.php new file mode 100644 index 0000000..885622f --- /dev/null +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/ProductImageGroupingProductPageSearchFacadeInterface.php @@ -0,0 +1,20 @@ + $productData + * @param \Generated\Shared\Transfer\ProductPageSearchTransfer $productAbstractPageSearchTransfer + * + * @return \Generated\Shared\Transfer\ProductPageSearchTransfer + */ + public function groupProductImageData(array $productData, ProductPageSearchTransfer $productAbstractPageSearchTransfer): ProductPageSearchTransfer; +} diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Validator/UrlValidator.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Validator/UrlValidator.php new file mode 100644 index 0000000..27463a4 --- /dev/null +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Validator/UrlValidator.php @@ -0,0 +1,21 @@ +addSearchResultData($pageMapTransfer, static::KEY, $productData[static::VALUE]); return $pageMapTransfer; diff --git a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPlugin.php b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPlugin.php index e0b2043..a11f1bb 100644 --- a/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPlugin.php +++ b/src/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPlugin.php @@ -3,23 +3,14 @@ namespace FondOfImpala\Zed\ProductImageGroupingProductPageSearch\Communication\Plugin\ProductPageSearch; use Generated\Shared\Transfer\ProductPageSearchTransfer; -use Spryker\Shared\ProductPageSearch\ProductPageSearchConfig; use Spryker\Zed\Kernel\Communication\AbstractPlugin; use Spryker\Zed\ProductPageSearchExtension\Dependency\Plugin\ProductPageDataExpanderPluginInterface; /** - * @method \Spryker\Zed\ProductPageSearch\Persistence\ProductPageSearchQueryContainerInterface getQueryContainer() - * @method \Spryker\Zed\ProductPageSearch\Communication\ProductPageSearchCommunicationFactory getFactory() - * @method \Spryker\Zed\ProductPageSearch\Business\ProductPageSearchFacadeInterface getFacade() - * @method \Spryker\Zed\ProductPageSearch\ProductPageSearchConfig getConfig() + * @method \FondOfImpala\Zed\ProductImageGroupingProductPageSearch\Business\ProductImageGroupingProductPageSearchFacadeInterface getFacade() */ class ProductImageGroupedPageDataLoaderExpanderPlugin extends AbstractPlugin implements ProductPageDataExpanderPluginInterface { - /** - * @var string - */ - protected const IMAGE_GROUP_NAME_EMPTY = '*'; - /** * {@inheritDoc} * @@ -32,26 +23,6 @@ class ProductImageGroupedPageDataLoaderExpanderPlugin extends AbstractPlugin imp */ public function expandProductPageData(array $productData, ProductPageSearchTransfer $productAbstractPageSearchTransfer) { - /** @var \Generated\Shared\Transfer\ProductPayloadTransfer $productPayloadTransfer */ - $productPayloadTransfer = $productData[ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA]; - $imageSets = $productPayloadTransfer->getImages(); - /** @var array<\Orm\Zed\ProductImage\Persistence\SpyProductImageSet> $imageSetsByLocale */ - $imageSetsByLocale = $imageSets[$productData['fk_locale']] ?? []; - - $productImages = $productAbstractPageSearchTransfer->getProductImages(); - - $regrouped = []; - - foreach ($imageSetsByLocale as $imageSet) { - foreach ($productImages as $productImage) { - if ($productImage['fk_product_image_set'] === $imageSet->getIdProductImageSet()) { - $key = $imageSet->getName(); - - $regrouped[$key === null || $key === '' ? static::IMAGE_GROUP_NAME_EMPTY : $key][] = $productImage; - } - } - } - - $productAbstractPageSearchTransfer->setGroupedProductImages($regrouped); + $this->getFacade()->groupProductImageData($productData, $productAbstractPageSearchTransfer); } } diff --git a/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductImageGroupedPageDataExpanderTest.php b/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductImageGroupedPageDataExpanderTest.php new file mode 100644 index 0000000..558fe27 --- /dev/null +++ b/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Expander/ProductImageGroupedPageDataExpanderTest.php @@ -0,0 +1,262 @@ +pageSearchTransferMock = $this->getMockBuilder(ProductPageSearchTransfer::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->productPayloadTransferMock = $this->getMockBuilder(ProductPayloadTransfer::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->spyProductImageSetMock = $this->getMockBuilder(SpyProductImageSet::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->urlValidatorMock = $this->getMockBuilder(UrlValidatorInterface::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->expander = new ProductImageGroupPageDataExpander($this->urlValidatorMock); + } + + /** + * @return void + */ + public function testExpandProductPageData(): void + { + $key = 'front'; + $idProductImageSet = 44; + + $productData = [ + ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, + 'fk_locale' => 1, + ]; + + $imageSets = [ + 1 => [$this->spyProductImageSetMock], + ]; + + $productImage = [ + 'fk_product_image_set' => $idProductImageSet, + ]; + + $this->productPayloadTransferMock->expects(static::atLeastOnce()) + ->method('getImages') + ->willReturn($imageSets); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('getProductImages') + ->willReturn([$productImage]); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getIdProductImageSet') + ->willReturn($idProductImageSet); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getName') + ->willReturn($key); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('setGroupedProductImages') + ->with( + static::callback( + static fn (array $groupedProductImages): bool => array_keys($groupedProductImages) == [$key] + ), + )->willReturn($this->pageSearchTransferMock); + + $this->expander->expandProductPageData($productData, $this->pageSearchTransferMock); + } + + /** + * @return void + */ + public function testExpandProductPageDataWithEmptyImageSetName(): void + { + $key = ''; + $idProductImageSet = 44; + + $productData = [ + ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, + 'fk_locale' => 1, + ]; + + $imageSets = [ + 1 => [$this->spyProductImageSetMock], + ]; + + $productImage = [ + 'fk_product_image_set' => $idProductImageSet, + ]; + + $this->productPayloadTransferMock->expects(static::atLeastOnce()) + ->method('getImages') + ->willReturn($imageSets); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('getProductImages') + ->willReturn([$productImage]); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getIdProductImageSet') + ->willReturn($idProductImageSet); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getName') + ->willReturn($key); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('setGroupedProductImages') + ->with( + static::callback( + static fn (array $groupedProductImages): bool => array_keys($groupedProductImages) == ['*'] + ), + )->willReturn($this->pageSearchTransferMock); + + $this->expander->expandProductPageData($productData, $this->pageSearchTransferMock); + } + + /** + * @return void + */ + public function testExpandProductPageDataWithNullableImageSetName(): void + { + $key = null; + $idProductImageSet = 44; + + $productData = [ + ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, + 'fk_locale' => 1, + ]; + + $imageSets = [ + 1 => [$this->spyProductImageSetMock], + ]; + + $productImage = [ + 'fk_product_image_set' => $idProductImageSet, + ]; + + $this->productPayloadTransferMock->expects(static::atLeastOnce()) + ->method('getImages') + ->willReturn($imageSets); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('getProductImages') + ->willReturn([$productImage]); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getIdProductImageSet') + ->willReturn($idProductImageSet); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getName') + ->willReturn($key); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('setGroupedProductImages') + ->with( + static::callback( + static fn (array $groupedProductImages): bool => array_keys($groupedProductImages) == ['*'] + ), + )->willReturn($this->pageSearchTransferMock); + + $this->expander->expandProductPageData($productData, $this->pageSearchTransferMock); + } + + /** + * @return void + */ + public function testExpandProductPageDataWithUrlValidation(): void + { + $key = 'front'; + $idProductImageSet = 44; + + $productData = [ + ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, + 'fk_locale' => 1, + ]; + + $imageSets = [ + 1 => [$this->spyProductImageSetMock], + ]; + + $productImage = [ + 'fk_product_image_set' => $idProductImageSet, + 'external_url_small' => 'asdas', + 'external_url_large' => 'https://www.fondof.de', + ]; + + $this->productPayloadTransferMock->expects(static::atLeastOnce()) + ->method('getImages') + ->willReturn($imageSets); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('getProductImages') + ->willReturn([$productImage]); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getIdProductImageSet') + ->willReturn($idProductImageSet); + + $this->spyProductImageSetMock->expects(static::atLeastOnce()) + ->method('getName') + ->willReturn($key); + + $this->urlValidatorMock->expects(static::atLeastOnce()) + ->method('isValid') + ->withConsecutive(['asdas'], ['https://www.fondof.de']) + ->willReturnOnConsecutiveCalls( + false, + true, + ); + + $this->pageSearchTransferMock->expects(static::atLeastOnce()) + ->method('setGroupedProductImages') + ->with( + static::callback( + static fn (array $groupedProductImages): bool => $groupedProductImages[$key][0]['external_url_small'] === null && $groupedProductImages[$key][0]['external_url_large'] === 'https://www.fondof.de' + ), + )->willReturn($this->pageSearchTransferMock); + + $this->expander->expandProductPageData($productData, $this->pageSearchTransferMock); + } +} diff --git a/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Validator/UrlValidatorTest.php b/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Validator/UrlValidatorTest.php new file mode 100644 index 0000000..5a15265 --- /dev/null +++ b/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Business/Validator/UrlValidatorTest.php @@ -0,0 +1,40 @@ +validator = new UrlValidator(); + } + + /** + * @return void + */ + public function testIsValid(): void + { + static::assertTrue($this->validator->isValid('http://www.fondof.de')); + static::assertTrue($this->validator->isValid('https://www.fondof.de')); + } + + /** + * @return void + */ + public function testIsNotValid(): void + { + static::assertFalse($this->validator->isValid('')); + static::assertFalse($this->validator->isValid('www.fondof.de')); + static::assertFalse($this->validator->isValid('?io=transform:')); + static::assertFalse($this->validator->isValid('?io=transform:https://')); + } +} diff --git a/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPluginTest.php b/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPluginTest.php index 517533f..e758aef 100644 --- a/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPluginTest.php +++ b/tests/FondOfImpala/Zed/ProductImageGroupingProductPageSearch/Communication/Plugin/ProductPageSearch/ProductImageGroupedPageDataLoaderExpanderPluginTest.php @@ -2,11 +2,9 @@ namespace FondOfImpala\Zed\ProductImageGroupingProductPageSearch\Communication\Plugin\ProductPageSearch; use Codeception\Test\Unit; +use FondOfImpala\Zed\ProductImageGroupingProductPageSearch\Business\ProductImageGroupingProductPageSearchFacade; use Generated\Shared\Transfer\ProductPageSearchTransfer; -use Generated\Shared\Transfer\ProductPayloadTransfer; -use Orm\Zed\ProductImage\Persistence\SpyProductImageSet; use PHPUnit\Framework\MockObject\MockObject; -use Spryker\Shared\ProductPageSearch\ProductPageSearchConfig; class ProductImageGroupedPageDataLoaderExpanderPluginTest extends Unit { @@ -21,14 +19,9 @@ class ProductImageGroupedPageDataLoaderExpanderPluginTest extends Unit protected MockObject|ProductPageSearchTransfer $pageSearchTransferMock; /** - * @var \PHPUnit\Framework\MockObject\MockObject|\Generated\Shared\Transfer\ProductPayloadTransfer + * @var \PHPUnit\Framework\MockObject\MockObject|\FondOfImpala\Zed\ProductImageGroupingProductPageSearch\Business\ProductImageGroupingProductPageSearchFacade */ - protected MockObject|ProductPayloadTransfer $productPayloadTransferMock; - - /** - * @var \PHPUnit\Framework\MockObject\MockObject|\Orm\Zed\ProductImage\Persistence\SpyProductImageSet - */ - protected MockObject|SpyProductImageSet $spyProductImageSetMock; + protected MockObject|ProductImageGroupingProductPageSearchFacade $facadeMock; /** * @return void @@ -39,15 +32,12 @@ protected function _before(): void ->disableOriginalConstructor() ->getMock(); - $this->productPayloadTransferMock = $this->getMockBuilder(ProductPayloadTransfer::class) - ->disableOriginalConstructor() - ->getMock(); - - $this->spyProductImageSetMock = $this->getMockBuilder(SpyProductImageSet::class) + $this->facadeMock = $this->getMockBuilder(ProductImageGroupingProductPageSearchFacade::class) ->disableOriginalConstructor() ->getMock(); $this->plugin = new ProductImageGroupedPageDataLoaderExpanderPlugin(); + $this->plugin->setFacade($this->facadeMock); } /** @@ -55,142 +45,6 @@ protected function _before(): void */ public function testExpandProductPageData(): void { - $key = 'front'; - $idProductImageSet = 44; - - $productData = [ - ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, - 'fk_locale' => 1, - ]; - - $imageSets = [ - 1 => [$this->spyProductImageSetMock], - ]; - - $productImage = [ - 'fk_product_image_set' => $idProductImageSet, - ]; - - $this->productPayloadTransferMock->expects(static::atLeastOnce()) - ->method('getImages') - ->willReturn($imageSets); - - $this->pageSearchTransferMock->expects(static::atLeastOnce()) - ->method('getProductImages') - ->willReturn([$productImage]); - - $this->spyProductImageSetMock->expects(static::atLeastOnce()) - ->method('getIdProductImageSet') - ->willReturn($idProductImageSet); - - $this->spyProductImageSetMock->expects(static::atLeastOnce()) - ->method('getName') - ->willReturn($key); - - $this->pageSearchTransferMock->expects(static::atLeastOnce()) - ->method('setGroupedProductImages') - ->with( - static::callback( - static fn (array $groupedProductImages): bool => array_keys($groupedProductImages) == [$key] - ), - )->willReturn($this->pageSearchTransferMock); - - $this->plugin->expandProductPageData($productData, $this->pageSearchTransferMock); - } - - /** - * @return void - */ - public function testExpandProductPageDataWithEmptyImageSetName(): void - { - $key = ''; - $idProductImageSet = 44; - - $productData = [ - ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, - 'fk_locale' => 1, - ]; - - $imageSets = [ - 1 => [$this->spyProductImageSetMock], - ]; - - $productImage = [ - 'fk_product_image_set' => $idProductImageSet, - ]; - - $this->productPayloadTransferMock->expects(static::atLeastOnce()) - ->method('getImages') - ->willReturn($imageSets); - - $this->pageSearchTransferMock->expects(static::atLeastOnce()) - ->method('getProductImages') - ->willReturn([$productImage]); - - $this->spyProductImageSetMock->expects(static::atLeastOnce()) - ->method('getIdProductImageSet') - ->willReturn($idProductImageSet); - - $this->spyProductImageSetMock->expects(static::atLeastOnce()) - ->method('getName') - ->willReturn($key); - - $this->pageSearchTransferMock->expects(static::atLeastOnce()) - ->method('setGroupedProductImages') - ->with( - static::callback( - static fn (array $groupedProductImages): bool => array_keys($groupedProductImages) == ['*'] - ), - )->willReturn($this->pageSearchTransferMock); - - $this->plugin->expandProductPageData($productData, $this->pageSearchTransferMock); - } - - /** - * @return void - */ - public function testExpandProductPageDataWithNullableImageSetName(): void - { - $key = null; - $idProductImageSet = 44; - - $productData = [ - ProductPageSearchConfig::PRODUCT_ABSTRACT_PAGE_LOAD_DATA => $this->productPayloadTransferMock, - 'fk_locale' => 1, - ]; - - $imageSets = [ - 1 => [$this->spyProductImageSetMock], - ]; - - $productImage = [ - 'fk_product_image_set' => $idProductImageSet, - ]; - - $this->productPayloadTransferMock->expects(static::atLeastOnce()) - ->method('getImages') - ->willReturn($imageSets); - - $this->pageSearchTransferMock->expects(static::atLeastOnce()) - ->method('getProductImages') - ->willReturn([$productImage]); - - $this->spyProductImageSetMock->expects(static::atLeastOnce()) - ->method('getIdProductImageSet') - ->willReturn($idProductImageSet); - - $this->spyProductImageSetMock->expects(static::atLeastOnce()) - ->method('getName') - ->willReturn($key); - - $this->pageSearchTransferMock->expects(static::atLeastOnce()) - ->method('setGroupedProductImages') - ->with( - static::callback( - static fn (array $groupedProductImages): bool => array_keys($groupedProductImages) == ['*'] - ), - )->willReturn($this->pageSearchTransferMock); - - $this->plugin->expandProductPageData($productData, $this->pageSearchTransferMock); + $this->plugin->expandProductPageData([], $this->pageSearchTransferMock); } }