DependencyInfoProviderTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Indexer\Test\Unit\Config;
  7. use Magento\Framework\Exception\NoSuchEntityException;
  8. use Magento\Framework\Indexer\Config\DependencyInfoProvider;
  9. use Magento\Framework\Indexer\ConfigInterface;
  10. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  11. class DependencyInfoProviderTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var ObjectManagerHelper
  15. */
  16. private $objectManagerHelper;
  17. /**
  18. * @var ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. private $configMock;
  21. /**
  22. * @var DependencyInfoProvider
  23. */
  24. private $dependencyInfoProvider;
  25. /**
  26. * @return void
  27. */
  28. protected function setUp()
  29. {
  30. $this->objectManagerHelper = new ObjectManagerHelper($this);
  31. $this->configMock = $this->getMockBuilder(ConfigInterface::class)
  32. ->getMockForAbstractClass();
  33. $this->dependencyInfoProvider = $this->objectManagerHelper->getObject(
  34. DependencyInfoProvider::class,
  35. [
  36. 'config' => $this->configMock,
  37. ]
  38. );
  39. }
  40. public function testGetDependencies()
  41. {
  42. $indexerId = 'indexer_1';
  43. $dependencies = [
  44. 'indexer_2',
  45. 'indexer_3',
  46. ];
  47. $this->addSeparateIndexersToConfigMock([
  48. [
  49. 'indexer_id' => $indexerId,
  50. 'dependencies' => $dependencies,
  51. ]
  52. ]);
  53. $this->assertSame($dependencies, $this->dependencyInfoProvider->getIndexerIdsToRunBefore($indexerId));
  54. }
  55. public function testGetDependenciesNonExistentIndexer()
  56. {
  57. $indexerId = 'indexer_1';
  58. $this->configMock
  59. ->method('getIndexer')
  60. ->willReturn([]);
  61. $this->expectException(NoSuchEntityException::class);
  62. $this->expectExceptionMessage((string)__("%1 indexer does not exist.", $indexerId));
  63. $this->dependencyInfoProvider->getIndexerIdsToRunBefore($indexerId);
  64. }
  65. /**
  66. * @param string $indexerId
  67. * @param array $indexersData
  68. * @param array $dependentIndexerIds
  69. * @dataProvider getDependentIndexerIdsDataProvider
  70. */
  71. public function testGetDependentIndexerIds(string $indexerId, array $indexersData, array $dependentIndexerIds)
  72. {
  73. $this->addSeparateIndexersToConfigMock($indexersData);
  74. $this->addAllIndexersToConfigMock($indexersData);
  75. $this->assertSame(
  76. $dependentIndexerIds,
  77. array_values($this->dependencyInfoProvider->getIndexerIdsToRunAfter($indexerId))
  78. );
  79. }
  80. /**
  81. * @return array
  82. */
  83. public function getDependentIndexerIdsDataProvider()
  84. {
  85. return [
  86. [
  87. 'indexer' => 'indexer_2',
  88. 'indexers' => [
  89. 'indexer_2' => [
  90. 'indexer_id' => 'indexer_2',
  91. 'dependencies' => [],
  92. ],
  93. 'indexer_4' => [
  94. 'indexer_id' => 'indexer_4',
  95. 'dependencies' => [
  96. 'indexer_2',
  97. ],
  98. ],
  99. 'indexer_3' => [
  100. 'indexer_id' => 'indexer_3',
  101. 'dependencies' => [
  102. 'indexer_4',
  103. ],
  104. ],
  105. 'indexer_1' => [
  106. 'indexer_id' => 'indexer_1',
  107. 'dependencies' => [
  108. 'indexer_2',
  109. 'indexer_3',
  110. ],
  111. ],
  112. 'indexer_5' => [
  113. 'indexer_id' => 'indexer_5',
  114. 'dependencies' => [],
  115. ],
  116. ],
  117. 'dependent_indexers' => ['indexer_4', 'indexer_1'],
  118. ]
  119. ];
  120. }
  121. public function testGetDependentIndexerIdsNonExistentIndexer()
  122. {
  123. $indexerId = 'indexer_1';
  124. $this->configMock
  125. ->method('getIndexer')
  126. ->willReturn([]);
  127. $this->expectException(NoSuchEntityException::class);
  128. $this->expectExceptionMessage((string)__("%1 indexer does not exist.", $indexerId));
  129. $this->dependencyInfoProvider->getIndexerIdsToRunAfter($indexerId);
  130. }
  131. /**
  132. * @param array $indexers
  133. */
  134. private function addSeparateIndexersToConfigMock(array $indexers)
  135. {
  136. $this->configMock
  137. ->method('getIndexer')
  138. ->willReturnMap(
  139. array_map(
  140. function ($elem) {
  141. return [$elem['indexer_id'], $elem];
  142. },
  143. $indexers
  144. )
  145. );
  146. }
  147. /**
  148. * @param array $indexers
  149. */
  150. private function addAllIndexersToConfigMock(array $indexers)
  151. {
  152. $this->configMock
  153. ->method('getIndexers')
  154. ->willReturn($indexers);
  155. }
  156. }