IncludeElementTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Config\Test\Unit\Model\Compiler;
  7. /**
  8. * Class IncludeElementTest
  9. */
  10. class IncludeElementTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\Config\Model\Config\Compiler\IncludeElement
  14. */
  15. protected $includeElement;
  16. /**
  17. * @var \Magento\Framework\Module\Dir\Reader|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. protected $moduleReaderMock;
  20. /**
  21. * @var \Magento\Framework\Filesystem\Directory\ReadFactory|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. protected $readFactoryMock;
  24. /**
  25. * Set up
  26. *
  27. * @return void
  28. */
  29. protected function setUp()
  30. {
  31. $this->moduleReaderMock = $this->getMockBuilder(\Magento\Framework\Module\Dir\Reader::class)
  32. ->disableOriginalConstructor()
  33. ->getMock();
  34. $this->readFactoryMock = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\ReadFactory::class)
  35. ->disableOriginalConstructor()
  36. ->getMock();
  37. $this->includeElement = new \Magento\Config\Model\Config\Compiler\IncludeElement(
  38. $this->moduleReaderMock,
  39. $this->readFactoryMock
  40. );
  41. }
  42. /**
  43. * @return void
  44. */
  45. public function testCompileSuccess()
  46. {
  47. $xmlContent = '<rootConfig><include path="Module_Name::path/to/file.xml"/></rootConfig>';
  48. $document = new \DOMDocument();
  49. $document->loadXML($xmlContent);
  50. $compilerMock = $this->getMockBuilder(\Magento\Framework\View\TemplateEngine\Xhtml\CompilerInterface::class)
  51. ->getMockForAbstractClass();
  52. $processedObjectMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  53. ->disableOriginalConstructor()
  54. ->getMock();
  55. $this->getContentStep();
  56. $compilerMock->expects($this->exactly(2))
  57. ->method('compile')
  58. ->with($this->isInstanceOf('\DOMElement'), $processedObjectMock, $processedObjectMock);
  59. $this->includeElement->compile(
  60. $compilerMock,
  61. $document->documentElement->firstChild,
  62. $processedObjectMock,
  63. $processedObjectMock
  64. );
  65. $this->assertEquals(
  66. '<?xml version="1.0"?><rootConfig><item id="1"><test/></item><item id="2"/></rootConfig>',
  67. str_replace(PHP_EOL, '', $document->saveXML())
  68. );
  69. }
  70. /**
  71. * @expectedException \Magento\Framework\Exception\LocalizedException
  72. * @expectedExceptionMessage The "adminhtml/path/to/file.xml" file doesn't exist.
  73. */
  74. public function testCompileException()
  75. {
  76. $xmlContent = '<rootConfig><include path="Module_Name::path/to/file.xml"/></rootConfig>';
  77. $document = new \DOMDocument();
  78. $document->loadXML($xmlContent);
  79. $compilerMock = $this->getMockBuilder(\Magento\Framework\View\TemplateEngine\Xhtml\CompilerInterface::class)
  80. ->getMockForAbstractClass();
  81. $processedObjectMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  82. ->disableOriginalConstructor()
  83. ->getMock();
  84. $this->getContentStep(false);
  85. $compilerMock->expects($this->never())
  86. ->method('compile')
  87. ->with($this->isInstanceOf('\DOMElement'), $processedObjectMock, $processedObjectMock);
  88. $this->includeElement->compile(
  89. $compilerMock,
  90. $document->documentElement->firstChild,
  91. $processedObjectMock,
  92. $processedObjectMock
  93. );
  94. }
  95. /**
  96. * @param bool $check
  97. */
  98. protected function getContentStep($check = true)
  99. {
  100. $resultPath = 'adminhtml/path/to/file.xml';
  101. $includeXmlContent = '<config><item id="1"><test/></item><item id="2"></item></config>';
  102. $modulesDirectoryMock = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\ReadInterface::class)
  103. ->getMockForAbstractClass();
  104. $this->readFactoryMock->expects($this->once())
  105. ->method('create')
  106. ->willReturn($modulesDirectoryMock);
  107. $this->moduleReaderMock->expects($this->once())
  108. ->method('getModuleDir')
  109. ->with('etc', 'Module_Name')
  110. ->willReturn('path/in/application/module');
  111. $modulesDirectoryMock->expects($this->once())
  112. ->method('isExist')
  113. ->with($resultPath)
  114. ->willReturn($check);
  115. if ($check) {
  116. $modulesDirectoryMock->expects($this->once())
  117. ->method('isFile')
  118. ->with($resultPath)
  119. ->willReturn($check);
  120. $modulesDirectoryMock->expects($this->once())
  121. ->method('readFile')
  122. ->with($resultPath)
  123. ->willReturn($includeXmlContent);
  124. }
  125. }
  126. }