IndexerHandlerTest.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Elasticsearch\Test\Unit\Model\Indexer;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  8. use Magento\Elasticsearch\Model\Indexer\IndexerHandler;
  9. class IndexerHandlerTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var IndexerHandler
  13. */
  14. private $model;
  15. /**
  16. * @var \Magento\Elasticsearch\Model\Adapter\Elasticsearch|\PHPUnit_Framework_MockObject_MockObject
  17. */
  18. private $adapter;
  19. /**
  20. * @var \Magento\Framework\Indexer\SaveHandler\Batch|\PHPUnit_Framework_MockObject_MockObject
  21. */
  22. private $batch;
  23. /**
  24. * @var \Magento\Elasticsearch\Model\Adapter\ElasticsearchFactory|\PHPUnit_Framework_MockObject_MockObject
  25. */
  26. private $adapterFactory;
  27. /**
  28. * @var \Magento\Framework\Indexer\IndexStructureInterface|\PHPUnit_Framework_MockObject_MockObject
  29. */
  30. private $indexStructure;
  31. /**
  32. * @var \Magento\Elasticsearch\Model\Adapter\Index\IndexNameResolver|\PHPUnit_Framework_MockObject_MockObject
  33. */
  34. private $indexNameResolver;
  35. /**
  36. * @var \Magento\Elasticsearch\Model\Client\Elasticsearch|\PHPUnit_Framework_MockObject_MockObject
  37. */
  38. private $client;
  39. /**
  40. * @var \Magento\Framework\App\ScopeResolverInterface|\PHPUnit_Framework_MockObject_MockObject
  41. */
  42. private $scopeResolver;
  43. /**
  44. * @var \Magento\Framework\App\ScopeInterface|\PHPUnit_Framework_MockObject_MockObject
  45. */
  46. private $scopeInterface;
  47. /**
  48. * Set up test environment.
  49. *
  50. * @return void
  51. */
  52. protected function setUp()
  53. {
  54. $this->adapter = $this->getMockBuilder(\Magento\Elasticsearch\Model\Adapter\Elasticsearch::class)
  55. ->disableOriginalConstructor()
  56. ->getMock();
  57. $this->adapterFactory = $this->getMockBuilder(\Magento\Elasticsearch\Model\Adapter\ElasticsearchFactory::class)
  58. ->disableOriginalConstructor()
  59. ->setMethods(['create'])
  60. ->getMock();
  61. $this->adapterFactory->expects($this->any())
  62. ->method('create')
  63. ->willReturn($this->adapter);
  64. $this->batch = $this->getMockBuilder(\Magento\Framework\Indexer\SaveHandler\Batch::class)
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $this->indexStructure = $this->getMockBuilder(\Magento\Framework\Indexer\IndexStructureInterface::class)
  68. ->disableOriginalConstructor()
  69. ->getMock();
  70. $this->indexNameResolver = $this->getMockBuilder(
  71. \Magento\Elasticsearch\Model\Adapter\Index\IndexNameResolver::class
  72. )
  73. ->disableOriginalConstructor()
  74. ->getMock();
  75. $this->client = $this->getMockBuilder(\Magento\Elasticsearch\Model\Client\Elasticsearch::class)
  76. ->setMethods(['ping'])
  77. ->disableOriginalConstructor()
  78. ->getMock();
  79. $this->scopeResolver = $this->getMockForAbstractClass(
  80. \Magento\Framework\App\ScopeResolverInterface::class,
  81. [],
  82. '',
  83. false
  84. );
  85. $this->scopeInterface = $this->getMockForAbstractClass(
  86. \Magento\Framework\App\ScopeInterface::class,
  87. [],
  88. '',
  89. false
  90. );
  91. $objectManager = new ObjectManagerHelper($this);
  92. $this->model = $objectManager->getObject(
  93. \Magento\Elasticsearch\Model\Indexer\IndexerHandler::class,
  94. [
  95. 'indexStructure' => $this->indexStructure,
  96. 'adapter' => $this->adapter,
  97. 'indexNameResolver' => $this->indexNameResolver,
  98. 'batch' => $this->batch,
  99. 'data' => ['indexer_id' => 'catalogsearch_fulltext'],
  100. 500,
  101. 'scopeResolver' => $this->scopeResolver
  102. ]
  103. );
  104. }
  105. public function testIsAvailable()
  106. {
  107. $this->adapter->expects($this->any())
  108. ->method('ping')
  109. ->willReturn(true);
  110. $this->client->expects($this->any())
  111. ->method('ping')
  112. ->willReturn(true);
  113. $result = $this->model->isAvailable();
  114. $this->assertTrue($result);
  115. }
  116. public function testDeleteIndex()
  117. {
  118. $dimensionValue = 3;
  119. $documentId = 123;
  120. $dimension = $this->getMockBuilder(\Magento\Framework\Search\Request\Dimension::class)
  121. ->disableOriginalConstructor()
  122. ->getMock();
  123. $dimension->expects($this->once())
  124. ->method('getValue')
  125. ->willReturn($dimensionValue);
  126. $this->scopeResolver->expects($this->once())
  127. ->method('getScope')
  128. ->willReturn($this->scopeInterface);
  129. $this->scopeInterface->expects($this->once())
  130. ->method('getId')
  131. ->willReturn($dimensionValue);
  132. $result = $this->model->deleteIndex([$dimension], new \ArrayIterator([$documentId]));
  133. $this->assertEquals($this->model, $result);
  134. }
  135. public function testSaveIndex()
  136. {
  137. $dimensionValue = 3;
  138. $documentId = 123;
  139. $documents = new \ArrayIterator([$documentId]);
  140. $dimension = $this->getMockBuilder(\Magento\Framework\Search\Request\Dimension::class)
  141. ->disableOriginalConstructor()
  142. ->getMock();
  143. $dimension->expects($this->once())
  144. ->method('getValue')
  145. ->willReturn($dimensionValue);
  146. $this->batch->expects($this->once())
  147. ->method('getItems')
  148. ->with($documents, 500)
  149. ->willReturn([[]]);
  150. $this->adapter->expects($this->once())
  151. ->method('prepareDocsPerStore')
  152. ->with([], $dimensionValue)
  153. ->willReturn([$documentId]);
  154. $this->adapter->expects($this->once())
  155. ->method('addDocs')
  156. ->with([$documentId]);
  157. $this->scopeResolver->expects($this->once())
  158. ->method('getScope')
  159. ->willReturn($this->scopeInterface);
  160. $this->scopeInterface->expects($this->once())
  161. ->method('getId')
  162. ->willReturn($dimensionValue);
  163. $result = $this->model->saveIndex([$dimension], $documents);
  164. $this->assertEquals($this->model, $result);
  165. }
  166. /**
  167. * Test cleanIndex() method.
  168. */
  169. public function testCleanIndexCatalogSearchFullText()
  170. {
  171. $dimensionValue = 'SomeDimension';
  172. $dimension = $this->getMockBuilder(\Magento\Framework\Search\Request\Dimension::class)
  173. ->disableOriginalConstructor()
  174. ->getMock();
  175. $dimension->expects($this->any())
  176. ->method('getValue')
  177. ->willReturn($dimensionValue);
  178. $this->adapter->expects($this->any())
  179. ->method('cleanIndex');
  180. $result = $this->model->cleanIndex([$dimension]);
  181. $this->assertEquals($this->model, $result);
  182. }
  183. /**
  184. * Test cleanIndex() method.
  185. */
  186. public function testCleanIndex()
  187. {
  188. $objectManager = new ObjectManagerHelper($this);
  189. $model = $objectManager->getObject(
  190. \Magento\Elasticsearch\Model\Indexer\IndexerHandler::class,
  191. [
  192. 'adapterFactory' => $this->adapterFactory,
  193. 'batch' => $this->batch,
  194. 'data' => ['indexer_id' => 'else_indexer_id'],
  195. ]
  196. );
  197. $dimensionValue = 'SomeDimension';
  198. $dimension = $this->getMockBuilder(\Magento\Framework\Search\Request\Dimension::class)
  199. ->disableOriginalConstructor()
  200. ->getMock();
  201. $dimension->expects($this->any())
  202. ->method('getValue')
  203. ->willReturn($dimensionValue);
  204. $this->adapter->expects($this->any())
  205. ->method('cleanIndex');
  206. $result = $model->cleanIndex([$dimension]);
  207. $this->assertEquals($model, $result);
  208. }
  209. }