PageRenderTime 44ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php

https://gitlab.com/axeltizon/magento-demopoweraccess
PHP | 155 lines | 100 code | 22 blank | 33 comment | 3 complexity | bddfd0f1e36766696b005d0c94761efa MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Test\Integrity\Modular;
  7. use Magento\Framework\App\Filesystem\DirectoryList;
  8. class DiConfigFilesTest extends \PHPUnit_Framework_TestCase
  9. {
  10. /**
  11. * Primary DI configs from app/etc
  12. * @var array
  13. */
  14. protected static $_primaryFiles = [];
  15. /**
  16. * Global DI configs from all modules
  17. * @var array
  18. */
  19. protected static $_moduleGlobalFiles = [];
  20. /**
  21. * Area DI configs from all modules
  22. * @var array
  23. */
  24. protected static $_moduleAreaFiles = [];
  25. protected function _prepareFiles()
  26. {
  27. //init primary configs
  28. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  29. /** @var $filesystem \Magento\Framework\Filesystem */
  30. $filesystem = $objectManager->get('Magento\Framework\Filesystem');
  31. $configDirectory = $filesystem->getDirectoryRead(DirectoryList::CONFIG);
  32. $fileIteratorFactory = $objectManager->get('Magento\Framework\Config\FileIteratorFactory');
  33. $search = [];
  34. foreach ($configDirectory->search('{*/di.xml,di.xml}') as $path) {
  35. $search[] = $configDirectory->getAbsolutePath($path);
  36. }
  37. self::$_primaryFiles = $fileIteratorFactory->create($search);
  38. //init module global configs
  39. /** @var $modulesReader \Magento\Framework\Module\Dir\Reader */
  40. $modulesReader = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
  41. ->get('Magento\Framework\Module\Dir\Reader');
  42. self::$_moduleGlobalFiles = $modulesReader->getConfigurationFiles('di.xml');
  43. //init module area configs
  44. $areas = ['adminhtml', 'frontend'];
  45. foreach ($areas as $area) {
  46. $moduleAreaFiles = $modulesReader->getConfigurationFiles($area . '/di.xml');
  47. self::$_moduleAreaFiles[$area] = $moduleAreaFiles;
  48. }
  49. }
  50. /**
  51. * @param string $filePath
  52. * @param string $xml
  53. * @throws \Exception
  54. * @dataProvider linearFilesProvider
  55. */
  56. public function testDiConfigFileWithoutMerging($filePath, $xml)
  57. {
  58. /** @var \Magento\Framework\ObjectManager\Config\SchemaLocator $schemaLocator */
  59. $schemaLocator = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  60. 'Magento\Framework\ObjectManager\Config\SchemaLocator'
  61. );
  62. $dom = new \DOMDocument();
  63. $dom->loadXML($xml);
  64. libxml_use_internal_errors(true);
  65. $result = \Magento\Framework\Config\Dom::validateDomDocument($dom, $schemaLocator->getSchema());
  66. libxml_use_internal_errors(false);
  67. if (!empty($result)) {
  68. $this->fail(
  69. 'File ' . $filePath . ' has invalid xml structure. '
  70. . implode("\n", $result)
  71. );
  72. }
  73. }
  74. public function linearFilesProvider()
  75. {
  76. if (empty(self::$_primaryFiles)) {
  77. $this->_prepareFiles();
  78. }
  79. $common = array_merge(self::$_primaryFiles->toArray(), self::$_moduleGlobalFiles->toArray());
  80. foreach (self::$_moduleAreaFiles as $files) {
  81. $common = array_merge($common, $files->toArray());
  82. }
  83. $output = [];
  84. foreach ($common as $path => $content) {
  85. $output[] = [substr($path, strlen(BP)), $content];
  86. }
  87. return $output;
  88. }
  89. /**
  90. * @param array $files
  91. * @dataProvider mixedFilesProvider
  92. */
  93. public function testMergedDiConfig(array $files)
  94. {
  95. $mapperMock = $this->getMock('Magento\Framework\ObjectManager\Config\Mapper\Dom', [], [], '', false);
  96. $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
  97. $fileResolverMock->expects($this->any())->method('read')->will($this->returnValue($files));
  98. $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
  99. $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
  100. /** @var \Magento\Framework\ObjectManager\Config\SchemaLocator $schemaLocator */
  101. $schemaLocator = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  102. 'Magento\Framework\ObjectManager\Config\SchemaLocator'
  103. );
  104. new \Magento\Framework\ObjectManager\Config\Reader\Dom(
  105. $fileResolverMock,
  106. $mapperMock,
  107. $schemaLocator,
  108. $validationStateMock
  109. );
  110. }
  111. public function mixedFilesProvider()
  112. {
  113. if (empty(self::$_primaryFiles)) {
  114. $this->_prepareFiles();
  115. }
  116. foreach (self::$_primaryFiles->toArray() as $file) {
  117. $primaryFiles[] = [[$file]];
  118. }
  119. $primaryFiles['all primary config files'] = [self::$_primaryFiles->toArray()];
  120. foreach (self::$_moduleGlobalFiles->toArray() as $file) {
  121. $moduleFiles[] = [[$file]];
  122. }
  123. $moduleFiles['all module global config files'] = [self::$_moduleGlobalFiles->toArray()];
  124. $areaFiles = [];
  125. foreach (self::$_moduleAreaFiles as $area => $files) {
  126. foreach ($files->toArray() as $file) {
  127. $areaFiles[] = [[$file]];
  128. }
  129. $areaFiles["all {$area} config files"] = [self::$_moduleAreaFiles[$area]->toArray()];
  130. }
  131. return $primaryFiles + $moduleFiles + $areaFiles;
  132. }
  133. }