Skip to content

Commit 9f03024

Browse files
author
olysenko
committed
MAGETWO-63716: Add target to admin menu element
1 parent 4faa58f commit 9f03024

File tree

11 files changed

+334
-19
lines changed

11 files changed

+334
-19
lines changed

app/code/Magento/Backend/Block/AnchorRenderer.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ public function __construct(
3636
}
3737

3838
/**
39-
* Render menu item anchor
39+
* Render menu item anchor.
4040
*
41-
* @param Item|null $activeItem
41+
* @param Item|false $activeItem Can be false if menu item is inaccessible
42+
* but was triggered directly using controller. It is a legacy code behaviour.
4243
* @param Item $menuItem
4344
* @param int $level
4445
* @return string

app/code/Magento/Backend/Block/Menu.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class Menu extends \Magento\Backend\Block\Template
3838
/**
3939
* Current selected item
4040
*
41-
* @var \Magento\Backend\Model\Menu\Item|null
41+
* @var \Magento\Backend\Model\Menu\Item|false|null
4242
*/
4343
protected $_activeItemModel = null;
4444

@@ -405,14 +405,14 @@ public function renderNavigation($menu, $level = 0, $limit = 0, $colBrakes = [])
405405
/**
406406
* Get current selected menu item
407407
*
408-
* @return \Magento\Backend\Model\Menu\Item|null
408+
* @return \Magento\Backend\Model\Menu\Item|false
409409
*/
410410
public function getActiveItemModel()
411411
{
412412
if (is_null($this->_activeItemModel)) {
413413
$this->_activeItemModel = $this->getMenuModel()->get($this->getActive());
414414
if (false == $this->_activeItemModel instanceof \Magento\Backend\Model\Menu\Item) {
415-
$this->_activeItemModel = null;
415+
$this->_activeItemModel = false;
416416
}
417417
}
418418
return $this->_activeItemModel;

app/code/Magento/Backend/Block/MenuItemChecker.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,14 @@ class MenuItemChecker
1515
/**
1616
* Check whether given item is currently selected
1717
*
18-
* @param Item|null $activeItem,
18+
* @param Item|false $activeItem Can be false if menu item is inaccessible
19+
* but was triggered directly using controller. It is a legacy code behaviour.
1920
* @param Item $item
2021
* @param int $level
2122
* @return bool
2223
*/
23-
public function isItemActive(
24-
$activeItem,
25-
Item $item,
26-
$level
27-
) {
24+
public function isItemActive($activeItem, Item $item, $level)
25+
{
2826
$output = false;
2927

3028
if ($level == 0

app/code/Magento/Backend/Controller/Adminhtml/System/Store/Index.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@
66
*/
77
namespace Magento\Backend\Controller\Adminhtml\System\Store;
88

9+
use Magento\Framework\Controller\ResultFactory;
10+
911
class Index extends \Magento\Backend\Controller\Adminhtml\System\Store
1012
{
1113
/**
1214
* @return \Magento\Backend\Model\View\Result\Page
1315
*/
1416
public function execute()
1517
{
16-
$resultPage = $this->resultPageFactory->create();
18+
/** @var \Magento\Backend\Model\View\Result\Page $resultPage */
19+
$resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
20+
$resultPage->setActiveMenu('Magento_Backend::system_store');
21+
$resultPage->addBreadcrumb(__('Stores'), __('Stores'));
22+
$resultPage->addBreadcrumb(__('All Stores'), __('All Stores'));
1723
$resultPage->getConfig()->getTitle()->prepend(__('Stores'));
18-
1924
return $resultPage;
2025
}
2126
}

app/code/Magento/Backend/Test/Unit/Block/MenuTest.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ protected function setUp()
7979
$this->activeItemMock = $this->getMockBuilder(Item::class)
8080
->disableOriginalConstructor()
8181
->getMock();
82-
8382
$this->urlMock = $this->getMockBuilder(UrlInterface::class)
8483
->disableOriginalConstructor()
8584
->getMock();
@@ -142,6 +141,6 @@ public function testGetActiveItemModelMenuIsNull()
142141
->method('get')
143142
->willReturn(null);
144143

145-
$this->assertNull($this->menu->getActiveItemModel());
144+
$this->assertFalse($this->menu->getActiveItemModel());
146145
}
147146
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
/**
3+
*
4+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
namespace Magento\Backend\Test\Unit\Controller\Adminhtml\System\Store;
8+
9+
use Magento\Framework\Controller\ResultFactory;
10+
use Magento\Backend\Model\View\Result\Page;
11+
use Magento\Backend\Controller\Adminhtml\System\Store\Index;
12+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
13+
use Magento\Framework\View\Page\Config;
14+
use Magento\Framework\View\Page\Title;
15+
16+
class IndexTest extends \PHPUnit_Framework_TestCase
17+
{
18+
/**
19+
* @var ObjectManagerHelper
20+
*/
21+
private $objectManagerHelper;
22+
23+
/**
24+
* @var ResultFactory|\PHPUnit_Framework_MockObject_MockObject
25+
*/
26+
private $resultFactoryMock;
27+
28+
/**
29+
* @var Page|\PHPUnit_Framework_MockObject_MockObject
30+
*/
31+
private $pageMock;
32+
33+
/**
34+
* @var Config|\PHPUnit_Framework_MockObject_MockObject
35+
*/
36+
private $pageConfigMock;
37+
38+
/**
39+
* @var Title|\PHPUnit_Framework_MockObject_MockObject
40+
*/
41+
private $titleMock;
42+
43+
/**
44+
* @var Index
45+
*/
46+
private $indexController;
47+
48+
public function setUp()
49+
{
50+
$this->resultFactoryMock = $this->getMockBuilder(ResultFactory::class)
51+
->disableOriginalConstructor()
52+
->getMock();
53+
$this->pageMock = $this->getMockBuilder(Page::class)
54+
->disableOriginalConstructor()
55+
->getMock();
56+
$this->pageConfigMock = $this->getMockBuilder(Config::class)
57+
->setMethods(['getTitle'])
58+
->disableOriginalConstructor()
59+
->getMock();
60+
$this->titleMock = $this->getMockBuilder(Title::class)
61+
->disableOriginalConstructor()
62+
->getMock();
63+
64+
$this->objectManagerHelper = new ObjectManagerHelper($this);
65+
$this->indexController = $this->objectManagerHelper->getObject(
66+
Index::class,
67+
[
68+
'resultFactory' => $this->resultFactoryMock
69+
]
70+
);
71+
}
72+
73+
public function testIndex()
74+
{
75+
$this->resultFactoryMock->expects($this->once())
76+
->method('create')
77+
->with(ResultFactory::TYPE_PAGE)
78+
->willReturn($this->pageMock);
79+
$this->pageMock->expects($this->once())
80+
->method('setActiveMenu')
81+
->with('Magento_Backend::system_store')
82+
->willReturnSelf();
83+
$this->pageMock->expects($this->exactly(2))
84+
->method('addBreadcrumb')
85+
->withConsecutive(
86+
[__('Stores'), __('Stores')],
87+
[__('All Stores'), __('All Stores')]
88+
);
89+
$this->pageMock->expects($this->once())
90+
->method('getConfig')
91+
->willReturn($this->pageConfigMock);
92+
$this->pageConfigMock->expects($this->once())->method('getTitle')->willReturn($this->titleMock);
93+
$this->titleMock->expects($this->once())->method('prepend')->with(__('Stores'))->willReturn($this->pageMock);
94+
95+
$this->assertSame($this->pageMock, $this->indexController->execute());
96+
}
97+
}

app/code/Magento/Reports/etc/adminhtml/menu.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@
2929
<add id="Magento_Reports::report_customers_orders" title="Order Count" translate="title" module="Magento_Reports" sortOrder="20" parent="Magento_Reports::report_customers" action="reports/report_customer/orders" resource="Magento_Reports::customers_orders"/>
3030
<add id="Magento_Reports::report_statistics" title="Statistics" translate="title" module="Magento_Reports" sortOrder="80" parent="Magento_Reports::report" resource="Magento_Reports::statistics"/>
3131
<add id="Magento_Reports::report_statistics_refresh" title="Refresh Statistics" translate="title" module="Magento_Reports" sortOrder="10" parent="Magento_Reports::report_statistics" action="reports/report_statistics" resource="Magento_Reports::statistics_refresh"/>
32-
<add id="Magento_Search::report_search_term" title="Search Terms" translate="title" module="Magento_Search" sortOrder="10" parent="Magento_Reports::report_marketing" action="search/term/report" resource="Magento_Search::search" />
32+
<add id="Magento_Search::report_search_term" title="Search Terms" translate="title" module="Magento_Search" sortOrder="10" parent="Magento_Reports::report_marketing" action="search/term/report" resource="Magento_Reports::report_search" />
3333
</menu>
3434
</config>

app/code/Magento/Search/Controller/Adminhtml/Term.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected function createPage()
2424
{
2525
/** @var \Magento\Backend\Model\View\Result\Page $resultPage */
2626
$resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
27-
$resultPage->setActiveMenu('Magento_Search::search_term')
27+
$resultPage->setActiveMenu('Magento_Search::search_terms')
2828
->addBreadcrumb(__('Search'), __('Search'));
2929
return $resultPage;
3030
}

app/code/Magento/Search/Controller/Adminhtml/Term/Report.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public function execute()
2727
$this->_eventManager->dispatch('on_view_report', ['report' => 'search']);
2828
/** @var \Magento\Backend\Model\View\Result\Page $resultPage */
2929
$resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
30-
$resultPage->setActiveMenu('Magento_Reports::report_search')
30+
$resultPage->setActiveMenu('Magento_Search::report_search_term')
3131
->addBreadcrumb(__('Reports'), __('Reports'))
3232
->addBreadcrumb(__('Search Terms'), __('Search Terms'));
33-
$resultPage->getConfig()->getTitle()->set(__('Search Terms Report'));
33+
$resultPage->getConfig()->getTitle()->prepend(__('Search Terms Report'));
3434
return $resultPage;
3535
}
3636
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<?php
2+
/**
3+
*
4+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
namespace Magento\Search\Test\Unit\Controller\Adminhtml\Term;
8+
9+
use Magento\Framework\Controller\ResultFactory;
10+
use Magento\Backend\Model\View\Result\Page;
11+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
12+
use Magento\Framework\View\Page\Config;
13+
use Magento\Framework\View\Page\Title;
14+
use Magento\Search\Controller\Adminhtml\Term\Index;
15+
16+
class IndexTest extends \PHPUnit_Framework_TestCase
17+
{
18+
/**
19+
* @var ObjectManagerHelper
20+
*/
21+
private $objectManagerHelper;
22+
23+
/**
24+
* @var ResultFactory|\PHPUnit_Framework_MockObject_MockObject
25+
*/
26+
private $resultFactoryMock;
27+
28+
/**
29+
* @var Page|\PHPUnit_Framework_MockObject_MockObject
30+
*/
31+
private $pageMock;
32+
33+
/**
34+
* @var Config|\PHPUnit_Framework_MockObject_MockObject
35+
*/
36+
private $pageConfigMock;
37+
38+
/**
39+
* @var Title|\PHPUnit_Framework_MockObject_MockObject
40+
*/
41+
private $titleMock;
42+
43+
/**
44+
* @var Index
45+
*/
46+
private $indexController;
47+
48+
49+
public function setUp()
50+
{
51+
$this->resultFactoryMock = $this->getMockBuilder(ResultFactory::class)
52+
->disableOriginalConstructor()
53+
->getMock();
54+
$this->pageMock = $this->getMockBuilder(Page::class)
55+
->disableOriginalConstructor()
56+
->getMock();
57+
$this->pageConfigMock = $this->getMockBuilder(Config::class)
58+
->setMethods(['getTitle'])
59+
->disableOriginalConstructor()
60+
->getMock();
61+
$this->titleMock = $this->getMockBuilder(Title::class)
62+
->disableOriginalConstructor()
63+
->getMock();
64+
65+
$this->objectManagerHelper = new ObjectManagerHelper($this);
66+
$this->indexController = $this->objectManagerHelper->getObject(
67+
Index::class,
68+
[
69+
'resultFactory' => $this->resultFactoryMock
70+
]
71+
);
72+
}
73+
74+
public function testIndex()
75+
{
76+
$this->resultFactoryMock->expects($this->once())
77+
->method('create')
78+
->with(ResultFactory::TYPE_PAGE)
79+
->willReturn($this->pageMock);
80+
$this->pageMock->expects($this->once())
81+
->method('setActiveMenu')
82+
->with('Magento_Search::search_terms')
83+
->willReturnSelf();
84+
$this->pageMock->expects($this->exactly(2))
85+
->method('addBreadcrumb')
86+
->withConsecutive(
87+
[__('Search'), __('Search')],
88+
[__('Search'), __('Search')]
89+
);
90+
$this->pageMock->expects($this->once())
91+
->method('getConfig')
92+
->willReturn($this->pageConfigMock);
93+
$this->pageConfigMock->expects($this->once())->method('getTitle')->willReturn($this->titleMock);
94+
$this->titleMock->expects($this->once())
95+
->method('prepend')
96+
->with(__('Search Terms'))
97+
->willReturn($this->pageMock);
98+
99+
$this->assertSame($this->pageMock, $this->indexController->execute());
100+
}
101+
}

0 commit comments

Comments
 (0)