ItemTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Ui\Test\Unit\Config\Converter;
  7. use Magento\Ui\Config\ConverterInterface;
  8. use Magento\Ui\Config\Converter\Item;
  9. use Magento\Ui\Config\ConverterUtils;
  10. class ItemTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var Item
  14. */
  15. private $converter;
  16. /**
  17. * @var \DOMXPath
  18. */
  19. private $domXpath;
  20. /**
  21. * @var ConverterInterface|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $urlConverter;
  24. public function setUp()
  25. {
  26. $dom = new \DOMDocument('1.0', 'UTF-8');
  27. $dom->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . '_files/test.xml');
  28. $this->domXpath = new \DOMXPath($dom);
  29. $this->urlConverter = $this->getMockBuilder(ConverterInterface::class)->getMockForAbstractClass();
  30. $this->converter = new Item($this->urlConverter, new ConverterUtils());
  31. }
  32. /**
  33. * @param array $expectedResult
  34. * @param string $xpath
  35. * @dataProvider convertDataProvider
  36. */
  37. public function testConvert(array $expectedResult, $xpath)
  38. {
  39. $node = $this->domXpath->query($xpath)->item(0);
  40. if ($xpath == '//listing/columns/settings/editorConfig') {
  41. $urlNode = $this->domXpath->query($xpath . '/param[@name="clientConfig"]/item[@name="saveUrl"]')->item(0);
  42. $urlResult = [
  43. 'name' => 'saveUrl',
  44. 'xsi:type' => 'url',
  45. 'path' => 'cms/page/inlineEdit',
  46. ];
  47. $this->urlConverter->expects($this->any())
  48. ->method('convert')
  49. ->with($urlNode, ['type' => 'url'])
  50. ->willReturn($urlResult);
  51. $expectedResult = array_replace_recursive(
  52. $expectedResult,
  53. ['name' => 'editorConfig',
  54. 'xsi:type' => 'array',
  55. 'item' => [
  56. 'clientConfig' => [
  57. 'name' => 'clientConfig',
  58. 'xsi:type' => 'array',
  59. 'item' => [
  60. 'saveUrl' => $urlResult,
  61. ],
  62. ],
  63. ],
  64. ]
  65. );
  66. }
  67. $this->assertEquals($expectedResult, $this->converter->convert($node));
  68. }
  69. /**
  70. * @return array
  71. */
  72. public function convertDataProvider()
  73. {
  74. return [
  75. $this->getSetOne() + $this->getSetTwo() + $this->getSetThree()
  76. ];
  77. }
  78. /**
  79. * @return array
  80. */
  81. private function getSetOne()
  82. {
  83. return [
  84. [
  85. 'name' => 'templates',
  86. 'xsi:type' => 'array',
  87. 'item' => [
  88. 'filters' => [
  89. 'name' => 'filters',
  90. 'xsi:type' => 'array',
  91. 'item' => [
  92. 'select' => [
  93. 'name' => 'select',
  94. 'xsi:type' => 'array',
  95. 'item' => [
  96. 'template' => [
  97. 'name' => 'template',
  98. 'xsi:type' => 'string',
  99. 'value' => 'ui/grid/filters/elements/ui-select',
  100. ],
  101. 'component' => [
  102. 'name' => 'component',
  103. 'xsi:type' => 'string',
  104. 'value' => 'Magento_Ui/js/form/element/ui-select',
  105. ],
  106. ],
  107. ],
  108. ],
  109. ],
  110. ],
  111. ],
  112. '//listing/listingToolbar/filters/settings/templates'
  113. ];
  114. }
  115. /**
  116. * @return array
  117. */
  118. private function getSetTwo()
  119. {
  120. return [
  121. 'editorConfig' => [
  122. 'name' => 'editorConfig',
  123. 'xsi:type' => 'array',
  124. 'item' => [
  125. 'clientConfig' => [
  126. 'name' => 'clientConfig',
  127. 'xsi:type' => 'array',
  128. 'item' => [
  129. 'validateBeforeSave' => [
  130. 'name' => 'validateBeforeSave',
  131. 'xsi:type' => 'boolean',
  132. 'value' => 'false',
  133. ],
  134. ],
  135. ],
  136. 'indexField' => [
  137. 'name' => 'indexField',
  138. 'xsi:type' => 'string',
  139. 'value' => 'page_id',
  140. ],
  141. 'enabled' => [
  142. 'name' => 'enabled',
  143. 'xsi:type' => 'boolean',
  144. 'value' => 'true',
  145. ],
  146. 'selectProvider' => [
  147. 'name' => 'selectProvider',
  148. 'xsi:type' => 'string',
  149. 'value' => 'cms_page_listing.cms_page_listing.cms_page_columns.ids',
  150. ],
  151. ],
  152. ],
  153. '//listing/columns/settings/editorConfig'
  154. ];
  155. }
  156. /**
  157. * @return array
  158. */
  159. private function getSetThree()
  160. {
  161. return [
  162. 'templates' => [
  163. 'name' => 'templates',
  164. 'xsi:type' => 'array',
  165. 'item' => [
  166. 'filters' => [
  167. 'name' => 'filters',
  168. 'xsi:type' => 'array',
  169. 'item' => [
  170. 'select' => [
  171. 'name' => 'select',
  172. 'xsi:type' => 'array',
  173. 'item' => [
  174. 'template' => [
  175. 'name' => 'template',
  176. 'xsi:type' => 'string',
  177. 'value' => 'ui-select-template',
  178. ],
  179. 'component' => [
  180. 'name' => 'component',
  181. 'xsi:type' => 'string',
  182. 'value' => 'ui-select',
  183. ],
  184. ],
  185. ],
  186. ],
  187. ],
  188. ],
  189. ],
  190. '//listing/filters/settings/templates'
  191. ];
  192. }
  193. }