Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
IndexerSetDimensionsModeCommandTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
11 use Symfony\Component\Console\Tester\CommandTester;
14 
19 {
25  private $command;
26 
32  private $configReaderMock;
33 
37  private $dimensionProviders;
38 
42  private $dimensionModeSwitcherMock;
43 
47  private $indexerMock;
48 
52  private $dimensionModes;
53 
57  protected function setUp()
58  {
59  parent::setUp();
60  $objectManagerHelper = new ObjectManagerHelper($this);
61  $this->configReaderMock = $this->createMock(ScopeConfigInterface::class);
62  $this->dimensionModeSwitcherMock =
63  $this->createMock(\Magento\Indexer\Model\ModeSwitcherInterface::class);
64  $this->dimensionProviders = [
65  'indexer_title' => $this->dimensionModeSwitcherMock,
66  ];
67  $this->dimensionModes = $this->createMock(\Magento\Indexer\Model\DimensionModes::class);
68  $this->command = $objectManagerHelper->getObject(
69  IndexerSetDimensionsModeCommand::class,
70  [
71  'objectManagerFactory' => $this->objectManagerFactory,
72  'configReader' => $this->configReaderMock,
73  'dimensionSwitchers' => $this->dimensionProviders,
74  ]
75  );
76  }
77 
83  protected function getObjectManagerReturnValueMap()
84  {
85  $result = parent::getObjectManagerReturnValueMap();
86  $this->indexerMock = $this->createMock(\Magento\Indexer\Model\Indexer::class);
87  $result[] = [\Magento\Indexer\Model\Indexer::class, $this->indexerMock];
88 
89  return $result;
90  }
91 
102  public function testExecuteWithAttributes($indexerTitle, $previousMode, $command, $consoleOutput)
103  {
104  $this->configureAdminArea();
105  $commandTester = new CommandTester($this->command);
106  $this->dimensionModes->method('getDimensions')->willReturn([
107  $previousMode => 'dimension1',
108  $command['mode'] => 'dimension2',
109  ]);
110  $this->dimensionModeSwitcherMock->method('getDimensionModes')->willReturn($this->dimensionModes);
111  $this->indexerMock->method('load')->willReturnSelf();
112  $this->indexerMock->method('getTitle')->willReturn($indexerTitle);
113  $commandTester->execute($command);
114  $actualValue = $commandTester->getDisplay();
115  $this->assertEquals(
116  $consoleOutput,
117  $actualValue
118  );
119  }
120 
124  public function dimensionModesDataProvider(): array
125  {
126  return [
127  'was_changed' => [
128  'indexer_title' => 'indexer_title',
129  'previousMode' => 'none',
130  'command' => [
131  'indexer' => 'indexer_title',
132  'mode' => 'store',
133  ],
134  'output' =>
135  sprintf(
136  'Dimensions mode for indexer "%s" was changed from \'%s\' to \'%s\'',
137  'indexer_title',
138  'none',
139  'store'
140  ) . PHP_EOL
141  ,
142  ],
143  'was_not_changed' => [
144  'indexer_title' => 'indexer_title',
145  'previousMode' => 'none',
146  'command' => [
147  'indexer' => 'indexer_title',
148  'mode' => 'none',
149  ],
150  'output' =>
151  sprintf(
152  'Dimensions mode for indexer "%s" has not been changed',
153  'indexer_title'
154  ) . PHP_EOL
155  ,
156  ],
157  ];
158  }
159 
169  {
170  $commandTester = new CommandTester($this->command);
171  $this->indexerMock->method('getTitle')->willReturn('indexer_title');
172  $commandTester->execute(['indexer' => 'non_existing_title']);
173  }
174 
183  {
184  $commandTester = new CommandTester($this->command);
185  $this->dimensionModes->method('getDimensions')->willReturn([
186  'store' => 'dimension1',
187  'website' => 'dimension2',
188  ]);
189  $this->dimensionModeSwitcherMock->method('getDimensionModes')->willReturn($this->dimensionModes);
190  $this->indexerMock->method('getTitle')->willReturn('indexer_title');
191  $commandTester->execute([
192  'indexer' => 'indexer_title',
193  ]);
194  }
195 
201  public function testExecuteWithNoArguments()
202  {
203  $indexerTitle = 'indexer_title';
204  $modesConfig = [
205  'store' => 'dimension1',
206  'website' => 'dimension2',
207  ];
208  $this->configureAdminArea();
209  $commandTester = new CommandTester($this->command);
210  $this->indexerMock->method('getTitle')->willReturn($indexerTitle);
211  $this->dimensionModes->method('getDimensions')->willReturn($modesConfig);
212  $this->dimensionModeSwitcherMock->method('getDimensionModes')->willReturn($this->dimensionModes);
213  $commandTester->execute([]);
214  $actualValue = $commandTester->getDisplay();
215  $consoleOutput = sprintf('%-50s', 'Indexer') . 'Available modes' . PHP_EOL
216  . sprintf('%-50s', $indexerTitle) . 'store,website' . PHP_EOL;
217  $this->assertEquals(
218  $consoleOutput,
219  $actualValue
220  );
221  }
222 }