/** * Get product media by fallback: * 1stly by default attribute values * 2ndly by getting base image from configurable product * * @return string */ public function execute() { $productMedia = []; if ($productId = (int) $this->getRequest()->getParam('product_id')) { $currentConfigurable = $this->productModelFactory->create()->load($productId); $attributes = (array) $this->getRequest()->getParam('attributes'); if (!empty($attributes)) { $product = $this->getProductVariationWithMedia($currentConfigurable, $attributes); } if ((empty($product) || (!$product->getImage() || $product->getImage() == 'no_selection')) && isset($currentConfigurable)) { $product = $currentConfigurable; } $productMedia = $this->swatchHelper->getProductMediaGallery($product); } /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON); $resultJson->setData($productMedia); return $resultJson; }
/** * @dataProvider dataForMediaGallery */ public function testGetProductMediaGallery($mediaGallery, $image) { $this->productMock->expects($this->once())->method('getMediaAttributeValues')->willReturn($mediaGallery); $this->imageHelperMock->expects($this->any())->method('init')->willReturnMap([[$this->productMock, 'product_page_image_large', [], $this->imageHelperMock], [$this->productMock, 'product_page_image_medium', [], $this->imageHelperMock], [$this->productMock, 'product_page_image_small', [], $this->imageHelperMock]]); $this->imageHelperMock->expects($this->any())->method('setImageFile')->with($image)->willReturnSelf(); $this->imageHelperMock->expects($this->any())->method('constrainOnly')->willReturnSelf(); $this->imageHelperMock->expects($this->any())->method('keepAspectRatio')->willReturnSelf(); $this->imageHelperMock->expects($this->any())->method('keepFrame')->willReturnSelf(); $this->imageHelperMock->expects($this->any())->method('getUrl')->willReturn('http://full_path_to_image/magento1.png'); $mediaObject = $this->getMock('\\Magento\\Framework\\DataObject', [], [], '', false); $iterator = new \ArrayIterator([$mediaObject]); $mediaCollectionMock = $this->getMock('\\Magento\\Framework\\Data\\Collection', [], [], '', false); $mediaCollectionMock->expects($this->any())->method('getIterator')->willReturn($iterator); $mediaObject->method('getData')->withConsecutive(['value_id'], ['file'])->willReturnOnConsecutiveCalls(0, $image); $this->productMock->method('getMediaGalleryImages')->willReturn($mediaCollectionMock); $this->swatchHelperObject->getProductMediaGallery($this->productMock); }