SearchTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  8. /**
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class SearchTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var \Magento\Framework\Search\Search
  15. */
  16. protected $model;
  17. /**
  18. * @var \Magento\Framework\Search\Request\Builder|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $requestBuilder;
  21. /**
  22. * @var \Magento\Framework\Search\SearchEngineInterface|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $searchEngine;
  25. /**
  26. * @var \Magento\Framework\Search\SearchResponseBuilder|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $searchResponseBuilder;
  29. /**
  30. * @var \Magento\Framework\App\ScopeResolverInterface|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $scopeResolver;
  33. protected function setUp()
  34. {
  35. $objectManager = new ObjectManager($this);
  36. $this->requestBuilder = $this->getMockBuilder(\Magento\Framework\Search\Request\Builder::class)
  37. ->disableOriginalConstructor()
  38. ->getMock();
  39. $this->searchEngine = $this->getMockBuilder(\Magento\Framework\Search\SearchEngineInterface::class)
  40. ->disableOriginalConstructor()
  41. ->getMock();
  42. $this->searchResponseBuilder = $this->getMockBuilder(\Magento\Framework\Search\SearchResponseBuilder::class)
  43. ->disableOriginalConstructor()
  44. ->getMock();
  45. $this->scopeResolver = $this->getMockBuilder(\Magento\Framework\App\ScopeResolverInterface::class)
  46. ->disableOriginalConstructor()
  47. ->getMockForAbstractClass();
  48. $this->model = $objectManager->getObject(
  49. \Magento\Framework\Search\Search::class,
  50. [
  51. 'requestBuilder' => $this->requestBuilder,
  52. 'searchEngine' => $this->searchEngine,
  53. 'searchResponseBuilder' => $this->searchResponseBuilder,
  54. 'scopeResolver' => $this->scopeResolver,
  55. ]
  56. );
  57. }
  58. public function testSearch()
  59. {
  60. $requestName = 'requestName';
  61. $scopeId = 333;
  62. $filters = [
  63. $this->createFilterMock('array_filter', ['arrayValue1', 'arrayValue2']),
  64. $this->createFilterMock('simple_filter', 'filterValue'),
  65. $this->createFilterMock('from_filter', ['from' => 30]),
  66. $this->createFilterMock('to_filter', ['to' => 100]),
  67. $this->createFilterMock('range_filter', ['from' => 60, 'to' => 82]),
  68. ];
  69. $scope = $this->getMockBuilder(\Magento\Framework\App\ScopeInterface::class)
  70. ->disableOriginalConstructor()
  71. ->getMockForAbstractClass();
  72. $filterGroup = $this->getMockBuilder(\Magento\Framework\Api\Search\FilterGroup::class)
  73. ->disableOriginalConstructor()
  74. ->getMock();
  75. $filterGroup->expects($this->once())
  76. ->method('getFilters')
  77. ->willReturn($filters);
  78. $searchCriteria = $this->getMockBuilder(\Magento\Framework\Api\Search\SearchCriteriaInterface::class)
  79. ->disableOriginalConstructor()
  80. ->getMockForAbstractClass();
  81. $searchCriteria->expects($this->once())
  82. ->method('getRequestName')
  83. ->willReturn($requestName);
  84. $searchCriteria->expects($this->once())
  85. ->method('getFilterGroups')
  86. ->willReturn([$filterGroup]);
  87. $searchResult = $this->getMockBuilder(\Magento\Framework\Api\Search\SearchResult::class)
  88. ->disableOriginalConstructor()
  89. ->getMockForAbstractClass();
  90. $request = $this->getMockBuilder(\Magento\Framework\Search\RequestInterface::class)
  91. ->disableOriginalConstructor()
  92. ->getMockForAbstractClass();
  93. $response = $this->getMockBuilder(\Magento\Framework\Search\ResponseInterface::class)
  94. ->disableOriginalConstructor()
  95. ->getMockForAbstractClass();
  96. $this->requestBuilder->expects($this->once())
  97. ->method('setRequestName')
  98. ->with($requestName);
  99. $this->requestBuilder->expects($this->once())
  100. ->method('bindDimension')
  101. ->with('scope', $scopeId);
  102. $this->requestBuilder->expects($this->exactly(6))
  103. ->method('bind');
  104. $this->requestBuilder->expects($this->once())
  105. ->method('create')
  106. ->willReturn($request);
  107. $this->searchEngine->expects($this->once())
  108. ->method('search')
  109. ->with($request)
  110. ->willReturn($response);
  111. $this->searchResponseBuilder->expects($this->once())
  112. ->method('build')
  113. ->with($response)
  114. ->willReturn($searchResult);
  115. $this->scopeResolver->expects($this->once())
  116. ->method('getScope')
  117. ->willReturn($scope);
  118. $scope->expects($this->once())
  119. ->method('getId')
  120. ->willReturn($scopeId);
  121. $searchResult = $this->model->search($searchCriteria);
  122. $this->assertInstanceOf(\Magento\Framework\Api\Search\SearchResultInterface::class, $searchResult);
  123. }
  124. /**
  125. * @param $field
  126. * @param $value
  127. * @return \Magento\Framework\Api\Filter|\PHPUnit_Framework_MockObject_MockObject
  128. */
  129. private function createFilterMock($field, $value)
  130. {
  131. $filter = $this->getMockBuilder(\Magento\Framework\Api\Filter::class)
  132. ->disableOriginalConstructor()
  133. ->getMock();
  134. $filter->expects($this->once())
  135. ->method('getField')
  136. ->willReturn($field);
  137. $filter->expects($this->once())
  138. ->method('getValue')
  139. ->willReturn($value);
  140. return $filter;
  141. }
  142. }