ScheduledStructureTest.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\View\Test\Unit\Layout;
  7. use \Magento\Framework\View\Layout\ScheduledStructure;
  8. /**
  9. * Test class for \Magento\Framework\View\Layout\ScheduledStructure
  10. */
  11. class ScheduledStructureTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var ScheduledStructure
  15. */
  16. protected $model;
  17. /**
  18. * @var array
  19. */
  20. protected $scheduledData = [];
  21. /**
  22. * @return void
  23. */
  24. protected function setUp()
  25. {
  26. $this->scheduledData = [
  27. 'scheduledStructure' => [
  28. 'element1' => ['data', 'of', 'element', '1'],
  29. 'element2' => ['data', 'of', 'element', '2'],
  30. 'element3' => ['data', 'of', 'element', '3'],
  31. 'element4' => ['data', 'of', 'element', '4'],
  32. 'element5' => ['data', 'of', 'element', '5'],
  33. ],
  34. 'scheduledElements' => [
  35. 'element1' => ['data', 'of', 'element', '1'],
  36. 'element2' => ['data', 'of', 'element', '2'],
  37. 'element3' => ['data', 'of', 'element', '3'],
  38. 'element4' => ['data', 'of', 'element', '4'],
  39. 'element5' => ['data', 'of', 'element', '5'],
  40. 'element9' => ['data', 'of', 'element', '9'],
  41. ],
  42. 'scheduledMoves' => [
  43. 'element1' => ['data', 'of', 'element', 'to', 'move', '1'],
  44. 'element4' => ['data', 'of', 'element', 'to', 'move', '4'],
  45. 'element6' => ['data', 'of', 'element', 'to', 'move', '6'],
  46. ],
  47. 'scheduledRemoves' => [
  48. 'element2' => ['data', 'of', 'element', 'to', 'remove', '2'],
  49. 'element3' => ['data', 'of', 'element', 'to', 'remove', '3'],
  50. 'element6' => ['data', 'of', 'element', 'to', 'remove', '6'],
  51. 'element7' => ['data', 'of', 'element', 'to', 'remove', '7'],
  52. ],
  53. 'scheduledPaths' => [
  54. 'path1' => 'path 1',
  55. 'path2' => 'path 2',
  56. 'path3' => 'path 3',
  57. 'path4' => 'path 4',
  58. ],
  59. ];
  60. $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  61. $this->model = $helperObjectManager->getObject(
  62. \Magento\Framework\View\Layout\ScheduledStructure::class,
  63. ['data' => $this->scheduledData]
  64. );
  65. }
  66. /**
  67. * @return void
  68. */
  69. public function testGetListToMove()
  70. {
  71. /**
  72. * Only elements that are present in elements list and specified in list to move can be moved
  73. */
  74. $expected = ['element1', 'element4'];
  75. $this->assertEquals($expected, $this->model->getListToMove());
  76. }
  77. /**
  78. * @return void
  79. */
  80. public function testGetListToRemove()
  81. {
  82. /**
  83. * Only elements that are present in elements list and specified in list to remove can be removed
  84. */
  85. $expected = ['element2', 'element3'];
  86. $this->assertEquals($expected, $this->model->getListToRemove());
  87. }
  88. /**
  89. * @return void
  90. */
  91. public function testGetElements()
  92. {
  93. $this->assertEquals($this->scheduledData['scheduledElements'], $this->model->getElements());
  94. }
  95. /**
  96. * @return void
  97. */
  98. public function testGetElement()
  99. {
  100. $expected = $this->scheduledData['scheduledElements']['element2'];
  101. $this->assertEquals($expected, $this->model->getElement('element2'));
  102. $default = ['some', 'default', 'value'];
  103. $this->assertEquals($default, $this->model->getElement('not_existing_element', $default));
  104. }
  105. /**
  106. * @return void
  107. */
  108. public function testIsElementsEmpty()
  109. {
  110. $this->assertFalse($this->model->isElementsEmpty());
  111. $this->model->flushScheduledStructure();
  112. $this->assertTrue($this->model->isElementsEmpty());
  113. }
  114. /**
  115. * @return void
  116. */
  117. public function testSetElement()
  118. {
  119. $data = ['some', 'new', 'data'];
  120. /** Test add new element */
  121. $this->assertFalse($this->model->hasElement('new_element'));
  122. $this->model->setElement('new_element', $data);
  123. $this->assertEquals($data, $this->model->getElement('new_element'));
  124. /** Test override existing element */
  125. $this->assertTrue($this->model->hasElement('element1'));
  126. $this->model->setElement('element1', $data);
  127. $this->assertEquals($data, $this->model->getElement('element1'));
  128. }
  129. /**
  130. * @return void
  131. */
  132. public function testHasElement()
  133. {
  134. $this->assertFalse($this->model->hasElement('not_existing_element'));
  135. $this->assertTrue($this->model->hasElement('element1'));
  136. }
  137. /**
  138. * @return void
  139. */
  140. public function testUnsetElement()
  141. {
  142. $this->assertTrue($this->model->hasElement('element1'));
  143. $this->model->unsetElement('element1');
  144. $this->assertFalse($this->model->hasElement('element1'));
  145. }
  146. /**
  147. * @return void
  148. */
  149. public function testGetElementToMove()
  150. {
  151. $this->assertEquals(
  152. $this->scheduledData['scheduledMoves']['element1'],
  153. $this->model->getElementToMove('element1')
  154. );
  155. $default = ['some', 'data'];
  156. $this->assertEquals($default, $this->model->getElementToMove('not_existing_element', $default));
  157. }
  158. /**
  159. * @return void
  160. */
  161. public function getIfconfigElement()
  162. {
  163. $this->assertEquals(
  164. $this->scheduledData['scheduledIfconfig']['element1'],
  165. $this->model->getIfconfigElement('element1')
  166. );
  167. $default = ['some', 'data'];
  168. $this->assertEquals($default, $this->model->getIfconfigElement('not_existing_element', $default));
  169. }
  170. /**
  171. * @return void
  172. */
  173. public function testSetElementToMove()
  174. {
  175. $data = ['some', 'new', 'data', 'element', 'to', 'move'];
  176. /** Test add new element */
  177. $this->assertFalse($this->model->hasElement('new_element'));
  178. $this->model->setElementToMove('new_element', $data);
  179. $this->assertEquals($data, $this->model->getElementToMove('new_element'));
  180. /** Test override existing element */
  181. $this->assertNotEquals($data, $this->model->getElementToMove('element1'));
  182. $this->model->setElementToMove('element1', $data);
  183. $this->assertEquals($data, $this->model->getElementToMove('element1'));
  184. }
  185. /**
  186. * @return void
  187. */
  188. public function testUnsetElementFromListToRemove()
  189. {
  190. $this->assertContains('element2', $this->model->getListToRemove());
  191. $this->model->unsetElementFromListToRemove('element2');
  192. $this->assertNotContains('element2', $this->model->getListToRemove());
  193. }
  194. /**
  195. * @return void
  196. */
  197. public function testSetElementToRemoveList()
  198. {
  199. $this->assertNotContains('element1', $this->model->getListToRemove());
  200. $this->model->setElementToRemoveList('element1');
  201. $this->assertContains('element1', $this->model->getListToRemove());
  202. }
  203. /**
  204. * @return void
  205. */
  206. public function testGetStructure()
  207. {
  208. $this->assertEquals($this->scheduledData['scheduledStructure'], $this->model->getStructure());
  209. }
  210. /**
  211. * @return void
  212. */
  213. public function testGetStructureElement()
  214. {
  215. $expected = $this->scheduledData['scheduledStructure']['element2'];
  216. $this->assertEquals($expected, $this->model->getStructureElement('element2'));
  217. $default = ['some', 'default', 'value'];
  218. $this->assertEquals($default, $this->model->getStructureElement('not_existing_element', $default));
  219. }
  220. /**
  221. * @return void
  222. */
  223. public function testIsStructureEmpty()
  224. {
  225. $this->assertFalse($this->model->isStructureEmpty());
  226. $this->model->flushScheduledStructure();
  227. $this->assertTrue($this->model->isStructureEmpty());
  228. }
  229. /**
  230. * @return void
  231. */
  232. public function testHasStructureElement()
  233. {
  234. $this->assertTrue($this->model->hasStructureElement('element1'));
  235. $this->assertFalse($this->model->hasStructureElement('not_existing_element'));
  236. }
  237. /**
  238. * @return void
  239. */
  240. public function testSetStructureElement()
  241. {
  242. $data = ['some', 'new', 'data', 'structure', 'element'];
  243. /** Test add new structure element */
  244. $this->assertFalse($this->model->hasStructureElement('new_element'));
  245. $this->model->setStructureElement('new_element', $data);
  246. $this->assertEquals($data, $this->model->getStructureElement('new_element'));
  247. /** Test override existing structure element */
  248. $this->assertTrue($this->model->hasStructureElement('element1'));
  249. $this->model->setStructureElement('element1', $data);
  250. $this->assertEquals($data, $this->model->getStructureElement('element1'));
  251. }
  252. /**
  253. * @return void
  254. */
  255. public function testUnsetStructureElement()
  256. {
  257. $this->assertTrue($this->model->hasStructureElement('element1'));
  258. $this->model->unsetStructureElement('element1');
  259. $this->assertFalse($this->model->hasStructureElement('element1'));
  260. }
  261. /**
  262. * @return void
  263. */
  264. public function testGetPaths()
  265. {
  266. $this->assertEquals($this->scheduledData['scheduledPaths'], $this->model->getPaths());
  267. }
  268. /**
  269. * @return void
  270. */
  271. public function testGetPath()
  272. {
  273. $this->assertEquals($this->scheduledData['scheduledPaths']['path1'], $this->model->getPath('path1'));
  274. $default = ['some', 'data'];
  275. $this->assertEquals($default, $this->model->getPath('not_existing_element', $default));
  276. }
  277. /**
  278. * @return void
  279. */
  280. public function testHasPath()
  281. {
  282. $this->assertTrue($this->model->hasPath('path1'));
  283. $this->assertFalse($this->model->hasPath('not_existing_element'));
  284. }
  285. /**
  286. * @return void
  287. */
  288. public function testSetPathElement()
  289. {
  290. $data = ['some', 'new', 'data', 'path'];
  291. /** Test add new structure element */
  292. $this->assertFalse($this->model->hasPath('new_element'));
  293. $this->model->setPathElement('new_element', $data);
  294. $this->assertEquals($data, $this->model->getPath('new_element'));
  295. /** Test override existing structure element */
  296. $this->assertTrue($this->model->hasPath('path1'));
  297. $this->model->setPathElement('path1', $data);
  298. $this->assertEquals($data, $this->model->getPath('path1'));
  299. }
  300. /**
  301. * @return void
  302. */
  303. public function testUnsetPathElement()
  304. {
  305. $this->assertTrue($this->model->hasPath('path1'));
  306. $this->model->unsetPathElement('path1');
  307. $this->assertFalse($this->model->hasPath('path1'));
  308. }
  309. /**
  310. * @return void
  311. */
  312. public function testFlushPaths()
  313. {
  314. $this->assertNotEmpty($this->model->getPaths());
  315. $this->model->flushPaths();
  316. $this->assertEmpty($this->model->getPaths());
  317. }
  318. /**
  319. * @return void
  320. */
  321. public function testFlushScheduledStructure()
  322. {
  323. $this->assertNotEmpty($this->model->getPaths());
  324. $this->assertNotEmpty($this->model->getElements());
  325. $this->assertNotEmpty($this->model->getStructure());
  326. $this->model->flushScheduledStructure();
  327. $this->assertEmpty($this->model->getPaths());
  328. $this->assertEmpty($this->model->getElements());
  329. $this->assertEmpty($this->model->getStructure());
  330. }
  331. /**
  332. * @return void
  333. */
  334. public function testSetElementToBrokenParentList()
  335. {
  336. $element = 'element9';
  337. $expectedToRemove = ['element2', 'element3'];
  338. $expectedToRemoveWithBroken = ['element2', 'element3', 'element9'];
  339. $this->assertEquals($expectedToRemove, $this->model->getListToRemove());
  340. $this->model->setElementToBrokenParentList($element);
  341. $this->assertEquals($expectedToRemoveWithBroken, $this->model->getListToRemove());
  342. $this->model->unsetElementFromBrokenParentList($element);
  343. $this->assertEquals($expectedToRemove, $this->model->getListToRemove());
  344. }
  345. /**
  346. * @return void
  347. */
  348. public function testSetElementToSortList()
  349. {
  350. list($parentName, $name, $sibling, $isAfter, $element) = $this->getDataSort();
  351. $elementsList = [$name => $element];
  352. $this->assertArrayNotHasKey($name, $this->model->getListToSort());
  353. $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
  354. $this->assertEquals($elementsList, $this->model->getListToSort());
  355. }
  356. /**
  357. * @return void
  358. */
  359. public function testGetElementToSortEmpty()
  360. {
  361. $this->assertEmpty($this->model->getElementToSort('test'));
  362. }
  363. /**
  364. * @return void
  365. */
  366. public function testGetElementToSort()
  367. {
  368. list($parentName, $name, $sibling, $isAfter, $element) = $this->getDataSort();
  369. $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
  370. $this->assertEquals($element, $this->model->getElementToSort($name));
  371. }
  372. /**
  373. * @return void
  374. */
  375. public function testUnsetElementToSort()
  376. {
  377. list($parentName, $name, $sibling, $isAfter) = $this->getDataSort();
  378. $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
  379. $this->assertArrayHasKey($name, $this->model->getListToSort());
  380. $this->model->unsetElementToSort($name);
  381. $this->assertArrayNotHasKey($name, $this->model->getListToSort());
  382. }
  383. /**
  384. * @return void
  385. */
  386. public function testIsListToSortEmpty()
  387. {
  388. list($parentName, $name, $sibling, $isAfter) = $this->getDataSort();
  389. $this->assertTrue($this->model->isListToSortEmpty());
  390. $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
  391. $this->assertFalse($this->model->isListToSortEmpty());
  392. }
  393. /**
  394. * @return array
  395. */
  396. protected function getDataSort()
  397. {
  398. return [
  399. 'parent name',
  400. 'element name',
  401. 'sibling',
  402. false,
  403. [
  404. ScheduledStructure::ELEMENT_NAME => 'element name',
  405. ScheduledStructure::ELEMENT_PARENT_NAME => 'parent name',
  406. ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING => 'sibling',
  407. ScheduledStructure::ELEMENT_IS_AFTER => false
  408. ]
  409. ];
  410. }
  411. }