FileResolverByModuleTest.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Test\Unit\Config;
  7. use Magento\Framework\Config\FileIterator;
  8. use Magento\Framework\Filesystem\DriverInterface;
  9. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  10. class FileResolverByModuleTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\Framework\Config\FileResolverByModule
  14. */
  15. private $model;
  16. /**
  17. * @var ObjectManagerHelper
  18. */
  19. private $objectManagerHelper;
  20. /**
  21. * @var \Magento\Framework\Module\Dir\Reader|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $readerMock;
  24. /**
  25. * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $filesystemMock;
  28. /**
  29. * @var \Magento\Framework\Config\FileIteratorFactory|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. private $fileIteratorFactoryMock;
  32. /**
  33. * @var \Magento\Framework\Component\ComponentRegistrar|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $componentRegistrarMock;
  36. /**
  37. * @var \Magento\Framework\Filesystem\Driver\File|\PHPUnit_Framework_MockObject_MockObject
  38. */
  39. private $fileDriver;
  40. protected function setUp()
  41. {
  42. $this->readerMock = $this->getMockBuilder(\Magento\Framework\Module\Dir\Reader::class)
  43. ->disableOriginalConstructor()
  44. ->getMock();
  45. $this->filesystemMock = $this->getMockBuilder(\Magento\Framework\Filesystem::class)
  46. ->disableOriginalConstructor()
  47. ->getMock();
  48. $this->fileIteratorFactoryMock = $this->getMockBuilder(\Magento\Framework\Config\FileIteratorFactory::class)
  49. ->disableOriginalConstructor()
  50. ->getMock();
  51. $this->componentRegistrarMock = $this->getMockBuilder(\Magento\Framework\Component\ComponentRegistrar::class)
  52. ->disableOriginalConstructor()
  53. ->getMock();
  54. $this->fileDriver = $this->getMockBuilder(\Magento\Framework\Filesystem\Driver\File::class)
  55. ->disableOriginalConstructor()
  56. ->getMock();
  57. $this->objectManagerHelper = new ObjectManagerHelper($this);
  58. $this->model = $this->objectManagerHelper->getObject(
  59. \Magento\Framework\Config\FileResolverByModule::class,
  60. [
  61. 'moduleReader' => $this->readerMock,
  62. 'filesystem' => $this->filesystemMock,
  63. 'iteratorFactory' => $this->fileIteratorFactoryMock,
  64. 'componentRegistrar' => $this->componentRegistrarMock,
  65. 'driver' => $this->fileDriver
  66. ]
  67. );
  68. }
  69. public function testGet()
  70. {
  71. $iterator = $this->getMockBuilder(FileIterator::class)
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $iterator->expects(self::once())
  75. ->method('toArray')
  76. ->willReturn([
  77. 'some_path' => '<xml>Some Content</xml>'
  78. ]);
  79. $primaryIterator = $this->getMockBuilder(FileIterator::class)
  80. ->disableOriginalConstructor()
  81. ->getMock();
  82. $primaryIterator->expects(self::once())
  83. ->method('toArray')
  84. ->willReturn([
  85. '/www/app/etc/db_schema.xml' => '<xml>Primary Content</xml>'
  86. ]);
  87. $directoryMock = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\ReadInterface::class)
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $directoryMock->expects(self::once())
  91. ->method('search')
  92. ->with('{db_schema.xml,*/db_schema.xml}')
  93. ->willReturn(['app/etc/db_schema.xml']);
  94. $directoryMock->expects(self::once())
  95. ->method('getAbsolutePath')
  96. ->willReturn('/www/app/etc/db_schema.xml');
  97. $this->readerMock->expects(self::once())
  98. ->method('getConfigurationFiles')
  99. ->willReturn($iterator);
  100. $this->fileIteratorFactoryMock->expects(self::once())
  101. ->method('create')
  102. ->with(['/www/app/etc/db_schema.xml'])
  103. ->willReturn($primaryIterator);
  104. $this->fileDriver->expects(self::once())
  105. ->method('isFile')
  106. ->with('/www/app/etc/db_schema.xml')
  107. ->willReturn(true);
  108. $this->filesystemMock->expects(self::once())
  109. ->method('getDirectoryRead')
  110. ->willReturn($directoryMock);
  111. self::assertEquals(
  112. $this->model->get('db_schema.xml', 'all'),
  113. [
  114. 'some_path' => '<xml>Some Content</xml>',
  115. '/www/app/etc/db_schema.xml' => '<xml>Primary Content</xml>'
  116. ]
  117. );
  118. }
  119. /**
  120. * @expectedExceptionMessage Primary db_schema file doesn`t exist
  121. */
  122. public function testGetWithException()
  123. {
  124. $iterator = $this->getMockBuilder(FileIterator::class)
  125. ->disableOriginalConstructor()
  126. ->getMock();
  127. $iterator->expects(self::once())
  128. ->method('toArray')
  129. ->willReturn([
  130. 'some_path' => '<xml>Some Content</xml>'
  131. ]);
  132. $primaryIterator = $this->getMockBuilder(FileIterator::class)
  133. ->disableOriginalConstructor()
  134. ->getMock();
  135. $primaryIterator->expects(self::once())
  136. ->method('toArray')
  137. ->willReturn([
  138. '/www/app/etc/db_schema.xml' => '<xml>Primary Content</xml>'
  139. ]);
  140. $directoryMock = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\ReadInterface::class)
  141. ->disableOriginalConstructor()
  142. ->getMock();
  143. $directoryMock->expects(self::once())
  144. ->method('search')
  145. ->with('{db_schema.xml,*/db_schema.xml}')
  146. ->willReturn(['app/etc/db_schema.xml']);
  147. $directoryMock->expects(self::once())
  148. ->method('getAbsolutePath')
  149. ->willReturn('/www/app/etc/db_schema.xml');
  150. $this->readerMock->expects(self::once())
  151. ->method('getConfigurationFiles')
  152. ->willReturn($iterator);
  153. $this->fileIteratorFactoryMock->expects(self::once())
  154. ->method('create')
  155. ->with(['/www/app/etc/db_schema.xml'])
  156. ->willReturn($primaryIterator);
  157. $this->fileDriver->expects(self::once())
  158. ->method('isFile')
  159. ->with('/www/app/etc/db_schema.xml')
  160. ->willReturn(true);
  161. $this->filesystemMock->expects(self::once())
  162. ->method('getDirectoryRead')
  163. ->willReturn($directoryMock);
  164. $this->model->get('db_schema.xml', 'all');
  165. }
  166. public function testGetOneModule()
  167. {
  168. $iterator = $this->getMockBuilder(FileIterator::class)
  169. ->disableOriginalConstructor()
  170. ->getMock();
  171. $iterator->expects(self::once())
  172. ->method('toArray')
  173. ->willReturn([
  174. 'some_path/etc/db_schema.xml' => '<xml>Some Content</xml>'
  175. ]);
  176. $primaryIterator = $this->getMockBuilder(FileIterator::class)
  177. ->disableOriginalConstructor()
  178. ->getMock();
  179. $primaryIterator->expects(self::once())
  180. ->method('toArray')
  181. ->willReturn([
  182. '/www/app/etc/db_schema.xml' => '<xml>Primary Content</xml>'
  183. ]);
  184. $directoryMock = $this->getMockBuilder(\Magento\Framework\Filesystem\Directory\ReadInterface::class)
  185. ->disableOriginalConstructor()
  186. ->getMock();
  187. $directoryMock->expects(self::once())
  188. ->method('search')
  189. ->with('{db_schema.xml,*/db_schema.xml}')
  190. ->willReturn(['app/etc/db_schema.xml']);
  191. $directoryMock->expects(self::once())
  192. ->method('getAbsolutePath')
  193. ->willReturn('/www/app/etc/db_schema.xml');
  194. $this->readerMock->expects(self::once())
  195. ->method('getConfigurationFiles')
  196. ->willReturn($iterator);
  197. $this->fileIteratorFactoryMock->expects(self::once())
  198. ->method('create')
  199. ->with(['/www/app/etc/db_schema.xml'])
  200. ->willReturn($primaryIterator);
  201. $this->fileDriver->expects(self::once())
  202. ->method('isFile')
  203. ->with('/www/app/etc/db_schema.xml')
  204. ->willReturn(true);
  205. $this->filesystemMock->expects(self::once())
  206. ->method('getDirectoryRead')
  207. ->willReturn($directoryMock);
  208. $this->componentRegistrarMock->expects(self::once())
  209. ->method('getPath')
  210. ->with('module', 'Magento_Some')
  211. ->willReturn('some_path');
  212. self::assertEquals(
  213. [
  214. 'some_path/etc/db_schema.xml' => '<xml>Some Content</xml>',
  215. '/www/app/etc/db_schema.xml' => '<xml>Primary Content</xml>'
  216. ],
  217. $this->model->get('db_schema.xml', 'Magento_Some')
  218. );
  219. }
  220. }