BuilderTest.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Search\Test\Unit\Request;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  8. class BuilderTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Framework\Search\Request\Builder
  12. */
  13. private $requestBuilder;
  14. /**
  15. * @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  16. */
  17. private $objectManager;
  18. /**
  19. * @var \Magento\Framework\Search\Request\Config|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $config;
  22. /**
  23. * @var \Magento\Framework\Search\Request\Mapper|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $requestMapper;
  26. /**
  27. * @var \Magento\Framework\Search\Request|\PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $request;
  30. /**
  31. * @var \Magento\Framework\Search\Request\Binder|\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $binder;
  34. /**
  35. * @var \Magento\Framework\Search\Request\Cleaner|\PHPUnit_Framework_MockObject_MockObject
  36. */
  37. private $cleaner;
  38. protected function setUp()
  39. {
  40. $helper = new ObjectManager($this);
  41. $this->config = $this->getMockBuilder(\Magento\Framework\Search\Request\Config::class)
  42. ->setMethods(['get'])
  43. ->disableOriginalConstructor()
  44. ->getMock();
  45. $this->objectManager = $this->createMock(\Magento\Framework\ObjectManagerInterface::class);
  46. $this->requestMapper = $this->getMockBuilder(\Magento\Framework\Search\Request\Mapper::class)
  47. ->setMethods(['getRootQuery', 'getBuckets'])
  48. ->disableOriginalConstructor()
  49. ->getMock();
  50. $this->request = $this->getMockBuilder(\Magento\Framework\Search\Request::class)
  51. ->disableOriginalConstructor()
  52. ->getMock();
  53. $this->binder = $this->getMockBuilder(\Magento\Framework\Search\Request\Binder::class)
  54. ->setMethods(['bind'])
  55. ->disableOriginalConstructor()
  56. ->getMock();
  57. $this->cleaner = $this->getMockBuilder(\Magento\Framework\Search\Request\Cleaner::class)
  58. ->setMethods(['clean'])
  59. ->disableOriginalConstructor()
  60. ->getMock();
  61. $this->requestBuilder = $helper->getObject(
  62. \Magento\Framework\Search\Request\Builder::class,
  63. [
  64. 'config' => $this->config,
  65. 'objectManager' => $this->objectManager,
  66. 'binder' => $this->binder,
  67. 'cleaner' => $this->cleaner
  68. ]
  69. );
  70. }
  71. /**
  72. * @expectedException \InvalidArgumentException
  73. */
  74. public function testCreateInvalidArgumentExceptionNotDefined()
  75. {
  76. $this->requestBuilder->create();
  77. }
  78. /**
  79. * @expectedException \Magento\Framework\Search\Request\NonExistingRequestNameException
  80. * @expectedExceptionMessage Request name 'rn' doesn't exist.
  81. */
  82. public function testCreateInvalidArgumentException()
  83. {
  84. $requestName = 'rn';
  85. $this->requestBuilder->setRequestName($requestName);
  86. $this->config->expects($this->once())->method('get')->with($this->equalTo($requestName))->willReturn(null);
  87. $this->requestBuilder->create();
  88. }
  89. /**
  90. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  91. */
  92. public function testCreate()
  93. {
  94. $data = [
  95. 'dimensions' => [
  96. 'scope' => [
  97. 'name' => 'scope',
  98. 'value' => 'default',
  99. ],
  100. ],
  101. 'queries' => [
  102. 'one_match_filters' => [
  103. 'name' => 'one_match_filters',
  104. 'boost' => '2',
  105. 'queryReference' => [
  106. [
  107. 'clause' => 'must',
  108. 'ref' => 'fulltext_search_query',
  109. ],
  110. [
  111. 'clause' => 'must',
  112. 'ref' => 'fulltext_search_query2',
  113. ],
  114. ],
  115. 'type' => 'boolQuery',
  116. ],
  117. 'fulltext_search_query' => [
  118. 'name' => 'fulltext_search_query',
  119. 'boost' => '5',
  120. 'value' => '$fulltext_search_query$',
  121. 'match' => [
  122. [
  123. 'field' => 'data_index',
  124. 'boost' => '2',
  125. ],
  126. ],
  127. 'type' => 'matchQuery',
  128. ],
  129. 'fulltext_search_query2' => [
  130. 'name' => 'fulltext_search_query2',
  131. 'filterReference' => [
  132. [
  133. 'ref' => 'pid',
  134. ],
  135. ],
  136. 'type' => 'filteredQuery',
  137. ],
  138. ],
  139. 'filters' => [
  140. 'pid' => [
  141. 'name' => 'pid',
  142. 'filterReference' => [
  143. [
  144. 'clause' => 'should',
  145. 'ref' => 'pidm',
  146. ],
  147. [
  148. 'clause' => 'should',
  149. 'ref' => 'pidsh',
  150. ],
  151. ],
  152. 'type' => 'boolFilter',
  153. ],
  154. 'pidm' => [
  155. 'name' => 'pidm',
  156. 'field' => 'product_id',
  157. 'type' => 'rangeFilter',
  158. 'from' => '$pidm_from$',
  159. 'to' => '$pidm_to$',
  160. ],
  161. 'pidsh' => [
  162. 'name' => 'pidsh',
  163. 'field' => 'product_id',
  164. 'type' => 'termFilter',
  165. 'value' => '$pidsh$',
  166. ],
  167. ],
  168. 'from' => '10',
  169. 'size' => '10',
  170. 'query' => 'one_match_filters',
  171. 'index' => 'catalogsearch_fulltext',
  172. 'aggregations' => [],
  173. ];
  174. $requestName = 'rn';
  175. $this->requestBuilder->bind('fulltext_search_query', 'socks');
  176. $this->requestBuilder->bind('pidsh', 4);
  177. $this->requestBuilder->bind('pidm_from', 1);
  178. $this->requestBuilder->bind('pidm_to', 3);
  179. $this->requestBuilder->setRequestName($requestName);
  180. $this->requestBuilder->setSize(10);
  181. $this->requestBuilder->setFrom(10);
  182. $this->requestBuilder->bindDimension('scope', 'default');
  183. $this->binder->expects($this->once())->method('bind')->willReturn($data);
  184. $this->cleaner->expects($this->once())->method('clean')->willReturn($data);
  185. $this->requestMapper->expects($this->once())->method('getRootQuery')->willReturn([]);
  186. $this->objectManager->expects($this->at(0))->method('create')->willReturn($this->requestMapper);
  187. $this->objectManager->expects($this->at(2))->method('create')->willReturn($this->request);
  188. $this->config->expects($this->once())->method('get')->with($this->equalTo($requestName))->willReturn($data);
  189. $result = $this->requestBuilder->create();
  190. $this->assertInstanceOf(\Magento\Framework\Search\Request::class, $result);
  191. }
  192. }