ConfigTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backend\Model\Search;
  7. use Magento\Backend\App\Area\FrontNameResolver;
  8. use Magento\Framework\App\Area;
  9. use Magento\Framework\App\AreaList;
  10. use Magento\Framework\App\Cache\State;
  11. use Magento\Framework\App\Config\FileResolver;
  12. use Magento\Framework\AuthorizationInterface;
  13. use Magento\Framework\Config\FileIteratorFactory;
  14. use Magento\Framework\Config\ScopeInterface;
  15. use Magento\TestFramework\Helper\Bootstrap;
  16. /**
  17. * @magentoAppArea adminhtml
  18. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  19. * @SuppressWarnings(PHPMD.StaticAccess)
  20. */
  21. class ConfigTest extends \PHPUnit\Framework\TestCase
  22. {
  23. /**
  24. * @dataProvider loadDataProvider
  25. * @magentoConfigFixture current_store general/store_information/name Foo
  26. */
  27. public function testLoad($query, $expectedResult)
  28. {
  29. /** @var \Magento\Backend\Model\Search\Config $configSearch */
  30. $configSearch = $this->getConfigSearchInstance();
  31. $configSearch->setQuery($query);
  32. $configSearch->load();
  33. /** SUT Execution */
  34. $searchResults = $configSearch->getResults();
  35. /** Ensure that search results are correct */
  36. $this->assertCount(count($expectedResult), $searchResults, 'Quantity of search result items is invalid.');
  37. foreach ($expectedResult as $itemIndex => $expectedItem) {
  38. /** Validate URL to item */
  39. $elementPathParts = explode('/', $expectedItem['id']);
  40. // filter empty values
  41. $elementPathParts = array_values(array_filter($elementPathParts));
  42. foreach ($elementPathParts as $elementPathPart) {
  43. $this->assertContains($elementPathPart, $searchResults[$itemIndex]['url'], 'Item URL is invalid.');
  44. }
  45. unset($searchResults[$itemIndex]['url']);
  46. /** Validate other item data */
  47. $this->assertEquals($expectedItem, $searchResults[$itemIndex], "Data of item #$itemIndex is invalid.");
  48. }
  49. }
  50. /**
  51. * @return \Magento\Backend\Model\Search\Config
  52. */
  53. private function getConfigSearchInstance()
  54. {
  55. Bootstrap::getInstance()->reinitialize([
  56. State::PARAM_BAN_CACHE => true,
  57. ]);
  58. Bootstrap::getObjectManager()
  59. ->get(ScopeInterface::class)
  60. ->setCurrentScope(FrontNameResolver::AREA_CODE);
  61. Bootstrap::getObjectManager()->get(AreaList::class)
  62. ->getArea(FrontNameResolver::AREA_CODE)
  63. ->load(Area::PART_CONFIG);
  64. Bootstrap::getObjectManager()->configure([
  65. 'preferences' => [
  66. AuthorizationInterface::class => \Magento\Backend\Model\Search\AuthorizationMock::class
  67. ]
  68. ]);
  69. $fileResolverMock = $this->getMockBuilder(FileResolver::class)->disableOriginalConstructor()->getMock();
  70. $fileIteratorFactory = Bootstrap::getObjectManager()->get(FileIteratorFactory::class);
  71. $fileIterator = $fileIteratorFactory->create(
  72. [__DIR__ . '/_files/test_config.xml']
  73. );
  74. $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($fileIterator));
  75. $objectManager = Bootstrap::getObjectManager();
  76. /** @var \Magento\Config\Model\Config\Structure\Reader $structureReader */
  77. $structureReader = $objectManager->create(
  78. \Magento\Config\Model\Config\Structure\Reader::class,
  79. ['fileResolver' => $fileResolverMock]
  80. );
  81. /** @var \Magento\Config\Model\Config\Structure\Data $structureData */
  82. $structureData = $objectManager->create(
  83. \Magento\Config\Model\Config\Structure\Data::class,
  84. ['reader' => $structureReader]
  85. );
  86. /** @var \Magento\Config\Model\Config\Structure $structure */
  87. $structure = $objectManager->create(
  88. \Magento\Config\Model\Config\Structure::class,
  89. ['structureData' => $structureData]
  90. );
  91. return $objectManager->create(
  92. \Magento\Backend\Model\Search\Config::class,
  93. ['configStructure' => $structure]
  94. );
  95. }
  96. /**
  97. * @return array
  98. */
  99. public static function loadDataProvider()
  100. {
  101. return [
  102. 'Search by field name' => [
  103. 'Test Field',
  104. [
  105. [
  106. 'id' => 'test_section/test_group/test_field_1',
  107. 'type' => null,
  108. 'name' => 'Test Field',
  109. 'description' => ' / Test Tab / Test Section / Test Group',
  110. ],
  111. [
  112. 'id' => 'test_section/test_group/test_field_2',
  113. 'type' => null,
  114. 'name' => 'Test Field',
  115. 'description' => ' / Test Tab / Test Section / Test Group',
  116. ],
  117. ],
  118. ],
  119. 'Search by group name' => [
  120. 'Test Group',
  121. [
  122. [
  123. 'id' => 'test_section/test_group',
  124. 'type' => null,
  125. 'name' => 'Test Group',
  126. 'description' => ' / Test Tab / Test Section',
  127. ],
  128. ],
  129. ],
  130. 'Search by section name' => [
  131. 'Test Section',
  132. [
  133. [
  134. 'id' => '/test_section',
  135. 'type' => null,
  136. 'name' => 'Test Section',
  137. 'description' => ' / Test Tab',
  138. ],
  139. ],
  140. ],
  141. ];
  142. }
  143. }