DataCollectionTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Indexer\Test\Unit\Ui\DataProvider\Indexer;
  7. use Magento\Framework\Data\Collection\EntityFactoryInterface;
  8. use Magento\Framework\DataObject;
  9. use Magento\Framework\Indexer\ConfigInterface;
  10. use Magento\Framework\Indexer\IndexerInterface;
  11. use Magento\Framework\Indexer\IndexerRegistry;
  12. use Magento\Framework\Indexer\StateInterface;
  13. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  14. use Magento\Indexer\Ui\DataProvider\Indexer\DataCollection;
  15. class DataCollectionTest extends \PHPUnit\Framework\TestCase
  16. {
  17. /**
  18. * @var ObjectManagerHelper
  19. */
  20. private $objectManagerHelper;
  21. /**
  22. * @var DataCollection
  23. */
  24. private $dataCollection;
  25. /**
  26. * @var ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $configMock;
  29. /**
  30. * @var IndexerRegistry|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. private $indexerRegistryMock;
  33. /**
  34. * @var EntityFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. private $entityFactoryMock;
  37. /**
  38. * @return void
  39. */
  40. protected function setUp()
  41. {
  42. $this->objectManagerHelper = new ObjectManagerHelper($this);
  43. $this->configMock = $this->getMockBuilder(ConfigInterface::class)
  44. ->getMockForAbstractClass();
  45. $this->indexerRegistryMock = $this->getMockBuilder(IndexerRegistry::class)
  46. ->disableOriginalConstructor()
  47. ->getMock();
  48. $this->entityFactoryMock = $this->getMockBuilder(EntityFactoryInterface::class)
  49. ->getMock();
  50. $this->dataCollection = $this->objectManagerHelper->getObject(
  51. DataCollection::class,
  52. [
  53. 'entityFactory' => $this->entityFactoryMock,
  54. 'config' => $this->configMock,
  55. 'indexerRegistry' => $this->indexerRegistryMock,
  56. ]
  57. );
  58. }
  59. /**
  60. * @param array $indexersData
  61. * @dataProvider loadDataDataProvider
  62. */
  63. public function testLoadData(array $indexersData)
  64. {
  65. $calls = [];
  66. foreach ($indexersData as $indexerId => $data) {
  67. $indexer = $this->getIndexerMock($data);
  68. $calls[] = [$indexerId, $indexer];
  69. }
  70. $this->configMock
  71. ->method('getIndexers')
  72. ->willReturn($indexersData);
  73. $this->entityFactoryMock
  74. ->method('create')
  75. ->willReturnMap([[DataObject::class, [], new DataObject()]]);
  76. $this->indexerRegistryMock
  77. ->expects($this->exactly(count($indexersData)))
  78. ->method('get')
  79. ->willReturnMap($calls);
  80. $this->assertFalse((bool)$this->dataCollection->isLoaded());
  81. foreach ($this->dataCollection->getItems() as $item) {
  82. $this->assertEmpty(
  83. array_diff(
  84. [
  85. 'indexer_id',
  86. 'title',
  87. 'description',
  88. 'is_scheduled',
  89. 'status',
  90. 'updated',
  91. ],
  92. array_keys($item->getData())
  93. )
  94. );
  95. $this->assertEmpty(
  96. array_diff(
  97. $indexersData[$item->getData('indexer_id')],
  98. $item->getData()
  99. )
  100. );
  101. }
  102. $this->assertTrue($this->dataCollection->isLoaded());
  103. }
  104. /**
  105. * @return array
  106. */
  107. public function loadDataDataProvider()
  108. {
  109. return [
  110. [
  111. 'indexers' => [
  112. 'indexer_2' => [
  113. 'getId' => 'indexer_2',
  114. 'getTitle' => 'Title_2',
  115. 'getDescription' => 'Description_2',
  116. 'isScheduled' => true,
  117. 'getStatus' => StateInterface::STATUS_INVALID,
  118. 'getLatestUpdated' => '2017/07/01'
  119. ],
  120. 'indexer_3' => [
  121. 'getId' => 'indexer_3',
  122. 'getTitle' => 'Title_3',
  123. 'getDescription' => 'Description_3',
  124. 'isScheduled' => true,
  125. 'getStatus' => StateInterface::STATUS_VALID,
  126. 'getLatestUpdated' => '2017/07/02'
  127. ],
  128. 'indexer_1' => [
  129. 'getId' => 'indexer_1',
  130. 'getTitle' => 'Title_1',
  131. 'getDescription' => 'Description_1',
  132. 'isScheduled' => false,
  133. 'getStatus' => StateInterface::STATUS_INVALID,
  134. 'getLatestUpdated' => '2017/07/03'
  135. ],
  136. ],
  137. ]
  138. ];
  139. }
  140. /**
  141. * @param array $data
  142. * @return \PHPUnit_Framework_MockObject_MockObject|IndexerInterface
  143. */
  144. private function getIndexerMock(array $data = [])
  145. {
  146. /** @var \PHPUnit_Framework_MockObject_MockObject|IndexerInterface $indexer */
  147. $indexer = $this->getMockBuilder(IndexerInterface::class)
  148. ->getMockForAbstractClass();
  149. foreach ($data as $methodName => $result) {
  150. $indexer
  151. ->method($methodName)
  152. ->willReturn($result);
  153. }
  154. return $indexer;
  155. }
  156. }