AbstractMergedConfigTest.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Test\Integrity\Modular;
  7. /**
  8. * AbstractMergedConfigTest can be used to test merging of config files
  9. */
  10. abstract class AbstractMergedConfigTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * attributes represent merging rules
  14. * copied from original namespace Magento\Framework\App\Route\Config;
  15. *
  16. * class Reader
  17. *
  18. * @returns array
  19. */
  20. abstract protected function getIdAttributes();
  21. /**
  22. * Path to tough XSD for merged file validation
  23. *
  24. * @returns string
  25. */
  26. abstract protected function getMergedSchemaFile();
  27. /**
  28. * Returns an array of config files to test
  29. *
  30. * @return array
  31. */
  32. abstract protected function getConfigFiles();
  33. public function testMergedConfigFiles()
  34. {
  35. $invalidFiles = [];
  36. $files = $this->getConfigFiles();
  37. $validationStateMock = $this->createMock(\Magento\Framework\Config\ValidationStateInterface::class);
  38. $validationStateMock->method('isValidationRequired')
  39. ->willReturn(false);
  40. $mergedConfig = new \Magento\Framework\Config\Dom(
  41. '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></config>',
  42. $validationStateMock,
  43. $this->getIdAttributes()
  44. );
  45. foreach ($files as $file) {
  46. $content = file_get_contents($file[0]);
  47. try {
  48. $validationStateMock = $this->createMock(\Magento\Framework\Config\ValidationStateInterface::class);
  49. $validationStateMock->method('isValidationRequired')
  50. ->willReturn(true);
  51. new \Magento\Framework\Config\Dom($content, $validationStateMock, $this->getIdAttributes());
  52. //merge won't be performed if file is invalid because of exception thrown
  53. $mergedConfig->merge($content);
  54. } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
  55. $invalidFiles[] = $file[0];
  56. }
  57. }
  58. if (!empty($invalidFiles)) {
  59. $this->fail('Found broken files: ' . implode("\n", $invalidFiles));
  60. }
  61. $errors = [];
  62. $mergedConfig->validate($this->getMergedSchemaFile(), $errors);
  63. if ($errors) {
  64. $this->fail('Merged routes config is invalid: ' . "\n" . implode("\n", $errors));
  65. }
  66. }
  67. }