class EnabledExtensionsValidatorTest
@covers \Drupal\package_manager\Validator\EnabledExtensionsValidator @group package_manager @internal
Hierarchy
- class \Drupal\KernelTests\KernelTestBase extends \PHPUnit\Framework\TestCase implements \Drupal\Core\DependencyInjection\ServiceProviderInterface uses \Drupal\KernelTests\AssertContentTrait, \Drupal\Tests\RandomGeneratorTrait, \Drupal\Tests\ConfigTestTrait, \Drupal\Tests\ExtensionListTestTrait, \Drupal\Tests\TestRequirementsTrait, \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait
- class \Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase extends \Drupal\KernelTests\KernelTestBase uses \Drupal\Tests\package_manager\Traits\AssertPreconditionsTrait, \Drupal\Tests\package_manager\Traits\ComposerStagerTestTrait, \Drupal\Tests\package_manager\Traits\FixtureManipulatorTrait, \Drupal\Tests\package_manager\Traits\FixtureUtilityTrait, \Drupal\package_manager\StatusCheckTrait, \Drupal\Tests\package_manager\Traits\ValidationTestTrait
- class \Drupal\Tests\package_manager\Kernel\EnabledExtensionsValidatorTest extends \Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase uses \Drupal\Tests\package_manager\Traits\ComposerInstallersTrait
- class \Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase extends \Drupal\KernelTests\KernelTestBase uses \Drupal\Tests\package_manager\Traits\AssertPreconditionsTrait, \Drupal\Tests\package_manager\Traits\ComposerStagerTestTrait, \Drupal\Tests\package_manager\Traits\FixtureManipulatorTrait, \Drupal\Tests\package_manager\Traits\FixtureUtilityTrait, \Drupal\package_manager\StatusCheckTrait, \Drupal\Tests\package_manager\Traits\ValidationTestTrait
Expanded class hierarchy of EnabledExtensionsValidatorTest
File
-
core/
modules/ package_manager/ tests/ src/ Kernel/ EnabledExtensionsValidatorTest.php, line 19
Namespace
Drupal\Tests\package_manager\KernelView source
class EnabledExtensionsValidatorTest extends PackageManagerKernelTestBase {
use ComposerInstallersTrait;
/**
* Data provider for testExtensionRemoved().
*
* @return mixed[][]
* The test cases.
*/
public static function providerExtensionRemoved() : array {
$summary = t('The update cannot proceed because the following enabled Drupal extension was removed during the update.');
return [
'module' => [
[
[
'name' => 'drupal/test_module2',
'version' => '1.3.1',
'type' => 'drupal-module',
],
],
[
ValidationResult::createError([
t("'test_module2' module (provided by <code>drupal/test_module2</code>)"),
], $summary),
],
],
'module and theme' => [
[
[
'name' => 'drupal/test_module1',
'version' => '1.3.1',
'type' => 'drupal-module',
],
[
'name' => 'drupal/test_theme',
'version' => '1.3.1',
'type' => 'drupal-theme',
],
],
[
ValidationResult::createError([
t("'test_module1' module (provided by <code>drupal/test_module1</code>)"),
t("'test_theme' theme (provided by <code>drupal/test_theme</code>)"),
], t('The update cannot proceed because the following enabled Drupal extensions were removed during the update.')),
],
],
'profile' => [
[
[
'name' => 'drupal/test_profile',
'version' => '1.3.1',
'type' => 'drupal-profile',
],
],
[
ValidationResult::createError([
t("'test_profile' profile (provided by <code>drupal/test_profile</code>)"),
], $summary),
],
],
'theme' => [
[
[
'name' => 'drupal/test_theme',
'version' => '1.3.1',
'type' => 'drupal-theme',
],
],
[
ValidationResult::createError([
t("'test_theme' theme (provided by <code>drupal/test_theme</code>)"),
], $summary),
],
],
];
}
/**
* Tests that error is raised if Drupal modules, profiles or themes are removed.
*
* @param array $packages
* Packages that will be added to the active directory, and removed from the
* stage directory.
* @param \Drupal\package_manager\ValidationResult[] $expected_results
* The expected validation results.
*
* @dataProvider providerExtensionRemoved
*/
public function testExtensionRemoved(array $packages, array $expected_results) : void {
$project_root = $this->container
->get(PathLocator::class)
->getProjectRoot();
$this->installComposerInstallers($project_root);
$active_manipulator = new ActiveFixtureManipulator();
$stage_manipulator = $this->getStageFixtureManipulator();
foreach ($packages as $package) {
$active_manipulator->addPackage($package, FALSE, TRUE);
$stage_manipulator->removePackage($package['name']);
}
$active_manipulator->commitChanges();
foreach ($packages as $package) {
$extension_name = str_replace('drupal/', '', $package['name']);
$extension = self::createExtension($project_root, $package['type'], $extension_name);
if ($extension->getType() === 'theme') {
/** @var \Drupal\Core\Extension\ThemeHandlerInterface $theme_handler */
$theme_handler = $this->container
->get('theme_handler');
$theme_handler->addTheme($extension);
$this->assertArrayHasKey($extension_name, $theme_handler->listInfo());
}
else {
/** @var \Drupal\Core\Extension\ModuleHandlerInterface $module_handler */
$module_handler = $this->container
->get('module_handler');
$module_list = $module_handler->getModuleList();
$module_list[$extension_name] = $extension;
$module_handler->setModuleList($module_list);
$this->assertArrayHasKey($extension_name, $module_handler->getModuleList());
}
}
$this->assertResults($expected_results, PreApplyEvent::class);
}
/**
* Returns a mocked extension object for a package.
*
* @param string $project_root
* The project root directory.
* @param string $package_type
* The package type (e.g., `drupal-module` or `drupal-theme`).
* @param string $extension_name
* The name of the extension.
*
* @return \Drupal\Core\Extension\Extension
* An extension object.
*/
private static function createExtension(string $project_root, string $package_type, string $extension_name) : Extension {
$type = match ($package_type) { 'drupal-theme' => 'theme',
'drupal-profile' => 'profile',
default => 'module',
};
$subdirectory = match ($type) { 'theme' => 'themes',
'profile' => 'profiles',
'module' => 'modules',
};
return new Extension($project_root, $type, "{$subdirectory}/contrib/{$extension_name}/{$extension_name}.info.yml");
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.