diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ComposerHookTest.php b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ComposerHookTest.php index 9c755941da..49f2639c32 100644 --- a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ComposerHookTest.php +++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/Functional/ComposerHookTest.php @@ -115,6 +115,15 @@ public function testComposerHooks() { $this->assertDirectoryExists($sut); $this->assertStringContainsString('Scaffolding files for fixtures/drupal-drupal', $stdout); $this->assertScaffoldedFile($sut . '/index.php', FALSE, 'Test version of index.php from drupal/core'); + $topLevelProjectDir = 'composer-hooks-nothing-allowed-fixture'; + $sut = $this->fixturesDir . '/' . $topLevelProjectDir; + // Run composer install on an empty project. + $this->mustExec("composer install --no-ansi", $sut); + // Require a project that is not allowed to scaffold and confirm that we + // get a warning, and it does not scaffold. + $this->executeCommand("composer require --no-ansi --no-interaction fixtures/drupal-assets-fixture:dev-main fixtures/scaffold-override-fixture:dev-main", $sut); + $this->assertCommandSuccessful(); + $this->assertFileDoesNotExist($sut . '/sites/default/default.settings.php'); } /** diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/fixtures/composer-hooks-nothing-allowed-fixture/assets/robots-default.txt b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/fixtures/composer-hooks-nothing-allowed-fixture/assets/robots-default.txt new file mode 100644 index 0000000000..a26bf8912f --- /dev/null +++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/fixtures/composer-hooks-nothing-allowed-fixture/assets/robots-default.txt @@ -0,0 +1 @@ +# robots.txt fixture scaffolded from "file-mappings" in composer-hooks-fixture composer.json fixture. diff --git a/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/fixtures/composer-hooks-nothing-allowed-fixture/composer.json.tmpl b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/fixtures/composer-hooks-nothing-allowed-fixture/composer.json.tmpl new file mode 100644 index 0000000000..b90299e625 --- /dev/null +++ b/core/tests/Drupal/Tests/Composer/Plugin/Scaffold/fixtures/composer-hooks-nothing-allowed-fixture/composer.json.tmpl @@ -0,0 +1,69 @@ +{ + "name": "fixtures/drupal-drupal", + "type": "project", + "minimum-stability": "dev", + "prefer-stable": true, + "repositories": { + "packagist.org": false, + "composer-scaffold": { + "type": "path", + "url": "__PROJECT_ROOT__", + "options": { + "symlink": true + } + }, + "drupal-core-fixture": { + "type": "path", + "url": "../drupal-core-fixture", + "options": { + "symlink": true + } + }, + "drupal-assets-fixture": { + "type": "path", + "url": "../drupal-assets-fixture", + "options": { + "symlink": true + } + }, + "scaffold-override-fixture": { + "type": "path", + "url": "../scaffold-override-fixture", + "options": { + "symlink": true + } + } + }, + "require": { + "drupal/core-composer-scaffold": "*", + "fixtures/drupal-core-fixture": "*" + }, + "extra": { + "drupal-scaffold": { + "locations": { + "web-root": "./" + }, + "symlink": __SYMLINK__, + "file-mapping": { + "[web-root]/.htaccess": false, + "[web-root]/robots.txt": "assets/robots-default.txt" + } + }, + "installer-paths": { + "core": ["type:drupal-core"], + "modules/contrib/{$name}": ["type:drupal-module"], + "modules/custom/{$name}": ["type:drupal-custom-module"], + "profiles/contrib/{$name}": ["type:drupal-profile"], + "profiles/custom/{$name}": ["type:drupal-custom-profile"], + "themes/contrib/{$name}": ["type:drupal-theme"], + "themes/custom/{$name}": ["type:drupal-custom-theme"], + "libraries/{$name}": ["type:drupal-library"], + "drush/Commands/contrib/{$name}": ["type:drupal-drush"] + } + }, + "config": { + "allow-plugins": { + "drupal/core-composer-scaffold": false + } + } +}