123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Indexer\Test\Unit\Console\Command;
- use Magento\Framework\Indexer\StateInterface;
- use Magento\Indexer\Console\Command\IndexerStatusCommand;
- use Symfony\Component\Console\Tester\CommandTester;
- class IndexerStatusCommandTest extends AbstractIndexerCommandCommonSetup
- {
- /**
- * Command being tested
- *
- * @var IndexerStatusCommand
- */
- private $command;
- /**
- * @param \PHPUnit_Framework_MockObject_MockObject $indexerMock
- * @param array $data
- * @return mixed
- */
- private function attachViewToIndexerMock($indexerMock, array $data)
- {
- /** @var \Magento\Framework\Mview\View\Changelog|\PHPUnit_Framework_MockObject_MockObject $changelog */
- $changelog = $this->getMockBuilder(\Magento\Framework\Mview\View\Changelog::class)
- ->disableOriginalConstructor()
- ->getMock();
- $changelog->expects($this->any())
- ->method('getList')
- ->willReturn(range(0, $data['view']['changelog']['list_size']-1));
- /** @var \Magento\Indexer\Model\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject $stateMock */
- $stateMock = $this->getMockBuilder(\Magento\Indexer\Model\Mview\View\State::class)
- ->disableOriginalConstructor()
- ->setMethods(null)
- ->getMock();
- $stateMock->addData($data['view']['state']);
- /** @var \Magento\Framework\Mview\View|\PHPUnit_Framework_MockObject_MockObject $viewMock */
- $viewMock = $this->getMockBuilder(\Magento\Framework\Mview\View::class)
- ->disableOriginalConstructor()
- ->setMethods(['getChangelog', 'getState'])
- ->getMock();
- $viewMock->expects($this->any())
- ->method('getState')
- ->willReturn($stateMock);
- $viewMock->expects($this->any())
- ->method('getChangelog')
- ->willReturn($changelog);
- $indexerMock->method('getView')
- ->willReturn($viewMock);
- return $indexerMock;
- }
- /**
- * @param array $indexers
- *
- * @dataProvider executeAllDataProvider
- */
- public function testExecuteAll(array $indexers)
- {
- $this->configureAdminArea();
- $indexerMocks = [];
- foreach ($indexers as $indexerData) {
- $indexerMock = $this->getIndexerMock(
- ['getStatus', 'isScheduled', 'getState', 'getView'],
- $indexerData
- );
- $indexerMock->method('getStatus')
- ->willReturn($indexerData['status']);
- $indexerMock->method('isScheduled')
- ->willReturn($indexerData['is_scheduled']);
- if ($indexerData['is_scheduled']) {
- $this->attachViewToIndexerMock($indexerMock, $indexerData);
- }
- $indexerMocks[] = $indexerMock;
- }
- $this->initIndexerCollectionByItems($indexerMocks);
- $this->command = new IndexerStatusCommand($this->objectManagerFactory);
- $commandTester = new CommandTester($this->command);
- $commandTester->execute([]);
- $linesOutput = array_filter(explode(PHP_EOL, $commandTester->getDisplay()));
- $spacer = '+----------------+------------------+-----------+-------------------------+---------------------+';
- $this->assertCount(8, $linesOutput, 'There should be 8 lines output. 3 Spacers, 1 header, 4 content.');
- $this->assertEquals($linesOutput[0], $spacer, "Lines 0, 2, 7 should be spacer lines");
- $this->assertEquals($linesOutput[2], $spacer, "Lines 0, 2, 7 should be spacer lines");
- $this->assertEquals($linesOutput[7], $spacer, "Lines 0, 2, 7 should be spacer lines");
- $headerValues = array_values(array_filter(explode('|', $linesOutput[1])));
- $this->assertEquals('Title', trim($headerValues[0]));
- $this->assertEquals('Status', trim($headerValues[1]));
- $this->assertEquals('Update On', trim($headerValues[2]));
- $this->assertEquals('Schedule Status', trim($headerValues[3]));
- $this->assertEquals('Schedule Updated', trim($headerValues[4]));
- $indexer1 = array_values(array_filter(explode('|', $linesOutput[3])));
- $this->assertEquals('Title_indexer1', trim($indexer1[0]));
- $this->assertEquals('Ready', trim($indexer1[1]));
- $this->assertEquals('Schedule', trim($indexer1[2]));
- $this->assertEquals('idle (10 in backlog)', trim($indexer1[3]));
- $this->assertEquals('2017-01-01 11:11:11', trim($indexer1[4]));
- $indexer2 = array_values(array_filter(explode('|', $linesOutput[4])));
- $this->assertEquals('Title_indexer2', trim($indexer2[0]));
- $this->assertEquals('Reindex required', trim($indexer2[1]));
- $this->assertEquals('Save', trim($indexer2[2]));
- $this->assertEquals('', trim($indexer2[3]));
- $this->assertEquals('', trim($indexer2[4]));
- $indexer3 = array_values(array_filter(explode('|', $linesOutput[5])));
- $this->assertEquals('Title_indexer3', trim($indexer3[0]));
- $this->assertEquals('Processing', trim($indexer3[1]));
- $this->assertEquals('Schedule', trim($indexer3[2]));
- $this->assertEquals('idle (100 in backlog)', trim($indexer3[3]));
- $this->assertEquals('2017-01-01 11:11:11', trim($indexer3[4]));
- $indexer4 = array_values(array_filter(explode('|', $linesOutput[6])));
- $this->assertEquals('Title_indexer4', trim($indexer4[0]));
- $this->assertEquals('unknown', trim($indexer4[1]));
- $this->assertEquals('Schedule', trim($indexer4[2]));
- $this->assertEquals('running (20 in backlog)', trim($indexer4[3]));
- $this->assertEquals('2017-01-01 11:11:11', trim($indexer4[4]));
- }
- /**
- * @return array
- */
- public function executeAllDataProvider()
- {
- return [
- [
- 'indexers' => [
- 'indexer_1' => [
- 'indexer_id' => 'indexer_1',
- 'title' => 'Title_indexer1',
- 'status' => StateInterface::STATUS_VALID,
- 'is_scheduled' => true,
- 'view' => [
- 'state' => [
- 'status' => 'idle',
- 'updated' => '2017-01-01 11:11:11',
- ],
- 'changelog' => [
- 'list_size' => 10
- ]
- ]
- ],
- 'indexer_2' => [
- 'indexer_id' => 'indexer_2',
- 'title' => 'Title_indexer2',
- 'status' => StateInterface::STATUS_INVALID,
- 'is_scheduled' => false,
- 'view' => [
- 'state' => [
- 'status' => 'idle',
- 'updated' => '2017-01-01 11:11:11',
- ],
- 'changelog' => [
- 'list_size' => 99999999
- ]
- ]
- ],
- 'indexer_3' => [
- 'indexer_id' => 'indexer_3',
- 'title' => 'Title_indexer3',
- 'status' => StateInterface::STATUS_WORKING,
- 'is_scheduled' => true,
- 'view' => [
- 'state' => [
- 'status' => 'idle',
- 'updated' => '2017-01-01 11:11:11',
- ],
- 'changelog' => [
- 'list_size' => 100
- ]
- ]
- ],
- 'indexer_4' => [
- 'indexer_id' => 'indexer_4',
- 'title' => 'Title_indexer4',
- 'status' => null,
- 'is_scheduled' => true,
- 'view' => [
- 'state' => [
- 'status' => 'running',
- 'updated' => '2017-01-01 11:11:11',
- ],
- 'changelog' => [
- 'list_size' => 20
- ]
- ]
- ],
- ],
- ],
- ];
- }
- }
|