/** * Run Composer dependency check for uninstall * * @param array $packages * @return array * @throws \RuntimeException */ public function runUninstallReadinessCheck(array $packages) { try { $packagesAndTypes = $this->composerInfo->getRootRequiredPackageTypesByName(); $dependencies = $this->packageDependencyChecker->checkDependencies($packages, true); $messages = []; $themes = []; foreach ($packages as $package) { if (!isset($packagesAndTypes[$package])) { throw new \RuntimeException('Package ' . $package . ' not found in the system.'); } switch ($packagesAndTypes[$package]) { case ComposerInformation::METAPACKAGE_PACKAGE_TYPE: unset($dependencies[$package]); break; case ComposerInformation::THEME_PACKAGE_TYPE: $themes[] = $package; break; } if (!empty($dependencies[$package])) { $messages[] = $package . " has the following dependent package(s): " . implode(', ', $dependencies[$package]); } } if (!empty($themes)) { $messages = array_merge($messages, $this->themeDependencyChecker->checkChildThemeByPackagesName($themes)); } if (!empty($messages)) { throw new \RuntimeException(implode(PHP_EOL, $messages)); } return ['success' => true]; } catch (\RuntimeException $e) { $message = str_replace(PHP_EOL, '<br/>', htmlspecialchars($e->getMessage())); return ['success' => false, 'error' => $message]; } }
public function testCheckChildThemeByPackagesName() { $packages = ['vendor/package1', 'vendor/package2']; $this->themePackageInfo->expects($this->exactly(2))->method('getFullThemePath')->willReturn(null); $this->themeDependencyChecker->checkChildThemeByPackagesName($packages); }