DataProviderFactoryTest.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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\Aggregation;
  7. use Magento\Elasticsearch\SearchAdapter\Aggregation\DataProviderFactory;
  8. use Magento\Elasticsearch\SearchAdapter\Dynamic\DataProvider;
  9. use Magento\Elasticsearch\SearchAdapter\QueryContainer;
  10. use Magento\Framework\ObjectManagerInterface;
  11. use Magento\Framework\Search\Dynamic\DataProviderInterface;
  12. class DataProviderFactoryTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  16. */
  17. private $objectManager;
  18. /**
  19. * @var DataProviderFactory
  20. */
  21. private $factory;
  22. protected function setUp()
  23. {
  24. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  25. $this->objectManager = $this->getMockBuilder(\Magento\Framework\ObjectManagerInterface::class)
  26. ->setMethods(['create'])
  27. ->getMockForAbstractClass();
  28. $this->factory = $objectManager->getObject(
  29. DataProviderFactory::class,
  30. ['objectManager' => $this->objectManager]
  31. );
  32. }
  33. public function testCreateDataProviderWithoutQuery()
  34. {
  35. $this->objectManager->expects($this->never())->method('create');
  36. /** @var DataProviderInterface $dataProvider */
  37. $dataProvider = $this->getMockBuilder(DataProviderInterface::class)
  38. ->getMockForAbstractClass();
  39. $this->assertSame($dataProvider, $this->factory->create($dataProvider));
  40. }
  41. public function testCreateDataProviderWithEmptyQuery()
  42. {
  43. $this->objectManager->expects($this->never())->method('create');
  44. /** @var DataProviderInterface $dataProvider */
  45. $dataProvider = $this->getMockBuilder(DataProviderInterface::class)
  46. ->getMockForAbstractClass();
  47. $this->assertSame($dataProvider, $this->factory->create($dataProvider, null));
  48. }
  49. public function testCreateDataProviderWithQuery()
  50. {
  51. $this->objectManager->expects($this->never())->method('create');
  52. /** @var DataProviderInterface $dataProvider */
  53. $dataProvider = $this->getMockBuilder(DataProviderInterface::class)
  54. ->getMockForAbstractClass();
  55. /** @var \PHPUnit_Framework_MockObject_MockObject $queryContainerMock */
  56. $queryContainerMock = $this->getMockBuilder(QueryContainer::class)
  57. ->setMethods(['getQuery'])
  58. ->disableOriginalConstructor()
  59. ->getMock();
  60. $queryContainerMock->expects($this->never())->method('getQuery');
  61. $this->assertSame($dataProvider, $this->factory->create($dataProvider, $queryContainerMock));
  62. }
  63. public function testCreateQueryAwareDataProvider()
  64. {
  65. /** @var DataProviderInterface $dataProvider */
  66. $dataProvider = $this->getMockBuilder(DataProvider::class)
  67. ->disableOriginalConstructor()
  68. ->getMock();
  69. /** @var \PHPUnit_Framework_MockObject_MockObject $queryContainer */
  70. $queryContainer = $this->getMockBuilder(QueryContainer::class)
  71. ->setMethods(['getQuery'])
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $queryContainer->expects($this->never())->method('getQuery');
  75. /** @var DataProviderInterface $recreatedDataProvider */
  76. $recreatedDataProvider = $this->getMockBuilder(DataProvider::class)
  77. ->disableOriginalConstructor()
  78. ->getMock();
  79. $this->objectManager->expects($this->once())
  80. ->method('create')
  81. ->with($this->isType('string'), ['queryContainer' => $queryContainer])
  82. ->willReturn($recreatedDataProvider);
  83. $result = $this->factory->create($dataProvider, $queryContainer);
  84. $this->assertNotSame($dataProvider, $result);
  85. $this->assertSame($recreatedDataProvider, $result);
  86. }
  87. /**
  88. * @expectedException \LogicException
  89. * @expectedExceptionMessage must be configured with a search query, but the query is empty
  90. */
  91. public function testCreateContainerAwareDataProviderWithoutQuery()
  92. {
  93. $this->objectManager->expects($this->never())->method('create');
  94. /** @var DataProviderInterface $dataProvider */
  95. $dataProvider = $this->getMockBuilder(DataProvider::class)
  96. ->disableOriginalConstructor()
  97. ->getMock();
  98. $this->factory->create($dataProvider, null);
  99. }
  100. }