10 use Symfony\Component\Console\Tester\CommandTester;
26 private function attachViewToIndexerMock($indexerMock, array
$data)
29 $changelog = $this->getMockBuilder(\
Magento\Framework\Mview\View\Changelog::class)
30 ->disableOriginalConstructor()
33 $changelog->expects($this->any())
35 ->willReturn(range(0,
$data[
'view'][
'changelog'][
'list_size']-1));
38 $stateMock = $this->getMockBuilder(\
Magento\Indexer\Model\Mview\View\State::class)
39 ->disableOriginalConstructor()
46 $viewMock = $this->getMockBuilder(\
Magento\Framework\Mview\View::class)
47 ->disableOriginalConstructor()
48 ->setMethods([
'getChangelog',
'getState'])
51 $viewMock->expects($this->any())
54 $viewMock->expects($this->any())
55 ->method(
'getChangelog')
56 ->willReturn($changelog);
58 $indexerMock->method(
'getView')
59 ->willReturn($viewMock);
73 foreach ($indexers as $indexerData) {
74 $indexerMock = $this->getIndexerMock(
75 [
'getStatus',
'isScheduled',
'getState',
'getView'],
79 $indexerMock->method(
'getStatus')
80 ->willReturn($indexerData[
'status']);
81 $indexerMock->method(
'isScheduled')
82 ->willReturn($indexerData[
'is_scheduled']);
84 if ($indexerData[
'is_scheduled']) {
85 $this->attachViewToIndexerMock($indexerMock, $indexerData);
88 $indexerMocks[] = $indexerMock;
94 $commandTester =
new CommandTester($this->command);
95 $commandTester->execute([]);
97 $linesOutput = array_filter(explode(PHP_EOL, $commandTester->getDisplay()));
99 $spacer =
'+----------------+------------------+-----------+-------------------------+---------------------+';
101 $this->assertCount(8, $linesOutput,
'There should be 8 lines output. 3 Spacers, 1 header, 4 content.');
102 $this->assertEquals($linesOutput[0], $spacer,
"Lines 0, 2, 7 should be spacer lines");
103 $this->assertEquals($linesOutput[2], $spacer,
"Lines 0, 2, 7 should be spacer lines");
104 $this->assertEquals($linesOutput[7], $spacer,
"Lines 0, 2, 7 should be spacer lines");
106 $headerValues = array_values(array_filter(explode(
'|', $linesOutput[1])));
107 $this->assertEquals(
'Title', trim($headerValues[0]));
108 $this->assertEquals(
'Status', trim($headerValues[1]));
109 $this->assertEquals(
'Update On', trim($headerValues[2]));
110 $this->assertEquals(
'Schedule Status', trim($headerValues[3]));
111 $this->assertEquals(
'Schedule Updated', trim($headerValues[4]));
113 $indexer1 = array_values(array_filter(explode(
'|', $linesOutput[3])));
114 $this->assertEquals(
'Title_indexer1', trim($indexer1[0]));
115 $this->assertEquals(
'Ready', trim($indexer1[1]));
116 $this->assertEquals(
'Schedule', trim($indexer1[2]));
117 $this->assertEquals(
'idle (10 in backlog)', trim($indexer1[3]));
118 $this->assertEquals(
'2017-01-01 11:11:11', trim($indexer1[4]));
120 $indexer2 = array_values(array_filter(explode(
'|', $linesOutput[4])));
121 $this->assertEquals(
'Title_indexer2', trim($indexer2[0]));
122 $this->assertEquals(
'Reindex required', trim($indexer2[1]));
123 $this->assertEquals(
'Save', trim($indexer2[2]));
124 $this->assertEquals(
'', trim($indexer2[3]));
125 $this->assertEquals(
'', trim($indexer2[4]));
127 $indexer3 = array_values(array_filter(explode(
'|', $linesOutput[5])));
128 $this->assertEquals(
'Title_indexer3', trim($indexer3[0]));
129 $this->assertEquals(
'Processing', trim($indexer3[1]));
130 $this->assertEquals(
'Schedule', trim($indexer3[2]));
131 $this->assertEquals(
'idle (100 in backlog)', trim($indexer3[3]));
132 $this->assertEquals(
'2017-01-01 11:11:11', trim($indexer3[4]));
134 $indexer4 = array_values(array_filter(explode(
'|', $linesOutput[6])));
135 $this->assertEquals(
'Title_indexer4', trim($indexer4[0]));
136 $this->assertEquals(
'unknown', trim($indexer4[1]));
137 $this->assertEquals(
'Schedule', trim($indexer4[2]));
138 $this->assertEquals(
'running (20 in backlog)', trim($indexer4[3]));
139 $this->assertEquals(
'2017-01-01 11:11:11', trim($indexer4[4]));
151 'indexer_id' =>
'indexer_1',
152 'title' =>
'Title_indexer1',
154 'is_scheduled' =>
true,
158 'updated' =>
'2017-01-01 11:11:11',
166 'indexer_id' =>
'indexer_2',
167 'title' =>
'Title_indexer2',
169 'is_scheduled' =>
false,
173 'updated' =>
'2017-01-01 11:11:11',
176 'list_size' => 99999999
181 'indexer_id' =>
'indexer_3',
182 'title' =>
'Title_indexer3',
184 'is_scheduled' =>
true,
188 'updated' =>
'2017-01-01 11:11:11',
196 'indexer_id' =>
'indexer_4',
197 'title' =>
'Title_indexer4',
199 'is_scheduled' =>
true,
202 'status' =>
'running',
203 'updated' =>
'2017-01-01 11:11:11',
testExecuteAll(array $indexers)
initIndexerCollectionByItems(array $items)