UninstallLanguageCommandTest.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Translation\Test\Unit\Console\Command;
  7. use Magento\Framework\Composer\DependencyChecker;
  8. use Magento\Framework\Composer\Remove;
  9. use Magento\Framework\Composer\ComposerInformation;
  10. use Magento\Framework\App\Cache;
  11. use Symfony\Component\Console\Tester\CommandTester;
  12. use Magento\Translation\Console\Command\UninstallLanguageCommand;
  13. use Magento\Framework\Setup\BackupRollbackFactory;
  14. class UninstallLanguageCommandTest extends \PHPUnit\Framework\TestCase
  15. {
  16. /**
  17. * @var DependencyChecker|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. private $dependencyChecker;
  20. /**
  21. * @var Remove|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $remove;
  24. /**
  25. * @var ComposerInformation|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $composerInfo;
  28. /**
  29. * @var Cache|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. private $cache;
  32. /**
  33. * @var BackupRollbackFactory|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $backupRollbackFactory;
  36. /**
  37. * @var UninstallLanguageCommand
  38. */
  39. private $command;
  40. /**
  41. * @var CommandTester
  42. */
  43. private $tester;
  44. protected function setUp()
  45. {
  46. $this->dependencyChecker = $this->createMock(\Magento\Framework\Composer\DependencyChecker::class);
  47. $this->remove = $this->createMock(\Magento\Framework\Composer\Remove::class);
  48. $this->composerInfo = $this->createMock(\Magento\Framework\Composer\ComposerInformation::class);
  49. $this->cache = $this->createMock(\Magento\Framework\App\Cache::class);
  50. $this->backupRollbackFactory = $this->createMock(\Magento\Framework\Setup\BackupRollbackFactory::class);
  51. $this->command = new UninstallLanguageCommand(
  52. $this->dependencyChecker,
  53. $this->remove,
  54. $this->composerInfo,
  55. $this->cache,
  56. $this->backupRollbackFactory
  57. );
  58. $this->tester = new CommandTester($this->command);
  59. }
  60. public function testExecute()
  61. {
  62. $dependencies['vendor/language-ua_ua'] = [];
  63. $this->dependencyChecker->expects($this->once())
  64. ->method('checkDependencies')
  65. ->with(['vendor/language-ua_ua'])
  66. ->willReturn($dependencies);
  67. $this->composerInfo->expects($this->once())
  68. ->method('getRootRequiredPackageTypesByName')
  69. ->willReturn(
  70. [
  71. 'vendor/language-ua_ua' => 'magento2-language'
  72. ]
  73. );
  74. $backupRollback = $this->createMock(\Magento\Framework\Setup\BackupRollback::class);
  75. $backupRollback->expects($this->once())->method('codeBackup');
  76. $this->backupRollbackFactory->expects($this->once())
  77. ->method('create')
  78. ->willReturn($backupRollback);
  79. $this->remove->expects($this->once())->method('remove');
  80. $this->cache->expects($this->once())->method('clean');
  81. $this->tester->execute(['package' => ['vendor/language-ua_ua'], '--backup-code' => true]);
  82. }
  83. public function testExecuteNoBackupOption()
  84. {
  85. $dependencies['vendor/language-ua_ua'] = [];
  86. $this->dependencyChecker->expects($this->once())
  87. ->method('checkDependencies')
  88. ->with(['vendor/language-ua_ua'])
  89. ->willReturn($dependencies);
  90. $this->composerInfo->expects($this->once())
  91. ->method('getRootRequiredPackageTypesByName')
  92. ->willReturn(
  93. [
  94. 'vendor/language-ua_ua' => 'magento2-language'
  95. ]
  96. );
  97. $this->backupRollbackFactory->expects($this->never())->method('create');
  98. $this->remove->expects($this->once())->method('remove');
  99. $this->cache->expects($this->once())->method('clean');
  100. $this->tester->execute(['package' => ['vendor/language-ua_ua']]);
  101. $this->assertContains('You are removing language package without a code backup.', $this->tester->getDisplay());
  102. }
  103. public function testExecutePackageHasDependency()
  104. {
  105. $dependencies['vendor/language-ua_ua'] = ['some/dependency'];
  106. $this->dependencyChecker->expects($this->once())
  107. ->method('checkDependencies')
  108. ->with(['vendor/language-ua_ua'])
  109. ->willReturn($dependencies);
  110. $this->composerInfo->expects($this->once())
  111. ->method('getRootRequiredPackageTypesByName')
  112. ->willReturn(
  113. [
  114. 'vendor/language-ua_ua' => 'magento2-language'
  115. ]
  116. );
  117. $this->remove->expects($this->never())->method('remove');
  118. $this->cache->expects($this->never())->method('clean');
  119. $this->tester->execute(['package' => ['vendor/language-ua_ua']]);
  120. $this->assertContains(
  121. 'Package vendor/language-ua_ua has dependencies and will be skipped',
  122. $this->tester->getDisplay()
  123. );
  124. $this->assertContains('Nothing is removed.', $this->tester->getDisplay());
  125. }
  126. public function testExecutePackageNoLanguage()
  127. {
  128. $dependencies['vendor/language-ua_ua'] = [];
  129. $this->dependencyChecker->expects($this->once())
  130. ->method('checkDependencies')
  131. ->with(['vendor/language-ua_ua'])
  132. ->willReturn($dependencies);
  133. $this->composerInfo->expects($this->once())
  134. ->method('getRootRequiredPackageTypesByName')
  135. ->willReturn(
  136. [
  137. 'vendor/language-ua_ua' => 'library'
  138. ]
  139. );
  140. $this->remove->expects($this->never())->method('remove');
  141. $this->cache->expects($this->never())->method('clean');
  142. $this->tester->execute(['package' => ['vendor/language-ua_ua']]);
  143. $this->assertContains(
  144. 'Package vendor/language-ua_ua is not a Magento language and will be skipped',
  145. $this->tester->getDisplay()
  146. );
  147. $this->assertContains('Nothing is removed.', $this->tester->getDisplay());
  148. }
  149. }