SuggestionsTest.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Elasticsearch6\Test\Unit\Model\DataProvider;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  8. use Magento\Elasticsearch\Model\DataProvider\Suggestions;
  9. use Magento\Elasticsearch\Model\Config;
  10. use Magento\Elasticsearch\SearchAdapter\ConnectionManager;
  11. use Magento\Search\Model\QueryResultFactory;
  12. use Magento\Framework\App\Config\ScopeConfigInterface;
  13. use Magento\Elasticsearch\SearchAdapter\SearchIndexNameResolver;
  14. use Magento\Store\Model\StoreManagerInterface as StoreManager;
  15. use Magento\Search\Model\QueryInterface;
  16. /**
  17. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  18. */
  19. class SuggestionsTest extends \PHPUnit\Framework\TestCase
  20. {
  21. /**
  22. * @var Suggestions
  23. */
  24. private $model;
  25. /**
  26. * @var Config|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $config;
  29. /**
  30. * @var QueryResultFactory|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. private $queryResultFactory;
  33. /**
  34. * @var ConnectionManager|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. private $connectionManager;
  37. /**
  38. * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  39. */
  40. private $scopeConfig;
  41. /**
  42. * @var SearchIndexNameResolver|\PHPUnit_Framework_MockObject_MockObject
  43. */
  44. private $searchIndexNameResolver;
  45. /**
  46. * @var StoreManager|\PHPUnit_Framework_MockObject_MockObject
  47. */
  48. private $storeManager;
  49. /**
  50. * @var QueryInterface|\PHPUnit_Framework_MockObject_MockObject
  51. */
  52. private $query;
  53. /**
  54. * Set up test environment
  55. *
  56. * @return void
  57. */
  58. protected function setUp()
  59. {
  60. $this->config = $this->getMockBuilder(\Magento\Elasticsearch\Model\Config::class)
  61. ->disableOriginalConstructor()
  62. ->setMethods(['isElasticsearchEnabled'])
  63. ->getMock();
  64. $this->queryResultFactory = $this->getMockBuilder(\Magento\Search\Model\QueryResultFactory::class)
  65. ->disableOriginalConstructor()
  66. ->setMethods(['create'])
  67. ->getMock();
  68. $this->connectionManager = $this->getMockBuilder(\Magento\Elasticsearch\SearchAdapter\ConnectionManager::class)
  69. ->disableOriginalConstructor()
  70. ->setMethods(['getConnection'])
  71. ->getMock();
  72. $this->scopeConfig = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
  73. ->disableOriginalConstructor()
  74. ->getMock();
  75. $this->searchIndexNameResolver = $this
  76. ->getMockBuilder(\Magento\Elasticsearch\SearchAdapter\SearchIndexNameResolver::class)
  77. ->disableOriginalConstructor()
  78. ->setMethods(['getIndexName'])
  79. ->getMock();
  80. $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
  81. ->disableOriginalConstructor()
  82. ->getMock();
  83. $this->query = $this->getMockBuilder(\Magento\Search\Model\QueryInterface::class)
  84. ->disableOriginalConstructor()
  85. ->getMock();
  86. $objectManager = new ObjectManagerHelper($this);
  87. $this->model = $objectManager->getObject(
  88. \Magento\Elasticsearch6\Model\DataProvider\Suggestions::class,
  89. [
  90. 'queryResultFactory' => $this->queryResultFactory,
  91. 'connectionManager' => $this->connectionManager,
  92. 'scopeConfig' => $this->scopeConfig,
  93. 'config' => $this->config,
  94. 'searchIndexNameResolver' => $this->searchIndexNameResolver,
  95. 'storeManager' => $this->storeManager
  96. ]
  97. );
  98. }
  99. /**
  100. * Test getItems() method
  101. */
  102. public function testGetItems()
  103. {
  104. $this->scopeConfig->expects($this->any())
  105. ->method('getValue')
  106. ->willReturn(1);
  107. $this->config->expects($this->any())
  108. ->method('isElasticsearchEnabled')
  109. ->willReturn(1);
  110. $store = $this->getMockBuilder(\Magento\Store\Api\Data\StoreInterface::class)
  111. ->disableOriginalConstructor()
  112. ->getMock();
  113. $this->storeManager->expects($this->any())
  114. ->method('getStore')
  115. ->willReturn($store);
  116. $store->expects($this->any())
  117. ->method('getId')
  118. ->willReturn(1);
  119. $this->searchIndexNameResolver->expects($this->any())
  120. ->method('getIndexName')
  121. ->willReturn('magento2_product_1');
  122. $this->query->expects($this->any())
  123. ->method('getQueryText')
  124. ->willReturn('query');
  125. $client = $this->getMockBuilder(\Magento\Elasticsearch6\Model\Client\Elasticsearch::class)
  126. ->disableOriginalConstructor()
  127. ->getMock();
  128. $this->connectionManager->expects($this->any())
  129. ->method('getConnection')
  130. ->willReturn($client);
  131. $client->expects($this->any())
  132. ->method('query')
  133. ->willReturn([
  134. 'suggest' => [
  135. 'phrase_field' => [
  136. 'options' => [
  137. 'text' => 'query',
  138. 'score' => 1,
  139. 'freq' => 1,
  140. ]
  141. ],
  142. ],
  143. ]);
  144. $query = $this->getMockBuilder(\Magento\Search\Model\QueryResult::class)
  145. ->disableOriginalConstructor()
  146. ->getMock();
  147. $this->queryResultFactory->expects($this->any())
  148. ->method('create')
  149. ->willReturn($query);
  150. $this->assertInternalType('array', $this->model->getItems($this->query));
  151. }
  152. }