dependencyChecker = $this->createMock(\Magento\Framework\Composer\DependencyChecker::class); $this->remove = $this->createMock(\Magento\Framework\Composer\Remove::class); $this->composerInfo = $this->createMock(\Magento\Framework\Composer\ComposerInformation::class); $this->cache = $this->createMock(\Magento\Framework\App\Cache::class); $this->backupRollbackFactory = $this->createMock(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->command = new UninstallLanguageCommand( $this->dependencyChecker, $this->remove, $this->composerInfo, $this->cache, $this->backupRollbackFactory ); $this->tester = new CommandTester($this->command); } public function testExecute() { $dependencies['vendor/language-ua_ua'] = []; $this->dependencyChecker->expects($this->once()) ->method('checkDependencies') ->with(['vendor/language-ua_ua']) ->willReturn($dependencies); $this->composerInfo->expects($this->once()) ->method('getRootRequiredPackageTypesByName') ->willReturn( [ 'vendor/language-ua_ua' => 'magento2-language' ] ); $backupRollback = $this->createMock(\Magento\Framework\Setup\BackupRollback::class); $backupRollback->expects($this->once())->method('codeBackup'); $this->backupRollbackFactory->expects($this->once()) ->method('create') ->willReturn($backupRollback); $this->remove->expects($this->once())->method('remove'); $this->cache->expects($this->once())->method('clean'); $this->tester->execute(['package' => ['vendor/language-ua_ua'], '--backup-code' => true]); } public function testExecuteNoBackupOption() { $dependencies['vendor/language-ua_ua'] = []; $this->dependencyChecker->expects($this->once()) ->method('checkDependencies') ->with(['vendor/language-ua_ua']) ->willReturn($dependencies); $this->composerInfo->expects($this->once()) ->method('getRootRequiredPackageTypesByName') ->willReturn( [ 'vendor/language-ua_ua' => 'magento2-language' ] ); $this->backupRollbackFactory->expects($this->never())->method('create'); $this->remove->expects($this->once())->method('remove'); $this->cache->expects($this->once())->method('clean'); $this->tester->execute(['package' => ['vendor/language-ua_ua']]); $this->assertContains('You are removing language package without a code backup.', $this->tester->getDisplay()); } public function testExecutePackageHasDependency() { $dependencies['vendor/language-ua_ua'] = ['some/dependency']; $this->dependencyChecker->expects($this->once()) ->method('checkDependencies') ->with(['vendor/language-ua_ua']) ->willReturn($dependencies); $this->composerInfo->expects($this->once()) ->method('getRootRequiredPackageTypesByName') ->willReturn( [ 'vendor/language-ua_ua' => 'magento2-language' ] ); $this->remove->expects($this->never())->method('remove'); $this->cache->expects($this->never())->method('clean'); $this->tester->execute(['package' => ['vendor/language-ua_ua']]); $this->assertContains( 'Package vendor/language-ua_ua has dependencies and will be skipped', $this->tester->getDisplay() ); $this->assertContains('Nothing is removed.', $this->tester->getDisplay()); } public function testExecutePackageNoLanguage() { $dependencies['vendor/language-ua_ua'] = []; $this->dependencyChecker->expects($this->once()) ->method('checkDependencies') ->with(['vendor/language-ua_ua']) ->willReturn($dependencies); $this->composerInfo->expects($this->once()) ->method('getRootRequiredPackageTypesByName') ->willReturn( [ 'vendor/language-ua_ua' => 'library' ] ); $this->remove->expects($this->never())->method('remove'); $this->cache->expects($this->never())->method('clean'); $this->tester->execute(['package' => ['vendor/language-ua_ua']]); $this->assertContains( 'Package vendor/language-ua_ua is not a Magento language and will be skipped', $this->tester->getDisplay() ); $this->assertContains('Nothing is removed.', $this->tester->getDisplay()); } }