SuggestTest.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Search\Test\Unit\Controller\Adminhtml\Ajax;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  8. use Magento\Framework\Controller\ResultFactory;
  9. class SuggestTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /** @var \Magento\Search\Controller\Ajax\Suggest */
  12. private $controller;
  13. /** @var ObjectManagerHelper */
  14. private $objectManagerHelper;
  15. /** @var \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject */
  16. private $request;
  17. /** @var \Magento\Framework\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
  18. private $url;
  19. /** @var \Magento\Backend\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject */
  20. private $context;
  21. /** @var \Magento\Search\Model\AutocompleteInterface|\PHPUnit_Framework_MockObject_MockObject */
  22. private $autocomplete;
  23. /**
  24. * @var \Magento\Framework\Controller\ResultFactory|\PHPUnit_Framework_MockObject_MockObject
  25. */
  26. protected $resultFactoryMock;
  27. /**
  28. * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
  29. */
  30. protected $resultRedirectMock;
  31. /**
  32. * @var \Magento\Framework\Controller\Result\Json|\PHPUnit_Framework_MockObject_MockObject
  33. */
  34. protected $resultJsonMock;
  35. protected function setUp()
  36. {
  37. $this->autocomplete = $this->getMockBuilder(\Magento\Search\Model\AutocompleteInterface::class)
  38. ->disableOriginalConstructor()
  39. ->setMethods(['getItems'])
  40. ->getMockForAbstractClass();
  41. $this->request = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
  42. ->disableOriginalConstructor()
  43. ->setMethods([])
  44. ->getMockForAbstractClass();
  45. $this->url = $this->getMockBuilder(\Magento\Framework\UrlInterface::class)
  46. ->disableOriginalConstructor()
  47. ->setMethods(['getBaseUrl'])
  48. ->getMockForAbstractClass();
  49. $this->resultFactoryMock = $this->getMockBuilder(\Magento\Framework\Controller\ResultFactory::class)
  50. ->disableOriginalConstructor()
  51. ->getMock();
  52. $this->resultRedirectMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class)
  53. ->disableOriginalConstructor()
  54. ->getMock();
  55. $this->resultJsonMock = $this->getMockBuilder(\Magento\Framework\Controller\Result\Json::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->context = $this->getMockBuilder(\Magento\Framework\App\Action\Context::class)
  59. ->disableOriginalConstructor()
  60. ->getMock();
  61. $this->context->expects($this->atLeastOnce())
  62. ->method('getRequest')
  63. ->will($this->returnValue($this->request));
  64. $this->context->expects($this->any())
  65. ->method('getUrl')
  66. ->will($this->returnValue($this->url));
  67. $this->context->expects($this->any())
  68. ->method('getResultFactory')
  69. ->willReturn($this->resultFactoryMock);
  70. $this->resultFactoryMock->expects($this->any())
  71. ->method('create')
  72. ->willReturnMap(
  73. [
  74. [ResultFactory::TYPE_REDIRECT, [], $this->resultRedirectMock],
  75. [ResultFactory::TYPE_JSON, [], $this->resultJsonMock]
  76. ]
  77. );
  78. $this->objectManagerHelper = new ObjectManagerHelper($this);
  79. $this->controller = $this->objectManagerHelper->getObject(
  80. \Magento\Search\Controller\Ajax\Suggest::class,
  81. [
  82. 'context' => $this->context,
  83. 'autocomplete' => $this->autocomplete
  84. ]
  85. );
  86. }
  87. public function testExecute()
  88. {
  89. $searchString = "simple";
  90. $firstItemMock = $this->getMockBuilder(\Magento\Search\Model\Autocomplete\Item::class)
  91. ->disableOriginalConstructor()
  92. ->setMockClassName('FirstItem')
  93. ->setMethods(['toArray'])
  94. ->getMock();
  95. $secondItemMock = $this->getMockBuilder(\Magento\Search\Model\Autocomplete\Item::class)
  96. ->disableOriginalConstructor()
  97. ->setMockClassName('SecondItem')
  98. ->setMethods(['toArray'])
  99. ->getMock();
  100. $this->request->expects($this->once())
  101. ->method('getParam')
  102. ->with('q')
  103. ->will($this->returnValue($searchString));
  104. $this->autocomplete->expects($this->once())
  105. ->method('getItems')
  106. ->will($this->returnValue([$firstItemMock, $secondItemMock]));
  107. $this->resultJsonMock->expects($this->once())
  108. ->method('setData')
  109. ->willReturnSelf();
  110. $this->assertSame($this->resultJsonMock, $this->controller->execute());
  111. }
  112. public function testExecuteEmptyQuery()
  113. {
  114. $url = 'some url';
  115. $searchString = '';
  116. $this->request->expects($this->once())
  117. ->method('getParam')
  118. ->with('q')
  119. ->will($this->returnValue($searchString));
  120. $this->url->expects($this->once())
  121. ->method('getBaseUrl')
  122. ->willReturn($url);
  123. $this->resultRedirectMock->expects($this->once())
  124. ->method('setUrl')
  125. ->with($url)
  126. ->willReturnSelf();
  127. $this->assertSame($this->resultRedirectMock, $this->controller->execute());
  128. }
  129. }