Skip to content

Commit a75bcfc

Browse files
committed
Merge remote-tracking branch 'goinc/MAGETWO-34954' into MAGETWO-35516
Conflicts: app/code/Magento/Catalog/Model/Observer.php
2 parents 74d5495 + c7a8ebd commit a75bcfc

File tree

2 files changed

+80
-28
lines changed

2 files changed

+80
-28
lines changed

app/code/Magento/Catalog/Model/Observer.php

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,14 @@ class Observer
3434
*
3535
* @var \Magento\Catalog\Model\Layer
3636
*/
37-
protected $_catalogLayer;
37+
private $_catalogLayer = null;
38+
39+
/**
40+
* Catalog layer resolver
41+
*
42+
* @var \Magento\Catalog\Model\Layer\Resolver
43+
*/
44+
protected $layerResolver;
3845

3946
/**
4047
* Store manager
@@ -95,7 +102,7 @@ public function __construct(
95102
$this->_categoryResource = $categoryResource;
96103
$this->_catalogProduct = $catalogProduct;
97104
$this->_storeManager = $storeManager;
98-
$this->_catalogLayer = $layerResolver->get();
105+
$this->layerResolver = $layerResolver;
99106
$this->_catalogCategory = $catalogCategory;
100107
$this->_catalogData = $catalogData;
101108
$this->categoryFlatConfig = $categoryFlatState;
@@ -142,27 +149,10 @@ protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block
142149
if (!$category->getIsActive()) {
143150
continue;
144151
}
145-
146-
$nodeId = 'category-node-' . $category->getId();
147-
148152
$block->addIdentity(\Magento\Catalog\Model\Category::CACHE_TAG . '_' . $category->getId());
149153

150154
$tree = $parentCategoryNode->getTree();
151-
152-
$isActiveCategory = false;
153-
/** @var \Magento\Catalog\Model\Category $currentCategory */
154-
$currentCategory = $this->_registry->registry('current_category');
155-
if ($currentCategory && $currentCategory->getId() == $category->getId()) {
156-
$isActiveCategory = true;
157-
}
158-
159-
$categoryData = [
160-
'name' => $category->getName(),
161-
'id' => $nodeId,
162-
'url' => $this->_catalogCategory->getCategoryUrl($category),
163-
'has_active' => $this->hasActive($category),
164-
'is_active' => $isActiveCategory
165-
];
155+
$categoryData = $this->getMenuCategoryData($category);
166156
$categoryNode = new \Magento\Framework\Data\Tree\Node($categoryData, 'id', $tree, $parentCategoryNode);
167157
$parentCategoryNode->addChild($categoryNode);
168158

@@ -176,6 +166,34 @@ protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block
176166
}
177167
}
178168

169+
/**
170+
* Get category data to be added to the Menu
171+
*
172+
* @param \Magento\Framework\Data\Tree\Node $category
173+
* @return array
174+
*/
175+
public function getMenuCategoryData($category)
176+
{
177+
$nodeId = 'category-node-' . $category->getId();
178+
179+
$isActiveCategory = false;
180+
/** @var \Magento\Catalog\Model\Category $currentCategory */
181+
$currentCategory = $this->_registry->registry('current_category');
182+
if ($currentCategory && $currentCategory->getId() == $category->getId()) {
183+
$isActiveCategory = true;
184+
}
185+
186+
$categoryData = [
187+
'name' => $category->getName(),
188+
'id' => $nodeId,
189+
'url' => $this->_catalogCategory->getCategoryUrl($category),
190+
'has_active' => $this->hasActive($category),
191+
'is_active' => $isActiveCategory,
192+
];
193+
194+
return $categoryData;
195+
}
196+
179197
/**
180198
* Checks whether category belongs to active category's path
181199
*
@@ -184,16 +202,29 @@ protected function _addCategoriesToMenu($categories, $parentCategoryNode, $block
184202
*/
185203
protected function hasActive($category)
186204
{
187-
if (!$this->_catalogLayer) {
205+
$catalogLayer = $this->getCatalogLayer();
206+
if (!$catalogLayer) {
188207
return false;
189208
}
190209

191-
$currentCategory = $this->_catalogLayer->getCurrentCategory();
210+
$currentCategory = $catalogLayer->getCurrentCategory();
192211
if (!$currentCategory) {
193212
return false;
194213
}
195214

196215
$categoryPathIds = explode(',', $currentCategory->getPathInStore());
197216
return in_array($category->getId(), $categoryPathIds);
198217
}
218+
219+
/**
220+
* Get catalog layer
221+
* @return \Magento\Catalog\Model\Layer
222+
*/
223+
private function getCatalogLayer()
224+
{
225+
if ($this->_catalogLayer === null) {
226+
$this->_catalogLayer = $this->layerResolver->get();
227+
}
228+
return $this->_catalogLayer;
229+
}
199230
}

app/code/Magento/Catalog/Test/Unit/Model/ObserverTest.php

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,27 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
1818
protected $_observer;
1919

2020
/**
21-
* @var \Magento\Catalog\Helper\Category
21+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Helper\Category
2222
*/
2323
protected $_catalogCategory;
2424

2525
/**
26-
* @var \Magento\Catalog\Model\Category
26+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Category
2727
*/
2828
protected $_category;
2929

3030
/**
31-
* @var \Magento\Catalog\Model\Category
31+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Category
3232
*/
3333
protected $_childrenCategory;
3434

3535
/**
36-
* @var \Magento\Catalog\Model\Indexer\Category\Flat\State
36+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Indexer\Category\Flat\State
3737
*/
3838
protected $_categoryFlatState;
3939

4040
/**
41-
* @var \Magento\Store\Model\StoreManagerInterface
41+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\StoreManagerInterface
4242
*/
4343
protected $_storeManager;
4444

@@ -64,11 +64,13 @@ public function setUp()
6464
->disableOriginalConstructor()
6565
->getMock();
6666

67+
$layerResolver = $this->_getCleanMock('Magento\Catalog\Model\Layer\Resolver');
68+
$layerResolver->expects($this->once())->method('get')->willReturn(null);
6769
$this->_observer = (new ObjectManager($this))->getObject('Magento\Catalog\Model\Observer', [
6870
'categoryResource' => $this->_getCleanMock('\Magento\Catalog\Model\Resource\Category'),
6971
'catalogProduct' => $this->_getCleanMock('\Magento\Catalog\Model\Resource\Product'),
7072
'storeManager' => $this->_storeManager,
71-
'catalogLayer' => $this->_getCleanMock('\Magento\Catalog\Model\Layer\Category'),
73+
'layerResolver' => $layerResolver,
7274
'indexIndexer' => $this->_getCleanMock('\Magento\Index\Model\Indexer'),
7375
'catalogCategory' => $this->_catalogCategory,
7476
'catalogData' => $this->_getCleanMock('\Magento\Catalog\Helper\Data'),
@@ -176,4 +178,23 @@ public function testAddCatalogToTopMenuItemsWithFlat()
176178

177179
$this->_observer->addCatalogToTopmenuItems($observer);
178180
}
181+
182+
public function testGetMenuCategoryData()
183+
{
184+
$category = $this->getMock('Magento\Catalog\Model\Category', ['getId', 'getName'], [], '', false);
185+
$category->expects($this->once())->method('getId')->willReturn('id');
186+
$category->expects($this->once())->method('getName')->willReturn('name');
187+
$this->_catalogCategory->expects($this->once())->method('getCategoryUrl')->willReturn('url');
188+
189+
$this->assertEquals(
190+
[
191+
'name' => 'name',
192+
'id' => 'category-node-id',
193+
'url' => 'url',
194+
'is_active' => false,
195+
'has_active' => false,
196+
],
197+
$this->_observer->getMenuCategoryData($category)
198+
);
199+
}
179200
}

0 commit comments

Comments
 (0)