Skip to content

Commit fac5510

Browse files
committed
MAGETWO-54283: ProductsList widget should implement IdentityInterface and return correct identities
1 parent d4115bf commit fac5510

File tree

2 files changed

+15
-23
lines changed

2 files changed

+15
-23
lines changed

app/code/Magento/CatalogWidget/Block/Product/ProductsList.php

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ class ProductsList extends \Magento\Catalog\Block\Product\AbstractProduct implem
8181
*/
8282
protected $conditionsHelper;
8383

84-
/** @var array */
85-
private $widgetIdentities;
86-
8784
/**
8885
* @param \Magento\Catalog\Block\Product\Context $context
8986
* @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
@@ -333,19 +330,16 @@ public function getPagerHtml()
333330
*/
334331
public function getIdentities()
335332
{
336-
if ($this->widgetIdentities === null) {
337-
$collection = $this->productCollectionFactory->create();
338-
$conditions = $this->getConditions();
339-
$conditions->collectValidatedAttributes($collection);
340-
$this->sqlBuilder->attachConditionToCollection($collection, $conditions);
341-
$this->widgetIdentities = [];
342-
foreach ($collection as $product) {
343-
$this->widgetIdentities[] = \Magento\Catalog\Model\Product::CACHE_TAG . '_' . $product->getId();
333+
$identities = [];
334+
if ($this->getProductCollection()) {
335+
foreach ($this->getProductCollection() as $product) {
336+
if ($product instanceof IdentityInterface) {
337+
$identities = array_merge($identities, $product->getIdentities());
338+
}
344339
}
345-
$this->widgetIdentities = $this->widgetIdentities ?: [\Magento\Catalog\Model\Product::CACHE_TAG];
346340
}
347341

348-
return $this->widgetIdentities;
342+
return $identities?: [\Magento\Catalog\Model\Product::CACHE_TAG];
349343
}
350344

351345
/**

app/code/Magento/CatalogWidget/Test/Unit/Block/Product/ProductsListTest.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -329,18 +329,16 @@ public function testGetIdentities()
329329
])->disableOriginalConstructor()
330330
->getMock();
331331

332-
$this->collectionFactory->expects($this->once())->method('create')->willReturn($collection);
333-
$this->productsList->setData('conditions_encoded', 'some_serialized_conditions');
334-
335-
$this->builder->expects($this->once())->method('attachConditionToCollection')
336-
->with($collection, $this->getConditionsForCollection($collection))
337-
->willReturnSelf();
338-
$product = $this->getMock('Magento\Catalog\Api\ProductInterface', ['getId']);
339-
$product->expects($this->once())->method('getId')->willReturn('product_id');
340-
$collection->expects($this->once())->method('getIterator')->willReturn(new \ArrayIterator([$product]));
332+
$product = $this->getMock('Magento\Framework\DataObject\IdentityInterface', ['getIdentities']);
333+
$notProduct = $this->getMock('NotProduct', ['getIdentities']);
334+
$product->expects($this->once())->method('getIdentities')->willReturn(['product_identity']);
335+
$collection->expects($this->once())->method('getIterator')->willReturn(
336+
new \ArrayIterator([$product, $notProduct])
337+
);
338+
$this->productsList->setData('product_collection', $collection);
341339

342340
$this->assertEquals(
343-
[\Magento\Catalog\Model\Product::CACHE_TAG . '_' . 'product_id'],
341+
['product_identity'],
344342
$this->productsList->getIdentities()
345343
);
346344
}

0 commit comments

Comments
 (0)