MapperTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Elasticsearch\Test\Unit\SearchAdapter;
  7. use Magento\Elasticsearch\SearchAdapter\Mapper;
  8. use Magento\Elasticsearch\SearchAdapter\Query\Builder as QueryBuilder;
  9. use Magento\Elasticsearch\SearchAdapter\Query\Builder\Match as MatchQueryBuilder;
  10. use Magento\Elasticsearch\SearchAdapter\Filter\Builder as FilterBuilder;
  11. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  12. /**
  13. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  14. */
  15. class MapperTest extends \PHPUnit\Framework\TestCase
  16. {
  17. /**
  18. * @var Mapper
  19. */
  20. protected $model;
  21. /**
  22. * @var QueryBuilder|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $queryBuilder;
  25. /**
  26. * @var MatchQueryBuilder|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $matchQueryBuilder;
  29. /**
  30. * @var FilterBuilder|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $filterBuilder;
  33. /**
  34. * Setup method
  35. * @return void
  36. */
  37. protected function setUp()
  38. {
  39. $this->queryBuilder = $this->getMockBuilder(\Magento\Elasticsearch\SearchAdapter\Query\Builder::class)
  40. ->setMethods([
  41. 'initQuery',
  42. 'initAggregations',
  43. ])
  44. ->disableOriginalConstructor()
  45. ->getMock();
  46. $this->matchQueryBuilder = $this->getMockBuilder(
  47. \Magento\Elasticsearch\SearchAdapter\Query\Builder\Match::class
  48. )
  49. ->setMethods(['build'])
  50. ->disableOriginalConstructor()
  51. ->getMock();
  52. $this->filterBuilder = $this->getMockBuilder(\Magento\Elasticsearch\SearchAdapter\Filter\Builder::class)
  53. ->disableOriginalConstructor()
  54. ->getMock();
  55. $this->queryBuilder->expects($this->any())
  56. ->method('initQuery')
  57. ->willReturn([
  58. 'body' => [
  59. 'query' => [],
  60. ],
  61. ]);
  62. $this->queryBuilder->expects($this->any())
  63. ->method('initAggregations')
  64. ->willReturn([
  65. 'body' => [
  66. 'query' => [],
  67. ],
  68. ]);
  69. $this->matchQueryBuilder->expects($this->any())
  70. ->method('build')
  71. ->willReturn([]);
  72. $objectManagerHelper = new ObjectManagerHelper($this);
  73. $this->model = $objectManagerHelper->getObject(
  74. \Magento\Elasticsearch\SearchAdapter\Mapper::class,
  75. [
  76. 'queryBuilder' => $this->queryBuilder,
  77. 'matchQueryBuilder' => $this->matchQueryBuilder,
  78. 'filterBuilder' => $this->filterBuilder
  79. ]
  80. );
  81. }
  82. /**
  83. * Test buildQuery() method with exception
  84. * @expectedException \InvalidArgumentException
  85. */
  86. public function testBuildQueryFailure()
  87. {
  88. $request = $this->getMockBuilder(\Magento\Framework\Search\RequestInterface::class)
  89. ->disableOriginalConstructor()
  90. ->getMock();
  91. $query = $this->getMockBuilder(\Magento\Framework\Search\Request\QueryInterface::class)
  92. ->disableOriginalConstructor()
  93. ->getMock();
  94. $request->expects($this->once())
  95. ->method('getQuery')
  96. ->willReturn($query);
  97. $query->expects($this->atLeastOnce())
  98. ->method('getType')
  99. ->willReturn('unknown');
  100. $this->model->buildQuery($request);
  101. }
  102. /**
  103. * Test buildQuery() method
  104. *
  105. * @param string $queryType
  106. * @param string $queryMock
  107. * @param string $referenceType
  108. * @param string $filterMock
  109. * @dataProvider buildQueryDataProvider
  110. */
  111. public function testBuildQuery($queryType, $queryMock, $referenceType, $filterMock)
  112. {
  113. $request = $this->getMockBuilder(\Magento\Framework\Search\RequestInterface::class)
  114. ->disableOriginalConstructor()
  115. ->getMock();
  116. $query = $this->getMockBuilder($queryMock)
  117. ->setMethods(['getMust', 'getMustNot', 'getType', 'getShould', 'getReferenceType', 'getReference'])
  118. ->disableOriginalConstructor()
  119. ->getMock();
  120. $matchQuery = $this->getMockBuilder(\Magento\Framework\Search\Request\Query\Match::class)
  121. ->disableOriginalConstructor()
  122. ->getMock();
  123. $filterQuery = $this->getMockBuilder($filterMock)
  124. ->disableOriginalConstructor()
  125. ->getMock();
  126. $request->expects($this->once())
  127. ->method('getQuery')
  128. ->willReturn($query);
  129. $query->expects($this->atLeastOnce())
  130. ->method('getType')
  131. ->willReturn($queryType);
  132. $query->expects($this->any())
  133. ->method('getMust')
  134. ->willReturn([$matchQuery]);
  135. $query->expects($this->any())
  136. ->method('getShould')
  137. ->willReturn([]);
  138. $query->expects($this->any())
  139. ->method('getMustNot')
  140. ->willReturn([]);
  141. $query->expects($this->any())
  142. ->method('getReferenceType')
  143. ->willReturn($referenceType);
  144. $query->expects($this->any())
  145. ->method('getReference')
  146. ->willReturn($filterQuery);
  147. $matchQuery->expects($this->any())
  148. ->method('getType')
  149. ->willReturn('matchQuery');
  150. $filterQuery->expects($this->any())
  151. ->method('getType')
  152. ->willReturn('matchQuery');
  153. $filterQuery->expects($this->any())
  154. ->method('getType')
  155. ->willReturn('matchQuery');
  156. $this->filterBuilder->expects(($this->any()))
  157. ->method('build')
  158. ->willReturn([
  159. 'bool' => [
  160. 'must' => [],
  161. ],
  162. ]);
  163. $this->model->buildQuery($request);
  164. }
  165. /**
  166. * @return array
  167. */
  168. public function buildQueryDataProvider()
  169. {
  170. return [
  171. [
  172. 'matchQuery', \Magento\Framework\Search\Request\Query\Match::class,
  173. 'query', \Magento\Framework\Search\Request\QueryInterface::class,
  174. ],
  175. [
  176. 'boolQuery', \Magento\Framework\Search\Request\Query\BoolExpression::class,
  177. 'query', \Magento\Framework\Search\Request\QueryInterface::class,
  178. ],
  179. [
  180. 'filteredQuery', \Magento\Framework\Search\Request\Query\Filter::class,
  181. 'query', \Magento\Framework\Search\Request\QueryInterface::class,
  182. ],
  183. [
  184. 'filteredQuery', \Magento\Framework\Search\Request\Query\Filter::class,
  185. 'filter', \Magento\Framework\Search\Request\FilterInterface::class,
  186. ],
  187. ];
  188. }
  189. }