PageRenderTime 51ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/magento/module-backend/Test/Unit/Model/MenuTest.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 324 lines | 235 code | 65 blank | 24 comment | 0 complexity | b99dc7aa1f09a0247aceee076950018c MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Test\Unit\Model;
  7. class MenuTest extends \PHPUnit_Framework_TestCase
  8. {
  9. /**
  10. * @var \Magento\Backend\Model\Menu
  11. */
  12. protected $_model;
  13. /**
  14. * @var \Psr\Log\LoggerInterface
  15. */
  16. protected $_logger;
  17. /**
  18. * @var \Magento\Backend\Model\Menu\Item[]
  19. */
  20. protected $_items = [];
  21. protected function setUp()
  22. {
  23. $this->_items['item1'] = $this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false);
  24. $this->_items['item1']->expects($this->any())->method('getId')->will($this->returnValue('item1'));
  25. $this->_items['item2'] = $this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false);
  26. $this->_items['item2']->expects($this->any())->method('getId')->will($this->returnValue('item2'));
  27. $this->_items['item3'] = $this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false);
  28. $this->_items['item3']->expects($this->any())->method('getId')->will($this->returnValue('item3'));
  29. $this->_logger = $this->getMock('Psr\Log\LoggerInterface');
  30. $this->_model = new \Magento\Backend\Model\Menu($this->_logger);
  31. }
  32. public function testAdd()
  33. {
  34. $item = $this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false);
  35. $this->_model->add($item);
  36. $this->assertCount(1, $this->_model);
  37. $this->assertEquals($item, $this->_model[0]);
  38. }
  39. public function testAddDoLogAddAction()
  40. {
  41. $this->_model->add($this->_items['item1']);
  42. }
  43. public function testAddToItem()
  44. {
  45. $subMenu = $this->getMock('Magento\Backend\Model\Menu', [], [$this->_logger]);
  46. $subMenu->expects($this->once())->method("add")->with($this->_items['item2']);
  47. $this->_items['item1']->expects($this->once())->method("getChildren")->will($this->returnValue($subMenu));
  48. $this->_model->add($this->_items['item1']);
  49. $this->_model->add($this->_items['item2'], 'item1');
  50. }
  51. public function testAddWithSortIndexThatAlreadyExistsAddsItemOnNextAvailableIndex()
  52. {
  53. $this->_model->add($this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false));
  54. $this->_model->add($this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false));
  55. $this->_model->add($this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false));
  56. $this->_model->add($this->_items['item1'], null, 2);
  57. $this->assertCount(4, $this->_model);
  58. $this->assertEquals($this->_items['item1'], $this->_model[3]);
  59. }
  60. public function testAddSortsItemsByTheirSortIndex()
  61. {
  62. $this->_model->add($this->_items['item1'], null, 10);
  63. $this->_model->add($this->_items['item2'], null, 20);
  64. $this->_model->add($this->_items['item3'], null, 15);
  65. $this->assertCount(3, $this->_model);
  66. $itemsOrdered = [];
  67. foreach ($this->_model as $item) {
  68. /** @var $item \Magento\Backend\Model\Menu\Item */
  69. $itemsOrdered[] = $item->getId();
  70. }
  71. $this->assertEquals(['item1', 'item3', 'item2'], $itemsOrdered);
  72. }
  73. public function testGet()
  74. {
  75. $this->_model->add($this->_items['item1']);
  76. $this->_model->add($this->_items['item2']);
  77. $this->assertEquals($this->_items['item1'], $this->_model[0]);
  78. $this->assertEquals($this->_items['item2'], $this->_model[1]);
  79. $this->assertEquals($this->_items['item1'], $this->_model->get('item1'));
  80. $this->assertEquals($this->_items['item2'], $this->_model->get('item2'));
  81. }
  82. public function testGetRecursive()
  83. {
  84. $menu1 = new \Magento\Backend\Model\Menu($this->_logger);
  85. $menu2 = new \Magento\Backend\Model\Menu($this->_logger);
  86. $this->_items['item1']->expects($this->any())->method('hasChildren')->will($this->returnValue(true));
  87. $this->_items['item1']->expects($this->any())->method('getChildren')->will($this->returnValue($menu1));
  88. $this->_model->add($this->_items['item1']);
  89. $this->_items['item2']->expects($this->any())->method('hasChildren')->will($this->returnValue(true));
  90. $this->_items['item2']->expects($this->any())->method('getChildren')->will($this->returnValue($menu2));
  91. $menu1->add($this->_items['item2']);
  92. $this->_items['item3']->expects($this->any())->method('hasChildren')->will($this->returnValue(false));
  93. $menu2->add($this->_items['item3']);
  94. $this->assertEquals($this->_items['item1'], $this->_model->get('item1'));
  95. $this->assertEquals($this->_items['item2'], $this->_model->get('item2'));
  96. $this->assertEquals($this->_items['item3'], $this->_model->get('item3'));
  97. }
  98. public function testMove()
  99. {
  100. $this->_model->add($this->_items['item1']);
  101. $this->_model->add($this->_items['item2']);
  102. $this->_model->add($this->_items['item3']);
  103. $subMenu = $this->getMock(
  104. 'Magento\Backend\Model\Menu',
  105. [],
  106. [$this->getMock('Psr\Log\LoggerInterface')]
  107. );
  108. $subMenu->expects($this->once())->method("add")->with($this->_items['item3']);
  109. $this->_items['item1']->expects($this->once())->method("getChildren")->will($this->returnValue($subMenu));
  110. $this->_model->move('item3', 'item1');
  111. $this->assertCount(2, $this->_model);
  112. $this->assertFalse(isset($this->_model[2]), "ttt");
  113. }
  114. /**
  115. * @expectedException \InvalidArgumentException
  116. */
  117. public function testMoveNonExistentItemThrowsException()
  118. {
  119. $this->_model->add($this->_items['item1']);
  120. $this->_model->add($this->_items['item2']);
  121. $this->_model->add($this->_items['item3']);
  122. $this->_model->move('item4', 'item1');
  123. }
  124. /**
  125. * @expectedException \InvalidArgumentException
  126. */
  127. public function testMoveToNonExistentItemThrowsException()
  128. {
  129. $this->_model->add($this->_items['item1']);
  130. $this->_model->add($this->_items['item2']);
  131. $this->_model->add($this->_items['item3']);
  132. $this->_model->move('item3', 'item4');
  133. }
  134. public function testRemoveRemovesMenuItem()
  135. {
  136. $this->_model->add($this->_items['item1']);
  137. $this->assertCount(1, $this->_model);
  138. $this->assertEquals($this->_items['item1'], $this->_model->get('item1'));
  139. $this->_model->remove('item1');
  140. $this->assertCount(0, $this->_model);
  141. $this->assertNull($this->_model->get('item1'));
  142. }
  143. public function testRemoveRemovesMenuItemRecursively()
  144. {
  145. $menuMock = $this->getMock(
  146. 'Magento\Backend\Model\Menu',
  147. [],
  148. [$this->getMock('Psr\Log\LoggerInterface')]
  149. );
  150. $menuMock->expects($this->once())->method('remove')->with($this->equalTo('item2'));
  151. $this->_items['item1']->expects($this->any())->method('hasChildren')->will($this->returnValue(true));
  152. $this->_items['item1']->expects($this->any())->method('getChildren')->will($this->returnValue($menuMock));
  153. $this->_model->add($this->_items['item1']);
  154. $this->_model->remove('item2');
  155. }
  156. public function testRemoveDoLogRemoveAction()
  157. {
  158. $this->_model->add($this->_items['item1']);
  159. $this->_model->remove('item1');
  160. }
  161. public function testReorderReordersItemOnTopLevel()
  162. {
  163. $this->_model->add($this->_items['item1'], null, 10);
  164. $this->_model->add($this->_items['item2'], null, 20);
  165. $this->assertEquals($this->_items['item2'], $this->_model[20]);
  166. $this->_model->reorder('item2', 5);
  167. $this->assertEquals($this->_items['item2'], $this->_model[5]);
  168. $this->assertFalse(isset($this->_model[20]));
  169. }
  170. public function testReorderReordersItemOnItsLevel()
  171. {
  172. $this->_logger->expects($this->any())->method('log');
  173. $subMenu = new \Magento\Backend\Model\Menu($this->_logger);
  174. $this->_items['item1']->expects($this->any())->method("hasChildren")->will($this->returnValue(true));
  175. $this->_items['item1']->expects($this->any())->method("getChildren")->will($this->returnValue($subMenu));
  176. $this->_model->add($this->_items['item1']);
  177. $this->_model->add($this->_items['item2'], 'item1', 10);
  178. $this->_model->add($this->_items['item3'], 'item1', 20);
  179. $this->_model->reorder('item2', 25);
  180. $subMenu->reorder('item3', 30);
  181. $this->assertEquals($this->_items['item2'], $subMenu[25]);
  182. $this->assertEquals($this->_items['item3'], $subMenu[30]);
  183. }
  184. public function testIsLast()
  185. {
  186. $this->_model->add($this->_items['item1'], null, 10);
  187. $this->_model->add($this->_items['item2'], null, 16);
  188. $this->_model->add($this->_items['item3'], null, 15);
  189. $this->assertTrue($this->_model->isLast($this->_items['item2']));
  190. $this->assertFalse($this->_model->isLast($this->_items['item3']));
  191. }
  192. public function testGetFirstAvailableReturnsLeafNode()
  193. {
  194. $item = $this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false);
  195. $item->expects($this->never())->method('getFirstAvailable');
  196. $this->_model->add($item);
  197. $this->_items['item1']->expects($this->once())->method('isAllowed')->will($this->returnValue(true));
  198. $this->_items['item1']->expects($this->once())->method('isDisabled')->will($this->returnValue(false));
  199. $this->_items['item1']->expects($this->once())->method('hasChildren');
  200. $this->_model->add($this->_items['item1']);
  201. $this->assertEquals($this->_items['item1'], $this->_model->getFirstAvailable());
  202. }
  203. public function testGetFirstAvailableReturnsOnlyAllowedAndNotDisabledItem()
  204. {
  205. $this->_items['item1']->expects($this->exactly(1))->method('isAllowed')->will($this->returnValue(true));
  206. $this->_items['item1']->expects($this->exactly(1))->method('isDisabled')->will($this->returnValue(true));
  207. $this->_model->add($this->_items['item1']);
  208. $this->_items['item2']->expects($this->exactly(1))->method('isAllowed')->will($this->returnValue(false));
  209. $this->_model->add($this->_items['item2']);
  210. $this->_items['item3']->expects($this->exactly(1))->method('isAllowed')->will($this->returnValue(true));
  211. $this->_items['item3']->expects($this->exactly(1))->method('isDisabled')->will($this->returnValue(false));
  212. $this->_model->add($this->_items['item3']);
  213. $this->assertEquals($this->_items['item3'], $this->_model->getFirstAvailable());
  214. }
  215. public function testMultipleIterationsWorkProperly()
  216. {
  217. $this->_model->add($this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false));
  218. $this->_model->add($this->getMock('Magento\Backend\Model\Menu\Item', [], [], '', false));
  219. $this->_model->add($this->_items['item1']);
  220. $this->_model->add($this->_items['item2']);
  221. $items = [];
  222. /** @var $item \Magento\Backend\Model\Menu\Item */
  223. foreach ($this->_model as $item) {
  224. $items[] = $item->getId();
  225. }
  226. $items2 = [];
  227. foreach ($this->_model as $item) {
  228. $items2[] = $item->getId();
  229. }
  230. $this->assertEquals($items, $items2);
  231. }
  232. /**
  233. * Test reset iterator to first element before each foreach
  234. */
  235. public function testNestedLoop()
  236. {
  237. $this->_model->add($this->_items['item1']);
  238. $this->_model->add($this->_items['item2']);
  239. $this->_model->add($this->_items['item3']);
  240. $expected = [
  241. 'item1' => ['item1', 'item2', 'item3'],
  242. 'item2' => ['item1', 'item2', 'item3'],
  243. 'item3' => ['item1', 'item2', 'item3'],
  244. ];
  245. $actual = [];
  246. foreach ($this->_model as $valLoop1) {
  247. $keyLevel1 = $valLoop1->getId();
  248. foreach ($this->_model as $valLoop2) {
  249. $actual[$keyLevel1][] = $valLoop2->getId();
  250. }
  251. }
  252. $this->assertEquals($expected, $actual);
  253. }
  254. public function testSerialize()
  255. {
  256. $this->assertNotEmpty($this->_model->serialize());
  257. $this->_model->add($this->_items['item1']);
  258. }
  259. }