Skip to content

Commit ac204a5

Browse files
MCP-272: [Checkout start] Optimize Images URL retrieving (#6748)
1 parent 72fef34 commit ac204a5

File tree

2 files changed

+73
-7
lines changed

2 files changed

+73
-7
lines changed

app/code/Magento/Checkout/Model/Cart/ImageProvider.php

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,37 @@ class ImageProvider
3232
*/
3333
protected $customerDataItem;
3434

35+
/**
36+
* @var \Magento\Catalog\Helper\Image
37+
*/
38+
private $imageHelper;
39+
40+
/**
41+
* @var \Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface
42+
*/
43+
private $itemResolver;
44+
3545
/**
3646
* @param \Magento\Quote\Api\CartItemRepositoryInterface $itemRepository
3747
* @param \Magento\Checkout\CustomerData\ItemPoolInterface $itemPool
3848
* @param DefaultItem|null $customerDataItem
49+
* @param \Magento\Catalog\Helper\Image $imageHelper
50+
* @param \Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface $itemResolver
3951
*/
4052
public function __construct(
4153
\Magento\Quote\Api\CartItemRepositoryInterface $itemRepository,
4254
\Magento\Checkout\CustomerData\ItemPoolInterface $itemPool,
43-
\Magento\Checkout\CustomerData\DefaultItem $customerDataItem = null
55+
\Magento\Checkout\CustomerData\DefaultItem $customerDataItem = null,
56+
\Magento\Catalog\Helper\Image $imageHelper = null,
57+
\Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface $itemResolver = null
4458
) {
4559
$this->itemRepository = $itemRepository;
4660
$this->itemPool = $itemPool;
4761
$this->customerDataItem = $customerDataItem ?: ObjectManager::getInstance()->get(DefaultItem::class);
62+
$this->imageHelper = $imageHelper ?: ObjectManager::getInstance()->get(\Magento\Catalog\Helper\Image::class);
63+
$this->itemResolver = $itemResolver ?: ObjectManager::getInstance()->get(
64+
\Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface::class
65+
);
4866
}
4967

5068
/**
@@ -58,9 +76,30 @@ public function getImages($cartId)
5876
$items = $this->itemRepository->getList($cartId);
5977
/** @var \Magento\Quote\Model\Quote\Item $cartItem */
6078
foreach ($items as $cartItem) {
61-
$allData = $this->customerDataItem->getItemData($cartItem);
62-
$itemData[$cartItem->getItemId()] = $allData['product_image'];
79+
$itemData[$cartItem->getItemId()] = $this->getProductImageData($cartItem);
6380
}
6481
return $itemData;
6582
}
83+
84+
/**
85+
* Get product image data
86+
*
87+
* @param \Magento\Quote\Model\Quote\Item $cartItem
88+
*
89+
* @return array
90+
*/
91+
private function getProductImageData($cartItem)
92+
{
93+
$imageHelper = $this->imageHelper->init(
94+
$this->itemResolver->getFinalProduct($cartItem),
95+
'mini_cart_product_thumbnail'
96+
);
97+
$imageData = [
98+
'src' => $imageHelper->getUrl(),
99+
'alt' => $imageHelper->getLabel(),
100+
'width' => $imageHelper->getWidth(),
101+
'height' => $imageHelper->getHeight(),
102+
];
103+
return $imageData;
104+
}
66105
}

app/code/Magento/Checkout/Test/Unit/Model/Cart/ImageProviderTest.php

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,32 +37,59 @@ class ImageProviderTest extends TestCase
3737
*/
3838
private $customerItem;
3939

40+
/**
41+
* @var MockObject|\Magento\Catalog\Helper\Image
42+
*/
43+
private $imageHelper;
44+
45+
/**
46+
* @var MockObject|\Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface
47+
*/
48+
private $itemResolver;
49+
4050
protected function setUp(): void
4151
{
4252
$this->itemRepositoryMock = $this->getMockForAbstractClass(CartItemRepositoryInterface::class);
4353
$this->itemPoolMock = $this->getMockForAbstractClass(ItemPoolInterface::class);
4454
$this->customerItem = $this->getMockBuilder(DefaultItem::class)
4555
->disableOriginalConstructor()
4656
->getMock();
57+
$this->imageHelper = $this->getMockBuilder(\Magento\Catalog\Helper\Image::class)
58+
->disableOriginalConstructor()
59+
->getMock();
60+
$this->itemResolver = $this->getMockForAbstractClass(
61+
\Magento\Catalog\Model\Product\Configuration\Item\ItemResolverInterface::class
62+
);
4763
$this->model = new ImageProvider(
4864
$this->itemRepositoryMock,
4965
$this->itemPoolMock,
50-
$this->customerItem
66+
$this->customerItem,
67+
$this->imageHelper,
68+
$this->itemResolver
5169
);
5270
}
5371

5472
public function testGetImages()
5573
{
5674
$cartId = 42;
5775
$itemId = 74;
58-
$itemData = ['product_image' => 'Magento.png', 'random' => '3.1415926535'];
76+
$itemData = [
77+
'src' => 'Url',
78+
'alt' => 'Label',
79+
'width' => 'Width',
80+
'height' => 'Height'
81+
];
5982
$itemMock = $this->createMock(Item::class);
6083
$itemMock->expects($this->once())->method('getItemId')->willReturn($itemId);
6184

62-
$expectedResult = [$itemId => $itemData['product_image']];
85+
$expectedResult = [$itemId => $itemData];
6386

6487
$this->itemRepositoryMock->expects($this->once())->method('getList')->with($cartId)->willReturn([$itemMock]);
65-
$this->customerItem->expects($this->once())->method('getItemData')->with($itemMock)->willReturn($itemData);
88+
$this->imageHelper->expects($this->once())->method('init')->willReturnSelf();
89+
$this->imageHelper->expects($this->once())->method('getUrl')->willReturn('Url');
90+
$this->imageHelper->expects($this->once())->method('getLabel')->willReturn('Label');
91+
$this->imageHelper->expects($this->once())->method('getWidth')->willReturn('Width');
92+
$this->imageHelper->expects($this->once())->method('getHeight')->willReturn('Height');
6693

6794
$this->assertEquals($expectedResult, $this->model->getImages($cartId));
6895
}

0 commit comments

Comments
 (0)