12 class MenuTest extends \PHPUnit\Framework\TestCase
32 private $objectManagerHelper;
36 $this->objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
37 $this->_items[
'item1'] = $this->createMock(\
Magento\Backend\Model\Menu\Item::class);
38 $this->_items[
'item1']->expects($this->any())->method(
'getId')->will($this->returnValue(
'item1'));
40 $this->_items[
'item2'] = $this->createMock(\
Magento\Backend\Model\Menu\Item::class);
41 $this->_items[
'item2']->expects($this->any())->method(
'getId')->will($this->returnValue(
'item2'));
43 $this->_items[
'item3'] = $this->createMock(\
Magento\Backend\Model\Menu\Item::class);
44 $this->_items[
'item3']->expects($this->any())->method(
'getId')->will($this->returnValue(
'item3'));
46 $this->_logger = $this->createMock(\Psr\Log\LoggerInterface::class);
48 $this->_model = $this->objectManagerHelper->getObject(
49 \
Magento\Backend\Model\Menu::class,
51 'logger' => $this->_logger
58 $item = $this->createMock(\
Magento\Backend\Model\Menu\Item::class);
59 $this->_model->add(
$item);
60 $this->assertCount(1, $this->_model);
61 $this->assertEquals(
$item, $this->_model[0]);
66 $result = $this->_model->add($this->_items[
'item1']);
72 $subMenu = $this->getMockBuilder(\
Magento\Backend\Model\Menu::class)->disableOriginalConstructor()->getMock();
73 $subMenu->expects($this->once())->method(
"add")->with($this->_items[
'item2']);
75 $this->_items[
'item1']->expects($this->once())->method(
"getChildren")->will($this->returnValue($subMenu));
77 $this->_model->add($this->_items[
'item1']);
78 $this->_model->add($this->_items[
'item2'],
'item1');
83 $this->_model->add($this->createMock(\
Magento\Backend\Model\Menu\Item::class));
84 $this->_model->add($this->createMock(\
Magento\Backend\Model\Menu\Item::class));
85 $this->_model->add($this->createMock(\
Magento\Backend\Model\Menu\Item::class));
87 $this->_model->add($this->_items[
'item1'],
null, 2);
88 $this->assertCount(4, $this->_model);
89 $this->assertEquals($this->_items[
'item1'], $this->_model[3]);
92 public function testAddSortsItemsByTheirSortIndex()
94 $this->_model->add($this->_items[
'item1'],
null, 10);
95 $this->_model->add($this->_items[
'item2'],
null, 20);
96 $this->_model->add($this->_items[
'item3'],
null, 15);
98 $this->assertCount(3, $this->_model);
100 foreach ($this->_model as
$item) {
102 $itemsOrdered[] =
$item->getId();
104 $this->assertEquals([
'item1',
'item3',
'item2'], $itemsOrdered);
109 $this->_model->add($this->_items[
'item1']);
110 $this->_model->add($this->_items[
'item2']);
112 $this->assertEquals($this->_items[
'item1'], $this->_model[0]);
113 $this->assertEquals($this->_items[
'item2'], $this->_model[1]);
114 $this->assertEquals($this->_items[
'item1'], $this->_model->get(\item1::class));
115 $this->assertEquals($this->_items[
'item2'], $this->_model->get(\item2::class));
120 $menuOne = $this->objectManagerHelper->getObject(
121 \
Magento\Backend\Model\Menu::class,
123 'logger' => $this->_logger
126 $menuTwo = $this->objectManagerHelper->getObject(
127 \
Magento\Backend\Model\Menu::class,
129 'logger' => $this->_logger
133 $this->_items[
'item1']->expects($this->any())->method(
'hasChildren')->will($this->returnValue(
true));
134 $this->_items[
'item1']->expects($this->any())->method(
'getChildren')->will($this->returnValue($menuOne));
135 $this->_model->add($this->_items[
'item1']);
137 $this->_items[
'item2']->expects($this->any())->method(
'hasChildren')->will($this->returnValue(
true));
138 $this->_items[
'item2']->expects($this->any())->method(
'getChildren')->will($this->returnValue($menuTwo));
139 $menuOne->add($this->_items[
'item2']);
141 $this->_items[
'item3']->expects($this->any())->method(
'hasChildren')->will($this->returnValue(
false));
142 $menuTwo->add($this->_items[
'item3']);
144 $this->assertEquals($this->_items[
'item1'], $this->_model->get(
'item1'));
145 $this->assertEquals($this->_items[
'item2'], $this->_model->get(
'item2'));
146 $this->assertEquals($this->_items[
'item3'], $this->_model->get(
'item3'));
151 $this->_model->add($this->_items[
'item1']);
152 $this->_model->add($this->_items[
'item2']);
153 $this->_model->add($this->_items[
'item3']);
155 $subMenu = $this->getMockBuilder(\
Magento\Backend\Model\Menu::class)->disableOriginalConstructor()->getMock();
156 $subMenu->expects($this->once())->method(
"add")->with($this->_items[
'item3']);
158 $this->_items[
'item1']->expects($this->once())->method(
"getChildren")->will($this->returnValue($subMenu));
160 $this->_model->move(
'item3',
'item1');
162 $this->assertCount(2, $this->_model);
163 $this->assertFalse(isset($this->_model[2]),
"ttt");
171 $this->_model->add($this->_items[
'item1']);
172 $this->_model->add($this->_items[
'item2']);
173 $this->_model->add($this->_items[
'item3']);
175 $this->_model->move(
'item4',
'item1');
183 $this->_model->add($this->_items[
'item1']);
184 $this->_model->add($this->_items[
'item2']);
185 $this->_model->add($this->_items[
'item3']);
187 $this->_model->move(
'item3',
'item4');
192 $this->_model->add($this->_items[
'item1']);
194 $this->assertCount(1, $this->_model);
195 $this->assertEquals($this->_items[
'item1'], $this->_model->get(
'item1'));
197 $this->_model->remove(
'item1');
198 $this->assertCount(0, $this->_model);
199 $this->assertNull($this->_model->get(
'item1'));
204 $menuMock = $this->getMockBuilder(\
Magento\Backend\Model\Menu::class)->disableOriginalConstructor()->getMock();
205 $menuMock->expects($this->once())->method(
'remove')->with($this->equalTo(
'item2'));
207 $this->_items[
'item1']->expects($this->any())->method(
'hasChildren')->will($this->returnValue(
true));
208 $this->_items[
'item1']->expects($this->any())->method(
'getChildren')->will($this->returnValue($menuMock));
209 $this->_model->add($this->_items[
'item1']);
211 $result = $this->_model->remove(
'item2');
217 $this->_model->add($this->_items[
'item1']);
218 $result = $this->_model->remove(
'item1');
224 $this->_model->add($this->_items[
'item1'],
null, 10);
225 $this->_model->add($this->_items[
'item2'],
null, 20);
227 $this->assertEquals($this->_items[
'item2'], $this->_model[20]);
228 $this->_model->reorder(
'item2', 5);
229 $this->assertEquals($this->_items[
'item2'], $this->_model[5]);
230 $this->assertFalse(isset($this->_model[20]));
235 $this->_logger->expects($this->any())->method(
'log');
237 $subMenu = $this->objectManagerHelper->getObject(
238 \
Magento\Backend\Model\Menu::class,
240 'logger' => $this->_logger
244 $this->_items[
'item1']->expects($this->any())->method(
"hasChildren")->will($this->returnValue(
true));
246 $this->_items[
'item1']->expects($this->any())->method(
"getChildren")->will($this->returnValue($subMenu));
248 $this->_model->add($this->_items[
'item1']);
249 $this->_model->add($this->_items[
'item2'],
'item1', 10);
250 $this->_model->add($this->_items[
'item3'],
'item1', 20);
252 $this->_model->reorder(
'item2', 25);
253 $subMenu->reorder(
'item3', 30);
255 $this->assertEquals($this->_items[
'item2'], $subMenu[25]);
256 $this->assertEquals($this->_items[
'item3'], $subMenu[30]);
261 $this->_model->add($this->_items[
'item1'],
null, 10);
262 $this->_model->add($this->_items[
'item2'],
null, 16);
263 $this->_model->add($this->_items[
'item3'],
null, 15);
265 $this->assertTrue($this->_model->isLast($this->_items[
'item2']));
266 $this->assertFalse($this->_model->isLast($this->_items[
'item3']));
271 $item = $this->createPartialMock(\
Magento\Backend\Model\Menu\Item::class, [
'getFirstAvailable',
'isAllowed']);
272 $item->expects($this->never())->method(
'getFirstAvailable');
273 $this->_model->add(
$item);
275 $this->_items[
'item1']->expects($this->once())->method(
'isAllowed')->will($this->returnValue(
true));
276 $this->_items[
'item1']->expects($this->once())->method(
'isDisabled')->will($this->returnValue(
false));
277 $this->_items[
'item1']->expects($this->once())->method(
'hasChildren');
278 $this->_model->add($this->_items[
'item1']);
280 $this->assertEquals($this->_items[
'item1'], $this->_model->getFirstAvailable());
285 $this->_items[
'item1']->expects($this->exactly(1))->method(
'isAllowed')->will($this->returnValue(
true));
286 $this->_items[
'item1']->expects($this->exactly(1))->method(
'isDisabled')->will($this->returnValue(
true));
287 $this->_model->add($this->_items[
'item1']);
289 $this->_items[
'item2']->expects($this->exactly(1))->method(
'isAllowed')->will($this->returnValue(
false));
290 $this->_model->add($this->_items[
'item2']);
292 $this->_items[
'item3']->expects($this->exactly(1))->method(
'isAllowed')->will($this->returnValue(
true));
293 $this->_items[
'item3']->expects($this->exactly(1))->method(
'isDisabled')->will($this->returnValue(
false));
294 $this->_model->add($this->_items[
'item3']);
296 $this->assertEquals($this->_items[
'item3'], $this->_model->getFirstAvailable());
299 public function testMultipleIterationsWorkProperly()
301 $this->_model->add($this->createMock(\
Magento\Backend\Model\Menu\Item::class));
302 $this->_model->add($this->createMock(\
Magento\Backend\Model\Menu\Item::class));
304 $this->_model->add($this->_items[
'item1']);
305 $this->_model->add($this->_items[
'item2']);
309 foreach ($this->_model as
$item) {
314 foreach ($this->_model as
$item) {
315 $itemsTwo[] =
$item->getId();
317 $this->assertEquals(
$items, $itemsTwo);
325 $this->_model->add($this->_items[
'item1']);
326 $this->_model->add($this->_items[
'item2']);
327 $this->_model->add($this->_items[
'item3']);
330 'item1' => [
'item1',
'item2',
'item3'],
331 'item2' => [
'item1',
'item2',
'item3'],
332 'item3' => [
'item1',
'item2',
'item3'],
335 foreach ($this->_model as $valLoopOne) {
336 $keyLevelOne = $valLoopOne->getId();
337 foreach ($this->_model as $valLoopTwo) {
338 $actual[$keyLevelOne][] = $valLoopTwo->getId();
341 $this->assertEquals($expected, $actual);
346 $serializerMock = $this->createMock(SerializerInterface::class);
347 $serializerMock->expects($this->once())
348 ->method(
'serialize')
349 ->with([[
'arrayData']])
350 ->willReturn(
'serializedString');
351 $menu = $this->objectManagerHelper->getObject(
352 \
Magento\Backend\Model\Menu::class,
354 'logger' => $this->_logger,
355 'serializer' => $serializerMock,
358 $itemMock = $this->createMock(\
Magento\Backend\Model\Menu\Item::class);
359 $itemMock->expects($this->any())->method(
'getId')->will($this->returnValue(
'item1'));
360 $itemMock->expects($this->once())
362 ->willReturn([
'arrayData']);
363 $menu->add($itemMock);
364 $this->assertEquals(
'serializedString', $menu->serialize());
369 $serializerMock = $this->createMock(SerializerInterface::class);
370 $serializerMock->expects($this->once())
371 ->method(
'unserialize')
372 ->willReturn([[
'unserializedData']]);
373 $menuItemFactoryMock = $this->createMock(Factory::class);
374 $menuItemFactoryMock->expects($this->once())
376 ->with([
'unserializedData']);
377 $menu = $this->objectManagerHelper->getObject(
378 \
Magento\Backend\Model\Menu::class,
380 'logger' => $this->_logger,
381 'serializer' => $serializerMock,
382 'menuItemFactory' => $menuItemFactoryMock,
385 $menu->unserialize(
'serializedString');