EditTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\UrlRewrite\Block\Cms\Page;
  7. /**
  8. * Test for \Magento\UrlRewrite\Block\Cms\Page\Edit
  9. * @magentoAppArea adminhtml
  10. */
  11. class EditTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * Test prepare layout
  15. *
  16. * @dataProvider prepareLayoutDataProvider
  17. *
  18. * @param array $blockAttributes
  19. * @param array $expected
  20. *
  21. * @magentoAppIsolation enabled
  22. */
  23. public function testPrepareLayout($blockAttributes, $expected)
  24. {
  25. /** @var $layout \Magento\Framework\View\LayoutInterface */
  26. $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  27. \Magento\Framework\View\LayoutInterface::class
  28. );
  29. /** @var $block \Magento\UrlRewrite\Block\Cms\Page\Edit */
  30. $block = $layout->createBlock(
  31. \Magento\UrlRewrite\Block\Cms\Page\Edit::class,
  32. '',
  33. ['data' => $blockAttributes]
  34. );
  35. $this->_checkSelector($block, $expected);
  36. $this->_checkLinks($block, $expected);
  37. $this->_checkButtons($block, $expected);
  38. $this->_checkForm($block, $expected);
  39. $this->_checkGrid($block, $expected);
  40. }
  41. /**
  42. * Check selector
  43. *
  44. * @param \Magento\UrlRewrite\Block\Cms\Page\Edit $block
  45. * @param array $expected
  46. */
  47. private function _checkSelector($block, $expected)
  48. {
  49. $layout = $block->getLayout();
  50. $blockName = $block->getNameInLayout();
  51. /** @var $selectorBlock \Magento\UrlRewrite\Block\Selector|bool */
  52. $selectorBlock = $layout->getChildBlock($blockName, 'selector');
  53. if ($expected['selector']) {
  54. $this->assertInstanceOf(
  55. \Magento\UrlRewrite\Block\Selector::class,
  56. $selectorBlock,
  57. 'Child block with entity selector is invalid'
  58. );
  59. } else {
  60. $this->assertFalse($selectorBlock, 'Child block with entity selector should not present in block');
  61. }
  62. }
  63. /**
  64. * Check links
  65. *
  66. * @param \Magento\UrlRewrite\Block\Cms\Page\Edit $block
  67. * @param array $expected
  68. */
  69. private function _checkLinks($block, $expected)
  70. {
  71. $layout = $block->getLayout();
  72. $blockName = $block->getNameInLayout();
  73. /** @var $cmsPageLinkBlock \Magento\UrlRewrite\Block\Link|bool */
  74. $cmsPageLinkBlock = $layout->getChildBlock($blockName, 'cms_page_link');
  75. if ($expected['cms_page_link']) {
  76. $this->assertInstanceOf(
  77. \Magento\UrlRewrite\Block\Link::class,
  78. $cmsPageLinkBlock,
  79. 'Child block with CMS page link is invalid'
  80. );
  81. $this->assertEquals(
  82. 'CMS page:',
  83. $cmsPageLinkBlock->getLabel(),
  84. 'Child block with CMS page has invalid item label'
  85. );
  86. $this->assertEquals(
  87. $expected['cms_page_link']['name'],
  88. $cmsPageLinkBlock->getItemName(),
  89. 'Child block with CMS page has invalid item name'
  90. );
  91. $this->assertRegExp(
  92. '/http:\/\/localhost\/index.php\/.*\/cms_page/',
  93. $cmsPageLinkBlock->getItemUrl(),
  94. 'Child block with CMS page contains invalid URL'
  95. );
  96. } else {
  97. $this->assertFalse($cmsPageLinkBlock, 'Child block with CMS page link should not present in block');
  98. }
  99. }
  100. /**
  101. * Check buttons
  102. *
  103. * @param \Magento\UrlRewrite\Block\Cms\Page\Edit $block
  104. * @param array $expected
  105. */
  106. private function _checkButtons($block, $expected)
  107. {
  108. $buttonsHtml = $block->getButtonsHtml();
  109. if (isset($expected['back_button'])) {
  110. if ($expected['back_button']) {
  111. if ($block->getCmsPage()->getId()) {
  112. $this->assertEquals(
  113. 1,
  114. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  115. '//button[contains(@class, "back") and contains(@onclick, "/cms_page")]',
  116. $buttonsHtml
  117. ),
  118. 'Back button is not present in CMS page URL rewrite edit block'
  119. );
  120. } else {
  121. $this->assertEquals(
  122. 1,
  123. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  124. '//button[contains(@class,"back")]',
  125. $buttonsHtml
  126. ),
  127. 'Back button is not present in CMS page URL rewrite edit block'
  128. );
  129. }
  130. } else {
  131. $this->assertEquals(
  132. 0,
  133. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  134. '//button[contains(@class,"back")]',
  135. $buttonsHtml
  136. ),
  137. 'Back button should not present in CMS page URL rewrite edit block'
  138. );
  139. }
  140. }
  141. if ($expected['save_button']) {
  142. $this->assertEquals(
  143. 1,
  144. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  145. '//button[contains(@class,"save")]',
  146. $buttonsHtml
  147. ),
  148. 'Save button is not present in CMS page URL rewrite edit block'
  149. );
  150. } else {
  151. $this->assertEquals(
  152. 0,
  153. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  154. '//button[contains(@class,"save")]',
  155. $buttonsHtml
  156. ),
  157. 'Save button should not present in CMS page URL rewrite edit block'
  158. );
  159. }
  160. if ($expected['reset_button']) {
  161. $this->assertEquals(
  162. 1,
  163. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  164. '//button[@title="Reset"]',
  165. $buttonsHtml
  166. ),
  167. 'Reset button is not present in CMS page URL rewrite edit block'
  168. );
  169. } else {
  170. $this->assertEquals(
  171. 0,
  172. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  173. '//button[@title="Reset"]',
  174. $buttonsHtml
  175. ),
  176. 'Reset button should not present in CMS page URL rewrite edit block'
  177. );
  178. }
  179. if ($expected['delete_button']) {
  180. $this->assertEquals(
  181. 1,
  182. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  183. '//button[contains(@class,"delete")]',
  184. $buttonsHtml
  185. ),
  186. 'Delete button is not present in CMS page URL rewrite edit block'
  187. );
  188. } else {
  189. $this->assertEquals(
  190. 0,
  191. \Magento\TestFramework\Helper\Xpath::getElementsCountForXpath(
  192. '//button[contains(@class,"delete")]',
  193. $buttonsHtml
  194. ),
  195. 'Delete button should not present in CMS page URL rewrite edit block'
  196. );
  197. }
  198. }
  199. /**
  200. * Check form
  201. *
  202. * @param \Magento\UrlRewrite\Block\Cms\Page\Edit $block
  203. * @param array $expected
  204. */
  205. private function _checkForm($block, $expected)
  206. {
  207. $layout = $block->getLayout();
  208. $blockName = $block->getNameInLayout();
  209. /** @var $formBlock \Magento\UrlRewrite\Block\Cms\Page\Edit\Form|bool */
  210. $formBlock = $layout->getChildBlock($blockName, 'form');
  211. if ($expected['form']) {
  212. $this->assertInstanceOf(
  213. \Magento\UrlRewrite\Block\Cms\Page\Edit\Form::class,
  214. $formBlock,
  215. 'Child block with form is invalid'
  216. );
  217. $this->assertSame(
  218. $expected['form']['cms_page'],
  219. $formBlock->getCmsPage(),
  220. 'Form block should have same CMS page attribute'
  221. );
  222. $this->assertSame(
  223. $expected['form']['url_rewrite'],
  224. $formBlock->getUrlRewrite(),
  225. 'Form block should have same URL rewrite attribute'
  226. );
  227. } else {
  228. $this->assertFalse($formBlock, 'Child block with form should not present in block');
  229. }
  230. }
  231. /**
  232. * Check grid
  233. *
  234. * @param \Magento\UrlRewrite\Block\Cms\Page\Edit $block
  235. * @param array $expected
  236. */
  237. private function _checkGrid($block, $expected)
  238. {
  239. $layout = $block->getLayout();
  240. $blockName = $block->getNameInLayout();
  241. /** @var $gridBlock \Magento\UrlRewrite\Block\Cms\Page\Grid|bool */
  242. $gridBlock = $layout->getChildBlock($blockName, 'cms_pages_grid');
  243. if ($expected['cms_pages_grid']) {
  244. $this->assertInstanceOf(
  245. \Magento\UrlRewrite\Block\Cms\Page\Grid::class,
  246. $gridBlock,
  247. 'Child block with CMS pages grid is invalid'
  248. );
  249. } else {
  250. $this->assertFalse($gridBlock, 'Child block with CMS pages grid should not present in block');
  251. }
  252. }
  253. /**
  254. * Data provider
  255. *
  256. * @return array
  257. */
  258. public function prepareLayoutDataProvider()
  259. {
  260. /** @var $urlRewrite \Magento\UrlRewrite\Model\UrlRewrite */
  261. $urlRewrite = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  262. \Magento\UrlRewrite\Model\UrlRewrite::class
  263. );
  264. /** @var $cmsPage \Magento\Cms\Model\Page */
  265. $cmsPage = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  266. \Magento\Cms\Model\Page::class,
  267. ['data' => ['page_id' => 1, 'title' => 'Test CMS Page']]
  268. );
  269. /** @var $existingUrlRewrite \Magento\UrlRewrite\Model\UrlRewrite */
  270. $existingUrlRewrite = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  271. \Magento\UrlRewrite\Model\UrlRewrite::class,
  272. ['data' => ['url_rewrite_id' => 1]]
  273. );
  274. return [
  275. // Creating URL rewrite when CMS page selected
  276. [
  277. ['cms_page' => $cmsPage, 'url_rewrite' => $urlRewrite],
  278. [
  279. 'selector' => false,
  280. 'cms_page_link' => ['name' => $cmsPage->getTitle()],
  281. 'back_button' => true,
  282. 'save_button' => true,
  283. 'reset_button' => false,
  284. 'delete_button' => false,
  285. 'form' => ['cms_page' => $cmsPage, 'url_rewrite' => $urlRewrite],
  286. 'cms_pages_grid' => false
  287. ]
  288. ],
  289. // Creating URL rewrite when CMS page not selected
  290. [
  291. ['url_rewrite' => $urlRewrite],
  292. [
  293. 'selector' => true,
  294. 'cms_page_link' => false,
  295. 'back_button' => true,
  296. 'save_button' => false,
  297. 'reset_button' => false,
  298. 'delete_button' => false,
  299. 'form' => false,
  300. 'cms_pages_grid' => true
  301. ]
  302. ],
  303. // Editing existing URL rewrite with CMS page
  304. [
  305. ['url_rewrite' => $existingUrlRewrite, 'cms_page' => $cmsPage],
  306. [
  307. 'selector' => false,
  308. 'cms_page_link' => ['name' => $cmsPage->getTitle()],
  309. 'save_button' => true,
  310. 'reset_button' => true,
  311. 'delete_button' => true,
  312. 'form' => ['cms_page' => $cmsPage, 'url_rewrite' => $existingUrlRewrite],
  313. 'cms_pages_grid' => false
  314. ]
  315. ]
  316. ];
  317. }
  318. }