Skip to content
Snippets Groups Projects
Unverified Commit c371e81a authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3477329 by phenaproxima, thejimbirch, b_sharpe: Recipe validation...

Issue #3477329 by phenaproxima, thejimbirch, b_sharpe: Recipe validation should always treat required modules as installed

(cherry picked from commit 81f055eb)
parent 5670bba3
No related branches found
No related tags found
8 merge requests!10602Issue #3438769 by vinmayiswamy, antonnavi, michelle, amateescu: Sub workspace does not clear,!10301Issue #3469309 by mstrelan, smustgrave, moshe weitzman: Use one-time login...,!10187Issue #3487488 by dakwamine: ExtensionMimeTypeGuesser::guessMimeType must support file names with "0" (zero) like foo.0.zip,!9929Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9787Resolve issue 3479427 - bootstrap barrio issue under Windows,!6502Draft: Resolve #2938524 "Plach testing issue",!38582585169-10.1.x,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key
Pipeline #304127 passed with warnings
+1
......@@ -268,14 +268,23 @@ private static function validateConfigActions(mixed $value, ExecutionContextInte
$configurator = new RecipeConfigurator($recipe_being_validated['recipes'] ?? [], $include_path);
/** @var \Drupal\Core\Extension\ModuleExtensionList $module_list */
$module_list = \Drupal::service('extension.list.module');
// The config provider must either be an already-installed module or theme,
// or an extension being installed by this recipe or a recipe it depends on.
$all_extensions = [
...array_keys(\Drupal::service('extension.list.module')->getAllInstalledInfo()),
...array_keys($module_list->getAllInstalledInfo()),
...array_keys(\Drupal::service('extension.list.theme')->getAllInstalledInfo()),
...$recipe_being_validated['install'] ?? [],
...$configurator->listAllExtensions(),
];
// Explicitly treat required modules as installed, even if Drupal isn't
// installed yet, because we know they WILL be installed.
foreach ($module_list->getAllAvailableInfo() as $name => $info) {
if (!empty($info['required'])) {
$all_extensions[] = $name;
}
}
if (!in_array($config_provider, $all_extensions, TRUE)) {
$context->addViolation('Config actions cannot be applied to %config_name because the %config_provider extension is not installed, and is not installed by this recipe or any of the recipes it depends on.', [
......
......@@ -8,6 +8,7 @@
use Drupal\Core\Recipe\RecipeFileException;
use Drupal\Core\Recipe\RecipePreExistingConfigException;
use Drupal\Core\Recipe\RecipeRunner;
use Drupal\FunctionalTests\Core\Recipe\RecipeTestTrait;
use Drupal\KernelTests\KernelTestBase;
/**
......@@ -16,6 +17,8 @@
*/
class RecipeTest extends KernelTestBase {
use RecipeTestTrait;
/**
* {@inheritdoc}
*/
......@@ -80,4 +83,19 @@ public function testExampleRecipe(): void {
$this->assertSame($this->config('text.settings')->get('default_summary_length'), 700);
}
public function testImplicitlyRequiredModule(): void {
$this->disableModules(['user']);
$recipe = $this->createRecipe([
'name' => 'Actions on config from required module',
'config' => [
'actions' => [
'user.role.authenticated' => [
'grantPermission' => 'access administration pages',
],
],
],
]);
$this->assertIsObject($recipe);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment