PageRenderTime 48ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/magento/module-ui/Test/Unit/Model/Export/ConvertToXmlTest.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 296 lines | 214 code | 44 blank | 38 comment | 2 complexity | e1afae6b4a8953b8f1fc4a90af43043b MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Ui\Test\Unit\Model\Export;
  7. use Magento\Framework\App\Filesystem\DirectoryList;
  8. use Magento\Framework\Convert\ExcelFactory;
  9. use Magento\Framework\Filesystem;
  10. use Magento\Framework\Filesystem\Directory\WriteInterface as DirectoryWriteInterface;
  11. use Magento\Framework\Filesystem\File\WriteInterface as FileWriteInterface;
  12. use Magento\Framework\View\Element\UiComponentInterface;
  13. use Magento\Ui\Component\MassAction\Filter;
  14. use Magento\Ui\Model\Export\ConvertToXml;
  15. use Magento\Ui\Model\Export\MetadataProvider;
  16. use Magento\Ui\Model\Export\SearchResultIteratorFactory;
  17. class ConvertToXmlTest extends \PHPUnit_Framework_TestCase
  18. {
  19. /**
  20. * @var ConvertToXml
  21. */
  22. protected $model;
  23. /**
  24. * @var Filesystem | \PHPUnit_Framework_MockObject_MockObject
  25. */
  26. protected $filesystem;
  27. /**
  28. * @var Filter | \PHPUnit_Framework_MockObject_MockObject
  29. */
  30. protected $filter;
  31. /**
  32. * @var MetadataProvider | \PHPUnit_Framework_MockObject_MockObject
  33. */
  34. protected $metadataProvider;
  35. /**
  36. * @var ExcelFactory | \PHPUnit_Framework_MockObject_MockObject
  37. */
  38. protected $excelFactory;
  39. /**
  40. * @var SearchResultIteratorFactory | \PHPUnit_Framework_MockObject_MockObject
  41. */
  42. protected $iteratorFactory;
  43. /**
  44. * @var DirectoryWriteInterface | \PHPUnit_Framework_MockObject_MockObject
  45. */
  46. protected $directory;
  47. /**
  48. * @var FileWriteInterface | \PHPUnit_Framework_MockObject_MockObject
  49. */
  50. protected $stream;
  51. /**
  52. * @var UiComponentInterface | \PHPUnit_Framework_MockObject_MockObject
  53. */
  54. protected $component;
  55. public function setUp()
  56. {
  57. $this->directory = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\WriteInterface')
  58. ->getMockForAbstractClass();
  59. $this->filesystem = $this->getMockBuilder('Magento\Framework\Filesystem')
  60. ->disableOriginalConstructor()
  61. ->getMock();
  62. $this->filesystem->expects($this->any())
  63. ->method('getDirectoryWrite')
  64. ->with(DirectoryList::VAR_DIR)
  65. ->willReturn($this->directory);
  66. $this->filter = $this->getMockBuilder('Magento\Ui\Component\MassAction\Filter')
  67. ->disableOriginalConstructor()
  68. ->getMock();
  69. $this->metadataProvider = $this->getMockBuilder('Magento\Ui\Model\Export\MetadataProvider')
  70. ->disableOriginalConstructor()
  71. ->getMock();
  72. $this->excelFactory = $this->getMockBuilder('Magento\Framework\Convert\ExcelFactory')
  73. ->disableOriginalConstructor()
  74. ->setMethods(['create'])
  75. ->getMock();
  76. $this->iteratorFactory = $this->getMockBuilder('Magento\Ui\Model\Export\SearchResultIteratorFactory')
  77. ->disableOriginalConstructor()
  78. ->setMethods(['create'])
  79. ->getMock();
  80. $this->component = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface')
  81. ->getMockForAbstractClass();
  82. $this->stream = $this->getMockBuilder('Magento\Framework\Filesystem\File\WriteInterface')
  83. ->setMethods([
  84. 'lock',
  85. 'unlock',
  86. 'close',
  87. ])
  88. ->getMockForAbstractClass();
  89. $this->model = new ConvertToXml(
  90. $this->filesystem,
  91. $this->filter,
  92. $this->metadataProvider,
  93. $this->excelFactory,
  94. $this->iteratorFactory
  95. );
  96. }
  97. public function testGetRowData()
  98. {
  99. $data = ['data_value'];
  100. $document = $this->getMockBuilder('Magento\Framework\Api\Search\DocumentInterface')
  101. ->getMockForAbstractClass();
  102. $this->metadataProvider->expects($this->once())
  103. ->method('getRowData')
  104. ->with($document, [], [])
  105. ->willReturn($data);
  106. $this->metadataProvider->expects($this->once())
  107. ->method('getFields')
  108. ->with($this->component)
  109. ->willReturn([]);
  110. $this->metadataProvider->expects($this->once())
  111. ->method('getOptions')
  112. ->willReturn([]);
  113. $this->filter->expects($this->once())
  114. ->method('getComponent')
  115. ->willReturn($this->component);
  116. $result = $this->model->getRowData($document);
  117. $this->assertEquals($data, $result);
  118. }
  119. public function testGetXmlFile()
  120. {
  121. $componentName = 'component_name';
  122. $document = $this->getMockBuilder('Magento\Framework\Api\Search\DocumentInterface')
  123. ->getMockForAbstractClass();
  124. $this->mockComponent($componentName, $document);
  125. $this->mockStream();
  126. $this->mockFilter();
  127. $this->mockDirectory();
  128. $this->mockExcel($componentName);
  129. $this->metadataProvider->expects($this->once())
  130. ->method('getHeaders')
  131. ->with($this->component)
  132. ->willReturn([]);
  133. $this->metadataProvider->expects($this->once())
  134. ->method('convertDate')
  135. ->with($document, $componentName);
  136. $result = $this->model->getXmlFile();
  137. $this->assertTrue(is_array($result));
  138. $this->assertArrayHasKey('type', $result);
  139. $this->assertArrayHasKey('value', $result);
  140. $this->assertArrayHasKey('rm', $result);
  141. $this->assertContains($componentName, $result);
  142. $this->assertContains('.xml', $result);
  143. }
  144. protected function mockStream()
  145. {
  146. $this->stream->expects($this->once())
  147. ->method('lock')
  148. ->willReturnSelf();
  149. $this->stream->expects($this->once())
  150. ->method('unlock')
  151. ->willReturnSelf();
  152. $this->stream->expects($this->once())
  153. ->method('close')
  154. ->willReturnSelf();
  155. }
  156. /**
  157. * @param string $componentName
  158. */
  159. protected function mockExcel($componentName)
  160. {
  161. $searchResultIterator = $this->getMockBuilder('Magento\Ui\Model\Export\SearchResultIterator')
  162. ->disableOriginalConstructor()
  163. ->getMock();
  164. $excel = $this->getMockBuilder('Magento\Framework\Convert\Excel')
  165. ->disableOriginalConstructor()
  166. ->getMock();
  167. $this->iteratorFactory->expects($this->once())
  168. ->method('create')
  169. ->with(['items' => []])
  170. ->willReturn($searchResultIterator);
  171. $this->excelFactory->expects($this->once())
  172. ->method('create')
  173. ->with([
  174. 'iterator' => $searchResultIterator,
  175. 'rowCallback' => [$this->model, 'getRowData'],
  176. ])
  177. ->willReturn($excel);
  178. $excel->expects($this->once())
  179. ->method('setDataHeader')
  180. ->with([])
  181. ->willReturnSelf();
  182. $excel->expects($this->once())
  183. ->method('write')
  184. ->with($this->stream, $componentName . '.xml')
  185. ->willReturnSelf();
  186. }
  187. /**
  188. * @param string $componentName
  189. * @param null|object $document
  190. */
  191. protected function mockComponent($componentName, $document = null)
  192. {
  193. $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
  194. ->setMethods(['getDataProvider'])
  195. ->getMockForAbstractClass();
  196. $dataProvider = $this->getMockBuilder(
  197. 'Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface'
  198. )
  199. ->setMethods(['getSearchResult'])
  200. ->getMockForAbstractClass();
  201. $searchResult = $this->getMockBuilder('Magento\Framework\Api\Search\SearchResultInterface')
  202. ->setMethods(['getItems'])
  203. ->getMockForAbstractClass();
  204. $this->component->expects($this->any())
  205. ->method('getName')
  206. ->willReturn($componentName);
  207. $this->component->expects($this->once())
  208. ->method('getContext')
  209. ->willReturn($context);
  210. $context->expects($this->once())
  211. ->method('getDataProvider')
  212. ->willReturn($dataProvider);
  213. $dataProvider->expects($this->once())
  214. ->method('getSearchResult')
  215. ->willReturn($searchResult);
  216. if ($document) {
  217. $searchResult->expects($this->at(0))
  218. ->method('getItems')
  219. ->willReturn([$document]);
  220. $searchResult->expects($this->at(1))
  221. ->method('getItems')
  222. ->willReturn([]);
  223. } else {
  224. $searchResult->expects($this->at(0))
  225. ->method('getItems')
  226. ->willReturn([]);
  227. }
  228. }
  229. protected function mockFilter()
  230. {
  231. $this->filter->expects($this->once())
  232. ->method('getComponent')
  233. ->willReturn($this->component);
  234. $this->filter->expects($this->once())
  235. ->method('prepareComponent')
  236. ->with($this->component)
  237. ->willReturnSelf();
  238. $this->filter->expects($this->once())
  239. ->method('applySelectionOnTargetProvider')
  240. ->willReturnSelf();
  241. }
  242. protected function mockDirectory()
  243. {
  244. $this->directory->expects($this->once())
  245. ->method('create')
  246. ->with('export')
  247. ->willReturnSelf();
  248. $this->directory->expects($this->once())
  249. ->method('openFile')
  250. ->willReturn($this->stream);
  251. }
  252. }