FormTest.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\UrlRewrite\Block\Edit;
  7. /**
  8. * Test for \Magento\UrlRewrite\Block\Edit\FormTest
  9. * @magentoAppArea adminhtml
  10. */
  11. class FormTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * Get form instance
  15. *
  16. * @param array $args
  17. * @return \Magento\Framework\Data\Form
  18. */
  19. protected function _getFormInstance($args = [])
  20. {
  21. /** @var $layout \Magento\Framework\View\Layout */
  22. $layout = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  23. \Magento\Framework\View\LayoutInterface::class
  24. );
  25. /** @var $block \Magento\UrlRewrite\Block\Edit\Form */
  26. $block = $layout->createBlock(\Magento\UrlRewrite\Block\Edit\Form::class, 'block', ['data' => $args]);
  27. $block->setTemplate(null);
  28. $block->toHtml();
  29. return $block->getForm();
  30. }
  31. /**
  32. * Test that form was prepared correctly
  33. * @magentoAppIsolation enabled
  34. */
  35. public function testPrepareForm()
  36. {
  37. // Test form was configured correctly
  38. $form = $this->_getFormInstance(['url_rewrite' => new \Magento\Framework\DataObject(['id' => 3])]);
  39. $this->assertInstanceOf(\Magento\Framework\Data\Form::class, $form);
  40. $this->assertNotEmpty($form->getAction());
  41. $this->assertEquals('edit_form', $form->getId());
  42. $this->assertEquals('post', $form->getMethod());
  43. $this->assertTrue($form->getUseContainer());
  44. $this->assertContains('/id/3', $form->getAction());
  45. // Check all expected form elements are present
  46. $expectedElements = [
  47. 'store_id',
  48. 'entity_type',
  49. 'entity_id',
  50. 'request_path',
  51. 'target_path',
  52. 'redirect_type',
  53. 'description',
  54. ];
  55. foreach ($expectedElements as $expectedElement) {
  56. $this->assertNotNull($form->getElement($expectedElement));
  57. }
  58. }
  59. /**
  60. * Check session data restoring
  61. * @magentoAppIsolation enabled
  62. */
  63. public function testSessionRestore()
  64. {
  65. // Set urlrewrite data to session
  66. $sessionValues = [
  67. 'store_id' => 1,
  68. 'entity_type' => 'entity_type',
  69. 'entity_id' => 'entity_id',
  70. 'request_path' => 'request_path',
  71. 'target_path' => 'target_path',
  72. 'redirect_type' => 'redirect_type',
  73. 'description' => 'description',
  74. ];
  75. \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  76. \Magento\Backend\Model\Session::class
  77. )->setUrlRewriteData(
  78. $sessionValues
  79. );
  80. // Re-init form to use newly set session data
  81. $form = $this->_getFormInstance(['url_rewrite' => new \Magento\Framework\DataObject()]);
  82. // Check that all fields values are restored from session
  83. foreach ($sessionValues as $field => $value) {
  84. $this->assertEquals($value, $form->getElement($field)->getValue());
  85. }
  86. }
  87. /**
  88. * Test store element is hidden when only one store available
  89. *
  90. * @magentoAppIsolation enabled
  91. * @magentoConfigFixture current_store general/single_store_mode/enabled 1
  92. */
  93. public function testStoreElementSingleStore()
  94. {
  95. $form = $this->_getFormInstance(['url_rewrite' => new \Magento\Framework\DataObject(['id' => 3])]);
  96. /** @var $storeElement \Magento\Framework\Data\Form\Element\AbstractElement */
  97. $storeElement = $form->getElement('store_id');
  98. $this->assertInstanceOf(\Magento\Framework\Data\Form\Element\Hidden::class, $storeElement);
  99. // Check that store value set correctly
  100. $defaultStore = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  101. \Magento\Store\Model\StoreManagerInterface::class
  102. )->getStore(
  103. true
  104. )->getId();
  105. $this->assertEquals($defaultStore, $storeElement->getValue());
  106. }
  107. /**
  108. * Test store selection is available and correctly configured
  109. *
  110. * @magentoAppIsolation enabled
  111. * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
  112. */
  113. public function testStoreElementMultiStores()
  114. {
  115. $form = $this->_getFormInstance(['url_rewrite' => new \Magento\Framework\DataObject(['id' => 3])]);
  116. /** @var $storeElement \Magento\Framework\Data\Form\Element\AbstractElement */
  117. $storeElement = $form->getElement('store_id');
  118. // Check store selection elements has correct type
  119. $this->assertInstanceOf(\Magento\Framework\Data\Form\Element\Select::class, $storeElement);
  120. // Check store selection elements has correct renderer
  121. $this->assertInstanceOf(
  122. \Magento\Backend\Block\Store\Switcher\Form\Renderer\Fieldset\Element::class,
  123. $storeElement->getRenderer()
  124. );
  125. // Check store elements has expected values
  126. $storesList = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  127. \Magento\Store\Model\System\Store::class
  128. )->getStoreValuesForForm();
  129. $this->assertInternalType('array', $storeElement->getValues());
  130. $this->assertNotEmpty($storeElement->getValues());
  131. $this->assertEquals($storesList, $storeElement->getValues());
  132. }
  133. /**
  134. * Test fields disabled status
  135. * @dataProvider fieldsStateDataProvider
  136. * @magentoAppIsolation enabled
  137. * @magentoConfigFixture current_store general/single_store_mode/enabled 0
  138. */
  139. public function testReadonlyFields($urlRewrite, $fields)
  140. {
  141. $form = $this->_getFormInstance(['url_rewrite' => $urlRewrite]);
  142. foreach ($fields as $fieldKey => $expected) {
  143. $this->assertEquals($expected, $form->getElement($fieldKey)->getReadonly());
  144. }
  145. }
  146. /**
  147. * Data provider for checking fields state
  148. */
  149. public function fieldsStateDataProvider()
  150. {
  151. return [
  152. [
  153. new \Magento\Framework\DataObject(),
  154. [
  155. 'store_id' => false,
  156. ],
  157. ],
  158. [
  159. new \Magento\Framework\DataObject(['id' => 3, 'is_autogenerated' => true]),
  160. [
  161. 'store_id' => true,
  162. ]
  163. ]
  164. ];
  165. }
  166. }