Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DependencyDecoratorTest.php
Go to the documentation of this file.
1 <?php
8 
17 
18 class DependencyDecoratorTest extends \PHPUnit\Framework\TestCase
19 {
23  private $objectManagerHelper;
24 
28  private $dependencyDecorator;
29 
33  private $indexerMock;
34 
38  private $dependencyInfoProviderMock;
39 
43  private $indexerRegistryMock;
44 
48  protected function setUp()
49  {
50  $this->objectManagerHelper = new ObjectManagerHelper($this);
51 
52  $this->indexerMock = $this->getMockBuilder(IndexerInterface::class)
53  ->getMockForAbstractClass();
54 
55  $this->dependencyInfoProviderMock = $this->getMockBuilder(DependencyInfoProviderInterface::class)
56  ->getMockForAbstractClass();
57 
58  $this->indexerRegistryMock = $this->getMockBuilder(IndexerRegistry::class)
59  ->disableOriginalConstructor()
60  ->getMock();
61 
62  $this->dependencyDecorator = $this->objectManagerHelper->getObject(
63  DependencyDecorator::class,
64  [
65  'indexer' => $this->indexerMock,
66  'dependencyInfoProvider' => $this->dependencyInfoProviderMock,
67  'indexerRegistry' => $this->indexerRegistryMock,
68  ]
69  );
70  }
71 
78  public function testOverload(string $methodName, array $params = [], $result = null)
79  {
80  $indexerMock = $this->getMockBuilder(Indexer::class)
81  ->disableOriginalConstructor()
82  ->getMock();
83  $dependencyDecorator = $this->objectManagerHelper->getObject(
84  DependencyDecorator::class,
85  [
86  'indexer' => $indexerMock,
87  'dependencyInfoProvider' => $this->dependencyInfoProviderMock,
88  'indexerRegistry' => $this->indexerRegistryMock,
89  ]
90  );
91  $indexerMock
92  ->expects($this->once())
93  ->method($methodName)
94  ->with(...$params)
95  ->willReturn($result);
96  $this->assertSame($result, $dependencyDecorator->{$methodName}(...$params));
97  }
98 
102  public function overloadDataProvider()
103  {
104  return [
105  ['getData', [], ['field_id' => 'field_value']],
106  ['setId', ['newId'], true]
107  ];
108  }
109 
115  public function testTransitMethods(string $methodName, $result)
116  {
117  $this->indexerMock
118  ->expects($this->once())
119  ->method($methodName)
120  ->with()
121  ->willReturn($result);
122  $this->assertSame($result, $this->dependencyDecorator->{$methodName}());
123  }
124 
128  public function transitMethodsDataProvider()
129  {
130  return [
131  ['getId', 'indexer_1'],
132  ['getViewId', 'view1'],
133  ['getActionClass', 'className'],
134  ['getDescription', 'some_text'],
135  ['getFields', ['one', 'two']],
136  ['getSources', ['one', 'two']],
137  ['getHandlers', ['one', 'two']],
138  ['getView', $this->getMockBuilder(View::class)->disableOriginalConstructor()->getMock()],
139  ['getState', $this->getMockBuilder(StateInterface::class)->getMockForAbstractClass()],
140  ['isScheduled', true],
141  ['isValid', false],
142  ['isInvalid', true],
143  ['isWorking', true],
144  ['getStatus', 'valid'],
145  ['getLatestUpdated', '42'],
146  ];
147  }
148 
154  public function testTransitMethodsWithParamsAndEmptyReturn(string $methodName, array $params)
155  {
156  $this->indexerMock
157  ->expects($this->once())
158  ->method($methodName)
159  ->with(...$params);
160  $this->assertEmpty($this->dependencyDecorator->{$methodName}(...$params));
161  }
162 
167  {
168  return [
169  ['setScheduled', [true]],
170  ];
171  }
172 
178  public function testTransitMethodsWithParamsAndSelfReturn(string $methodName, array $params)
179  {
180  $this->indexerMock
181  ->expects($this->once())
182  ->method($methodName)
183  ->with(...$params);
184  $this->assertEquals($this->dependencyDecorator, $this->dependencyDecorator->{$methodName}(...$params));
185  }
186 
191  {
192  return [
193  [
194  'setState',
195  [
196  $this->getMockBuilder(StateInterface::class)
197  ->getMockForAbstractClass()
198  ]
199  ],
200  ['load', ['indexer_1']],
201  ];
202  }
203 
204  public function testReindexAll()
205  {
206  $this->indexerMock
207  ->expects($this->once())
208  ->method('reindexAll')
209  ->with();
210  $this->dependencyDecorator->reindexAll();
211  }
212 
213  public function testInvalidate()
214  {
215  $indexerId = 'indexer_1';
216  $dependentIds = ['indexer_2', 'indexer_3'];
217  $calls = [];
218  foreach ($dependentIds as $dependentId) {
219  $indexer = $this->getIndexerMock();
220  $indexer->expects($this->once())
221  ->method('invalidate');
222  $calls[] = [$dependentId, $indexer];
223  }
224  $this->indexerMock
225  ->expects($this->once())
226  ->method('invalidate')
227  ->with();
228  $this->indexerMock
229  ->method('getId')
230  ->willReturn($indexerId);
231  $this->dependencyInfoProviderMock
232  ->expects($this->once())
233  ->method('getIndexerIdsToRunAfter')
234  ->with($indexerId)
235  ->willReturn($dependentIds);
236  $this->indexerRegistryMock
237  ->expects($this->exactly(count($dependentIds)))
238  ->method('get')
239  ->willReturnMap($calls);
240  $this->dependencyDecorator->invalidate();
241  }
242 
243  public function testReindexRow()
244  {
245  $inputId = 100200;
246  $indexerId = 'indexer_1';
247  $dependentIds = ['indexer_2', 'indexer_3'];
248  $calls = [];
249  foreach ($dependentIds as $dependentId) {
250  $indexer = $this->getIndexerMock();
251  $indexer->expects($this->once())
252  ->method('reindexRow')
253  ->with($inputId);
254  $calls[] = [$dependentId, $indexer];
255  }
256  $this->indexerMock
257  ->expects($this->once())
258  ->method('reindexRow')
259  ->with($inputId);
260  $this->indexerMock
261  ->method('getId')
262  ->willReturn($indexerId);
263  $this->dependencyInfoProviderMock
264  ->expects($this->once())
265  ->method('getIndexerIdsToRunAfter')
266  ->with($indexerId)
267  ->willReturn($dependentIds);
268  $this->indexerRegistryMock
269  ->expects($this->exactly(count($dependentIds)))
270  ->method('get')
271  ->willReturnMap($calls);
272  $this->dependencyDecorator->reindexRow($inputId);
273  }
274 
275  public function testReindexList()
276  {
277  $inputIds = [100200, 100300];
278  $indexerId = 'indexer_1';
279  $dependentIds = ['indexer_2', 'indexer_3'];
280  $calls = [];
281  foreach ($dependentIds as $dependentId) {
282  $indexer = $this->getIndexerMock();
283  $indexer->expects($this->once())
284  ->method('reindexList')
285  ->with($inputIds);
286  $calls[] = [$dependentId, $indexer];
287  }
288  $this->indexerMock
289  ->expects($this->once())
290  ->method('reindexList')
291  ->with($inputIds);
292  $this->indexerMock
293  ->method('getId')
294  ->willReturn($indexerId);
295  $this->dependencyInfoProviderMock
296  ->expects($this->once())
297  ->method('getIndexerIdsToRunAfter')
298  ->with($indexerId)
299  ->willReturn($dependentIds);
300  $this->indexerRegistryMock
301  ->expects($this->exactly(count($dependentIds)))
302  ->method('get')
303  ->willReturnMap($calls);
304  $this->dependencyDecorator->reindexList($inputIds);
305  }
306 
310  private function getIndexerMock()
311  {
312  $indexer = $this->getMockBuilder(IndexerInterface::class)
313  ->getMockForAbstractClass();
314  return $indexer;
315  }
316 }
testOverload(string $methodName, array $params=[], $result=null)
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18