ConverterTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Indexer\Test\Unit\Config;
  7. use Magento\Framework\Exception\ConfigurationMismatchException;
  8. class ConverterTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Framework\Indexer\Config\Converter|\PHPUnit_Framework_MockObject_MockObject
  12. */
  13. protected $_model;
  14. protected function setUp()
  15. {
  16. $this->_model = new \Magento\Framework\Indexer\Config\Converter();
  17. }
  18. public function testConvert()
  19. {
  20. $data = include __DIR__ . '/../_files/indexer_config.php';
  21. $dom = new \DOMDocument();
  22. $dom->loadXML($data['inputXML']);
  23. $this->assertEquals($data['expected'], $this->_model->convert($dom));
  24. }
  25. /**
  26. * @param string $xml
  27. * @param array $indexersSequence
  28. * @dataProvider convertWithDependenciesDataProvider
  29. */
  30. public function testConvertWithDependencies(string $xml, array $indexersSequence)
  31. {
  32. $dom = new \DOMDocument();
  33. $dom->loadXML($xml);
  34. $this->assertEquals($indexersSequence, array_keys($this->_model->convert($dom)));
  35. }
  36. /**
  37. * @return array
  38. */
  39. public function convertWithDependenciesDataProvider()
  40. {
  41. return [
  42. [
  43. 'xml' =>
  44. <<<XML
  45. <?xml version="1.0" encoding="UTF-8"?>
  46. <config>
  47. <indexer id="indexer_1" view_id="view_one" class="Index\Class\Name\One">
  48. <dependencies>
  49. <indexer id="indexer_6" />
  50. </dependencies>
  51. </indexer>
  52. <indexer id="indexer_2" view_id="view_two" class="Index\Class\Name\Two">
  53. <dependencies>
  54. <indexer id="indexer_3" />
  55. </dependencies>
  56. </indexer>
  57. <indexer id="indexer_3" view_id="view_three" class="Index\Class\Name\Three">
  58. </indexer>
  59. <indexer id="indexer_4" view_id="view_four" class="Index\Class\Name\Four">
  60. <dependencies>
  61. <indexer id="indexer_6" />
  62. <indexer id="indexer_5" />
  63. </dependencies>
  64. </indexer>
  65. <indexer id="indexer_5" view_id="view_five" class="Index\Class\Name\Five">
  66. <dependencies>
  67. <indexer id="indexer_1" />
  68. </dependencies>
  69. </indexer>
  70. <indexer id="indexer_6" view_id="view_six" class="Index\Class\Name\Six">
  71. <dependencies>
  72. <indexer id="indexer_2" />
  73. </dependencies>
  74. </indexer>
  75. </config>
  76. XML
  77. ,
  78. 'indexersSequence' => [
  79. 'indexer_3',
  80. 'indexer_2',
  81. 'indexer_6',
  82. 'indexer_1',
  83. 'indexer_5',
  84. 'indexer_4',
  85. ],
  86. ]
  87. ];
  88. }
  89. /**
  90. * @param string $inputXml
  91. * @param string $exceptionMessage
  92. * @dataProvider convertWithCircularDependenciesDataProvider
  93. */
  94. public function testConvertWithCircularDependencies($inputXml, $exceptionMessage)
  95. {
  96. $dom = new \DOMDocument();
  97. $dom->loadXML($inputXml);
  98. $this->expectException(ConfigurationMismatchException::class);
  99. $this->expectExceptionMessage($exceptionMessage);
  100. $this->_model->convert($dom);
  101. }
  102. /**
  103. * @return array
  104. */
  105. public function convertWithCircularDependenciesDataProvider()
  106. {
  107. return [
  108. 'Circular dependency on the first level' => [
  109. 'inputXML' => '<?xml version="1.0" encoding="UTF-8"?><config>'
  110. . '<indexer id="indexer_1"><dependencies><indexer id="indexer_2"/></dependencies></indexer>'
  111. . '<indexer id="indexer_2"><dependencies><indexer id="indexer_1"/></dependencies></indexer>'
  112. . '</config>',
  113. 'exceptionMessage' => "Circular dependency references from 'indexer_2' to 'indexer_1'.",
  114. ],
  115. 'Circular dependency a deeper than the first level' => [
  116. 'inputXML' => '<?xml version="1.0" encoding="UTF-8"?><config>'
  117. . '<indexer id="indexer_1"><dependencies><indexer id="indexer_2"/></dependencies></indexer>'
  118. . '<indexer id="indexer_2"><dependencies><indexer id="indexer_3"/></dependencies></indexer>'
  119. . '<indexer id="indexer_3"><dependencies><indexer id="indexer_4"/></dependencies></indexer>'
  120. . '<indexer id="indexer_4"><dependencies><indexer id="indexer_1"/></dependencies></indexer>'
  121. . '</config>',
  122. 'exceptionMessage' => "Circular dependency references from 'indexer_4' to 'indexer_1'.",
  123. ],
  124. ];
  125. }
  126. /**
  127. * @param string $inputXml
  128. * @param string $exceptionMessage
  129. * @dataProvider convertWithDependencyOnNotExistingIndexerDataProvider
  130. */
  131. public function testConvertWithDependencyOnNotExistingIndexer($inputXml, $exceptionMessage)
  132. {
  133. $dom = new \DOMDocument();
  134. $dom->loadXML($inputXml);
  135. $this->expectException(ConfigurationMismatchException::class);
  136. $this->expectExceptionMessage($exceptionMessage);
  137. $this->_model->convert($dom);
  138. }
  139. /**
  140. * @return array
  141. */
  142. public function convertWithDependencyOnNotExistingIndexerDataProvider()
  143. {
  144. return [
  145. [
  146. 'inputXML' => '<?xml version="1.0" encoding="UTF-8"?><config>'
  147. . '<indexer id="indexer_1"><dependencies><indexer id="indexer_3"/></dependencies></indexer>'
  148. . '<indexer id="indexer_2"><dependencies><indexer id="indexer_1"/></dependencies></indexer>'
  149. . '</config>',
  150. 'exceptionMessage' => "Dependency declaration 'indexer_3' in 'indexer_1' to the non-existing indexer.",
  151. ],
  152. ];
  153. }
  154. }