Skip to content

Commit 6f0a9d9

Browse files
author
Yurii Hryhoriev
committed
MAGETWO-59240: There is no WHERE claus for retrieving Media Gallery Data
1 parent 7368be9 commit 6f0a9d9

File tree

1 file changed

+119
-35
lines changed

1 file changed

+119
-35
lines changed

app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/CollectionTest.php

Lines changed: 119 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010

1111
/**
1212
* Class CollectionTest
13-
*
14-
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1513
*/
1614
class CollectionTest extends \PHPUnit_Framework_TestCase
1715
{
@@ -30,98 +28,143 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
3028
*/
3129
protected $collection;
3230

31+
/**
32+
* @var \PHPUnit_Framework_MockObject_MockObject
33+
*/
34+
private $galleryResourceMock;
35+
36+
/**
37+
* @var \PHPUnit_Framework_MockObject_MockObject
38+
*/
39+
private $entityMock;
40+
41+
/**
42+
* @var \PHPUnit_Framework_MockObject_MockObject
43+
*/
44+
private $metadataPoolMock;
45+
46+
/**
47+
* @var \PHPUnit_Framework_MockObject_MockObject
48+
*/
49+
private $galleryReadHandlerMock;
50+
3351
/**
3452
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
3553
*/
3654
protected function setUp()
3755
{
38-
$entityFactory = $this->getMock(\Magento\Framework\Data\Collection\EntityFactory::class, [], [], '', false);
39-
$logger = $this->getMockBuilder(\Psr\Log\LoggerInterface::class)
56+
$entityFactory = $this->getMock('Magento\Framework\Data\Collection\EntityFactory', [], [], '', false);
57+
$logger = $this->getMockBuilder('Psr\Log\LoggerInterface')
4058
->disableOriginalConstructor()
4159
->getMockForAbstractClass();
42-
$fetchStrategy = $this->getMockBuilder(\Magento\Framework\Data\Collection\Db\FetchStrategyInterface::class)
60+
$fetchStrategy = $this->getMockBuilder('Magento\Framework\Data\Collection\Db\FetchStrategyInterface')
4361
->disableOriginalConstructor()
4462
->getMockForAbstractClass();
45-
$eventManager = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class)
63+
$eventManager = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
4664
->disableOriginalConstructor()
4765
->getMockForAbstractClass();
48-
$eavConfig = $this->getMockBuilder(\Magento\Eav\Model\Config::class)
66+
$eavConfig = $this->getMockBuilder('Magento\Eav\Model\Config')
4967
->disableOriginalConstructor()
5068
->getMock();
51-
$resource = $this->getMockBuilder(\Magento\Framework\App\ResourceConnection::class)
69+
$resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
5270
->disableOriginalConstructor()
5371
->getMock();
54-
$eavEntityFactory = $this->getMockBuilder(\Magento\Eav\Model\EntityFactory::class)
72+
$eavEntityFactory = $this->getMockBuilder('Magento\Eav\Model\EntityFactory')
5573
->disableOriginalConstructor()
5674
->getMock();
57-
$resourceHelper = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Helper::class)
75+
$resourceHelper = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Helper')
5876
->disableOriginalConstructor()
5977
->getMock();
60-
$universalFactory = $this->getMockBuilder(\Magento\Framework\Validator\UniversalFactory::class)
78+
$universalFactory = $this->getMockBuilder('Magento\Framework\Validator\UniversalFactory')
6179
->disableOriginalConstructor()
6280
->getMock();
63-
$storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
81+
$storeManager = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
6482
->disableOriginalConstructor()
6583
->setMethods(['getStore', 'getId'])
6684
->getMockForAbstractClass();
67-
$moduleManager = $this->getMockBuilder(\Magento\Framework\Module\Manager::class)
85+
$moduleManager = $this->getMockBuilder('Magento\Framework\Module\Manager')
6886
->disableOriginalConstructor()
6987
->getMock();
70-
$catalogProductFlatState = $this->getMockBuilder(\Magento\Catalog\Model\Indexer\Product\Flat\State::class)
88+
$catalogProductFlatState = $this->getMockBuilder('Magento\Catalog\Model\Indexer\Product\Flat\State')
7189
->disableOriginalConstructor()
7290
->getMock();
73-
$scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
91+
$scopeConfig = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
7492
->disableOriginalConstructor()
7593
->getMockForAbstractClass();
76-
$productOptionFactory = $this->getMockBuilder(\Magento\Catalog\Model\Product\OptionFactory::class)
94+
$productOptionFactory = $this->getMockBuilder('Magento\Catalog\Model\Product\OptionFactory')
7795
->disableOriginalConstructor()
7896
->getMock();
79-
$catalogUrl = $this->getMockBuilder(\Magento\Catalog\Model\ResourceModel\Url::class)
97+
$catalogUrl = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Url')
8098
->disableOriginalConstructor()
8199
->getMock();
82-
$localeDate = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class)
100+
$localeDate = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\TimezoneInterface')
83101
->disableOriginalConstructor()
84102
->getMockForAbstractClass();
85-
$customerSession = $this->getMockBuilder(\Magento\Customer\Model\Session::class)
103+
$customerSession = $this->getMockBuilder('Magento\Customer\Model\Session')
86104
->disableOriginalConstructor()
87105
->getMock();
88-
$dateTime = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime::class)
106+
$dateTime = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime')
89107
->disableOriginalConstructor()
90108
->getMock();
91-
$groupManagement = $this->getMockBuilder(\Magento\Customer\Api\GroupManagementInterface::class)
109+
$groupManagement = $this->getMockBuilder('Magento\Customer\Api\GroupManagementInterface')
92110
->disableOriginalConstructor()
93111
->getMockForAbstractClass();
94112

95-
$this->connectionMock = $this->getMockBuilder(\Magento\Framework\DB\Adapter\AdapterInterface::class)
113+
$this->connectionMock = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')
96114
->disableOriginalConstructor()
97115
->getMockForAbstractClass();
98116

99-
$this->selectMock = $this->getMockBuilder(\Magento\Framework\DB\Select::class)
117+
$this->selectMock = $this->getMockBuilder('Magento\Framework\DB\Select')
100118
->disableOriginalConstructor()
101119
->getMock();
102120

103-
$entityMock = $this->getMockBuilder(\Magento\Eav\Model\Entity\AbstractEntity::class)
121+
$this->entityMock = $this->getMockBuilder(\Magento\Eav\Model\Entity\AbstractEntity::class)
104122
->disableOriginalConstructor()
105123
->getMock();
106124

125+
$this->galleryResourceMock = $this->getMockBuilder(
126+
\Magento\Catalog\Model\ResourceModel\Product\Gallery::class
127+
)->disableOriginalConstructor()->getMock();
128+
129+
$this->metadataPoolMock = $this->getMockBuilder(
130+
\Magento\Framework\EntityManager\MetadataPool::class
131+
)->disableOriginalConstructor()->getMock();
132+
133+
$this->galleryReadHandlerMock = $this->getMockBuilder(
134+
\Magento\Catalog\Model\Product\Gallery\ReadHandler::class
135+
)->disableOriginalConstructor()->getMock();
136+
107137
$storeManager->expects($this->any())->method('getId')->willReturn(1);
108138
$storeManager->expects($this->any())->method('getStore')->willReturnSelf();
109139
$universalFactory->expects($this->exactly(1))->method('create')->willReturnOnConsecutiveCalls(
110-
$entityMock
140+
$this->entityMock
111141
);
112-
$entityMock->expects($this->once())->method('getConnection')->willReturn($this->connectionMock);
113-
$entityMock->expects($this->once())->method('getDefaultAttributes')->willReturn([]);
114-
$entityMock->expects($this->any())->method('getTable')->willReturnArgument(0);
142+
$this->entityMock->expects($this->once())->method('getConnection')->willReturn($this->connectionMock);
143+
$this->entityMock->expects($this->once())->method('getDefaultAttributes')->willReturn([]);
144+
$this->entityMock->expects($this->any())->method('getTable')->willReturnArgument(0);
115145
$this->connectionMock->expects($this->atLeastOnce())->method('select')->willReturn($this->selectMock);
116146
$helper = new ObjectManager($this);
117147

118148
$this->prepareObjectManager([
119-
[\Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation::class,
120-
$this->getMock(\Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation::class)
149+
[
150+
'Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation',
151+
$this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection\ProductLimitation')
152+
],
153+
[
154+
\Magento\Catalog\Model\ResourceModel\Product\Gallery::class,
155+
$this->galleryResourceMock
156+
],
157+
[
158+
\Magento\Framework\EntityManager\MetadataPool::class,
159+
$this->metadataPoolMock
160+
],
161+
[
162+
\Magento\Catalog\Model\Product\Gallery\ReadHandler::class,
163+
$this->galleryReadHandlerMock
121164
]
122165
]);
123166
$this->collection = $helper->getObject(
124-
\Magento\Catalog\Model\ResourceModel\Product\Collection::class,
167+
'Magento\Catalog\Model\ResourceModel\Product\Collection',
125168
[
126169
'entityFactory' => $entityFactory,
127170
'logger' => $logger,
@@ -150,8 +193,8 @@ protected function setUp()
150193

151194
public function testAddProductCategoriesFilter()
152195
{
153-
$condition = ['in' => [1,2]];
154-
$values = [1,2];
196+
$condition = ['in' => [1, 2]];
197+
$values = [1, 2];
155198
$conditionType = 'nin';
156199
$preparedSql = "category_id IN(1,2)";
157200
$tableName = "catalog_category_product";
@@ -174,17 +217,58 @@ public function testAddProductCategoriesFilter()
174217
$this->collection->addCategoriesFilter([$conditionType => $values]);
175218
}
176219

220+
public function testAddMediaGalleryData()
221+
{
222+
$attributeId = 42;
223+
$itemId = 4242;
224+
$linkField = 'entity_id';
225+
$mediaGalleriesMock = [[$linkField => $itemId]];
226+
$itemMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class)
227+
->disableOriginalConstructor()
228+
->getMock();
229+
$attributeMock = $this->getMockBuilder(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute::class)
230+
->disableOriginalConstructor()
231+
->getMock();
232+
$selectMock = $this->getMockBuilder(\Magento\Framework\DB\Select::class)
233+
->disableOriginalConstructor()
234+
->getMock();
235+
$metadataMock = $this->getMockBuilder(\Magento\Framework\EntityManager\EntityMetadataInterface::class)
236+
->disableOriginalConstructor()
237+
->getMock();
238+
$this->collection->addItem($itemMock);
239+
$reflection = new \ReflectionClass(get_class($this->collection));
240+
$reflectionProperty = $reflection->getProperty('_isCollectionLoaded');
241+
$reflectionProperty->setAccessible(true);
242+
$reflectionProperty->setValue($this->collection, true);
243+
244+
$this->galleryResourceMock->expects($this->once())->method('createBatchBaseSelect')->willReturn($selectMock);
245+
$attributeMock->expects($this->once())->method('getAttributeId')->willReturn($attributeId);
246+
$this->entityMock->expects($this->once())->method('getAttribute')->willReturn($attributeMock);
247+
$itemMock->expects($this->atLeastOnce())->method('getId')->willReturn($itemId);
248+
$selectMock->expects($this->once())->method('where')->with('entity.' . $linkField . ' IN (?)', [$itemId]);
249+
$this->metadataPoolMock->expects($this->once())->method('getMetadata')->willReturn($metadataMock);
250+
$metadataMock->expects($this->once())->method('getLinkField')->willReturn($linkField);
251+
252+
$this->connectionMock->expects($this->once())->method('fetchAll')->with($selectMock)->willReturn(
253+
[['entity_id' => $itemId]]
254+
);
255+
$this->galleryReadHandlerMock->expects($this->once())->method('addMediaDataToProduct')
256+
->with($itemMock, $mediaGalleriesMock);
257+
258+
$this->assertSame($this->collection, $this->collection->addMediaGalleryData());
259+
}
260+
177261
/**
178262
* @param $map
179263
*/
180264
private function prepareObjectManager($map)
181265
{
182-
$objectManagerMock = $this->getMock(\Magento\Framework\ObjectManagerInterface::class);
266+
$objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
183267
$objectManagerMock->expects($this->any())->method('getInstance')->willReturnSelf();
184268
$objectManagerMock->expects($this->any())
185269
->method('get')
186270
->will($this->returnValueMap($map));
187-
$reflectionClass = new \ReflectionClass(\Magento\Framework\App\ObjectManager::class);
271+
$reflectionClass = new \ReflectionClass('Magento\Framework\App\ObjectManager');
188272
$reflectionProperty = $reflectionClass->getProperty('_instance');
189273
$reflectionProperty->setAccessible(true);
190274
$reflectionProperty->setValue($objectManagerMock);

0 commit comments

Comments
 (0)