Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
UninstallLanguageCommandTest.php
Go to the documentation of this file.
1 <?php
8 
13 use Symfony\Component\Console\Tester\CommandTester;
16 
17 class UninstallLanguageCommandTest extends \PHPUnit\Framework\TestCase
18 {
22  private $dependencyChecker;
23 
27  private $remove;
28 
32  private $composerInfo;
33 
37  private $cache;
38 
42  private $backupRollbackFactory;
43 
47  private $command;
48 
52  private $tester;
53 
54  protected function setUp()
55  {
56  $this->dependencyChecker = $this->createMock(\Magento\Framework\Composer\DependencyChecker::class);
57  $this->remove = $this->createMock(\Magento\Framework\Composer\Remove::class);
58  $this->composerInfo = $this->createMock(\Magento\Framework\Composer\ComposerInformation::class);
59  $this->cache = $this->createMock(\Magento\Framework\App\Cache::class);
60  $this->backupRollbackFactory = $this->createMock(\Magento\Framework\Setup\BackupRollbackFactory::class);
61 
62  $this->command = new UninstallLanguageCommand(
63  $this->dependencyChecker,
64  $this->remove,
65  $this->composerInfo,
66  $this->cache,
67  $this->backupRollbackFactory
68  );
69 
70  $this->tester = new CommandTester($this->command);
71  }
72 
73  public function testExecute()
74  {
75  $dependencies['vendor/language-ua_ua'] = [];
76 
77  $this->dependencyChecker->expects($this->once())
78  ->method('checkDependencies')
79  ->with(['vendor/language-ua_ua'])
80  ->willReturn($dependencies);
81 
82  $this->composerInfo->expects($this->once())
83  ->method('getRootRequiredPackageTypesByName')
84  ->willReturn(
85  [
86  'vendor/language-ua_ua' => 'magento2-language'
87  ]
88  );
89 
90  $backupRollback = $this->createMock(\Magento\Framework\Setup\BackupRollback::class);
91  $backupRollback->expects($this->once())->method('codeBackup');
92 
93  $this->backupRollbackFactory->expects($this->once())
94  ->method('create')
95  ->willReturn($backupRollback);
96 
97  $this->remove->expects($this->once())->method('remove');
98  $this->cache->expects($this->once())->method('clean');
99 
100  $this->tester->execute(['package' => ['vendor/language-ua_ua'], '--backup-code' => true]);
101  }
102 
103  public function testExecuteNoBackupOption()
104  {
105  $dependencies['vendor/language-ua_ua'] = [];
106 
107  $this->dependencyChecker->expects($this->once())
108  ->method('checkDependencies')
109  ->with(['vendor/language-ua_ua'])
110  ->willReturn($dependencies);
111 
112  $this->composerInfo->expects($this->once())
113  ->method('getRootRequiredPackageTypesByName')
114  ->willReturn(
115  [
116  'vendor/language-ua_ua' => 'magento2-language'
117  ]
118  );
119 
120  $this->backupRollbackFactory->expects($this->never())->method('create');
121  $this->remove->expects($this->once())->method('remove');
122  $this->cache->expects($this->once())->method('clean');
123 
124  $this->tester->execute(['package' => ['vendor/language-ua_ua']]);
125  $this->assertContains('You are removing language package without a code backup.', $this->tester->getDisplay());
126  }
127 
129  {
130  $dependencies['vendor/language-ua_ua'] = ['some/dependency'];
131 
132  $this->dependencyChecker->expects($this->once())
133  ->method('checkDependencies')
134  ->with(['vendor/language-ua_ua'])
135  ->willReturn($dependencies);
136 
137  $this->composerInfo->expects($this->once())
138  ->method('getRootRequiredPackageTypesByName')
139  ->willReturn(
140  [
141  'vendor/language-ua_ua' => 'magento2-language'
142  ]
143  );
144 
145  $this->remove->expects($this->never())->method('remove');
146  $this->cache->expects($this->never())->method('clean');
147 
148  $this->tester->execute(['package' => ['vendor/language-ua_ua']]);
149  $this->assertContains(
150  'Package vendor/language-ua_ua has dependencies and will be skipped',
151  $this->tester->getDisplay()
152  );
153  $this->assertContains('Nothing is removed.', $this->tester->getDisplay());
154  }
155 
157  {
158  $dependencies['vendor/language-ua_ua'] = [];
159 
160  $this->dependencyChecker->expects($this->once())
161  ->method('checkDependencies')
162  ->with(['vendor/language-ua_ua'])
163  ->willReturn($dependencies);
164 
165  $this->composerInfo->expects($this->once())
166  ->method('getRootRequiredPackageTypesByName')
167  ->willReturn(
168  [
169  'vendor/language-ua_ua' => 'library'
170  ]
171  );
172 
173  $this->remove->expects($this->never())->method('remove');
174  $this->cache->expects($this->never())->method('clean');
175 
176  $this->tester->execute(['package' => ['vendor/language-ua_ua']]);
177  $this->assertContains(
178  'Package vendor/language-ua_ua is not a Magento language and will be skipped',
179  $this->tester->getDisplay()
180  );
181  $this->assertContains('Nothing is removed.', $this->tester->getDisplay());
182  }
183 }