160 lines
5.7 KiB
PHP
Executable File
160 lines
5.7 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Backend\Model\Search;
|
|
|
|
use Magento\Backend\App\Area\FrontNameResolver;
|
|
use Magento\Framework\App\Area;
|
|
use Magento\Framework\App\AreaList;
|
|
use Magento\Framework\App\Cache\State;
|
|
use Magento\Framework\App\Config\FileResolver;
|
|
use Magento\Framework\AuthorizationInterface;
|
|
use Magento\Framework\Config\FileIteratorFactory;
|
|
use Magento\Framework\Config\ScopeInterface;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
* @SuppressWarnings(PHPMD.StaticAccess)
|
|
*/
|
|
class ConfigTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* @dataProvider loadDataProvider
|
|
* @magentoConfigFixture current_store general/store_information/name Foo
|
|
*/
|
|
public function testLoad($query, $expectedResult)
|
|
{
|
|
/** @var \Magento\Backend\Model\Search\Config $configSearch */
|
|
$configSearch = $this->getConfigSearchInstance();
|
|
$configSearch->setQuery($query);
|
|
$configSearch->load();
|
|
|
|
/** SUT Execution */
|
|
$searchResults = $configSearch->getResults();
|
|
|
|
/** Ensure that search results are correct */
|
|
$this->assertCount(count($expectedResult), $searchResults, 'Quantity of search result items is invalid.');
|
|
foreach ($expectedResult as $itemIndex => $expectedItem) {
|
|
/** Validate URL to item */
|
|
$elementPathParts = explode('/', $expectedItem['id']);
|
|
// filter empty values
|
|
$elementPathParts = array_values(array_filter($elementPathParts));
|
|
foreach ($elementPathParts as $elementPathPart) {
|
|
$this->assertStringContainsString(
|
|
$elementPathPart,
|
|
$searchResults[$itemIndex]['url'],
|
|
'Item URL is invalid.'
|
|
);
|
|
}
|
|
unset($searchResults[$itemIndex]['url']);
|
|
|
|
/** Validate other item data */
|
|
$this->assertEquals($expectedItem, $searchResults[$itemIndex], "Data of item #$itemIndex is invalid.");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return \Magento\Backend\Model\Search\Config
|
|
*/
|
|
private function getConfigSearchInstance()
|
|
{
|
|
Bootstrap::getInstance()->reinitialize([
|
|
State::PARAM_BAN_CACHE => true,
|
|
]);
|
|
Bootstrap::getObjectManager()
|
|
->get(ScopeInterface::class)
|
|
->setCurrentScope(FrontNameResolver::AREA_CODE);
|
|
Bootstrap::getObjectManager()->get(AreaList::class)
|
|
->getArea(FrontNameResolver::AREA_CODE)
|
|
->load(Area::PART_CONFIG);
|
|
|
|
Bootstrap::getObjectManager()->configure([
|
|
'preferences' => [
|
|
AuthorizationInterface::class => \Magento\Backend\Model\Search\AuthorizationMock::class
|
|
]
|
|
]);
|
|
|
|
$fileResolverMock = $this->getMockBuilder(FileResolver::class)->disableOriginalConstructor()->getMock();
|
|
$fileIteratorFactory = Bootstrap::getObjectManager()->get(FileIteratorFactory::class);
|
|
$fileIterator = $fileIteratorFactory->create(
|
|
[__DIR__ . '/_files/test_config.xml']
|
|
);
|
|
$fileResolverMock->expects($this->any())->method('get')->willReturn($fileIterator);
|
|
|
|
$objectManager = Bootstrap::getObjectManager();
|
|
/** @var \Magento\Config\Model\Config\Structure\Reader $structureReader */
|
|
$structureReader = $objectManager->create(
|
|
\Magento\Config\Model\Config\Structure\Reader::class,
|
|
['fileResolver' => $fileResolverMock]
|
|
);
|
|
/** @var \Magento\Config\Model\Config\Structure\Data $structureData */
|
|
$structureData = $objectManager->create(
|
|
\Magento\Config\Model\Config\Structure\Data::class,
|
|
['reader' => $structureReader]
|
|
);
|
|
/** @var \Magento\Config\Model\Config\Structure $structure */
|
|
$structure = $objectManager->create(
|
|
\Magento\Config\Model\Config\Structure::class,
|
|
['structureData' => $structureData]
|
|
);
|
|
|
|
return $objectManager->create(
|
|
\Magento\Backend\Model\Search\Config::class,
|
|
['configStructure' => $structure]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public static function loadDataProvider()
|
|
{
|
|
return [
|
|
'Search by field name' => [
|
|
'Test Field',
|
|
[
|
|
[
|
|
'id' => 'test_section/test_group/test_field_1',
|
|
'type' => null,
|
|
'name' => 'Test Field',
|
|
'description' => ' / Test Tab / Test Section / Test Group',
|
|
],
|
|
[
|
|
'id' => 'test_section/test_group/test_field_2',
|
|
'type' => null,
|
|
'name' => 'Test Field',
|
|
'description' => ' / Test Tab / Test Section / Test Group',
|
|
],
|
|
],
|
|
],
|
|
'Search by group name' => [
|
|
'Test Group',
|
|
[
|
|
[
|
|
'id' => 'test_section/test_group',
|
|
'type' => null,
|
|
'name' => 'Test Group',
|
|
'description' => ' / Test Tab / Test Section',
|
|
],
|
|
],
|
|
],
|
|
'Search by section name' => [
|
|
'Test Section',
|
|
[
|
|
[
|
|
'id' => '/test_section',
|
|
'type' => null,
|
|
'name' => 'Test Section',
|
|
'description' => ' / Test Tab',
|
|
],
|
|
],
|
|
],
|
|
];
|
|
}
|
|
}
|