diff --git a/composer/Template/LegacyProject/composer.json b/composer/Template/LegacyProject/composer.json index 51aced4574..eda6305dd6 100644 --- a/composer/Template/LegacyProject/composer.json +++ b/composer/Template/LegacyProject/composer.json @@ -11,12 +11,12 @@ ], "require": { "composer/installers": "^1.2", - "drupal/core-recommended": "^8.8", - "drupal/core-composer-scaffold": "^8.8", - "drupal/core-vendor-hardening": "^8.8" + "drupal/core-recommended": "^8.9", + "drupal/core-composer-scaffold": "^8.9", + "drupal/core-vendor-hardening": "^8.9" }, "require-dev": { - "drupal/dev-dependencies": "^8.8" + "drupal/dev-dependencies": "^8.9" }, "conflict": { "drupal/drupal": "*" diff --git a/composer/Template/RecommendedProject/composer.json b/composer/Template/RecommendedProject/composer.json index 98189b3105..6c07403b20 100644 --- a/composer/Template/RecommendedProject/composer.json +++ b/composer/Template/RecommendedProject/composer.json @@ -11,11 +11,11 @@ ], "require": { "composer/installers": "^1.2", - "drupal/core-recommended": "^8.8", - "drupal/core-composer-scaffold": "^8.8" + "drupal/core-recommended": "^8.9", + "drupal/core-composer-scaffold": "^8.9" }, "require-dev": { - "drupal/dev-dependencies": "^8.8" + "drupal/dev-dependencies": "^8.9" }, "conflict": { "drupal/drupal": "*" diff --git a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php index f253b5dd9b..9739a3d855 100644 --- a/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php +++ b/core/tests/Drupal/BuildTests/Composer/Template/ComposerProjectTemplatesTest.php @@ -18,20 +18,28 @@ * project template and not any other dependencies. * * @group #slow - * @group Scaffold - * @group Build + * @group Template * * @requires externalCommand composer */ class ComposerProjectTemplatesTest extends BuildTestBase { - public function getPathRepos() { + /** + * Get all the path repos we need to add to the project template. + * + * @param type $workspace_directory + * The full path to the workspace directory. + * + * @return string[] + * Array of path repo information, indexed by package name. + */ + public function getPathRepos($workspace_directory) { return [ - 'drupal/core-recommended' => '../../Metapackage/CoreRecommended', - 'drupal/dev-dependencies' => '../../Metapackage/DevDependencies', - 'drupal/pinned-dev-dependencies' => '../../Metapackage/PinnedDevDependencies', - 'drupal/core-vendor-hardening' => '../../Plugin/VendorHardening', - 'drupal/core-composer-scaffold' => '../../Plugin/Scaffold', + 'drupal/core-recommended' => $workspace_directory . '/composer/Metapackage/CoreRecommended', + 'drupal/dev-dependencies' => $workspace_directory . '/composer/Metapackage/DevDependencies', + 'drupal/pinned-dev-dependencies' => $workspace_directory . '/composer/Metapackage/PinnedDevDependencies', + 'drupal/core-vendor-hardening' => $workspace_directory . '/composer/Plugin/VendorHardening', + 'drupal/core-composer-scaffold' => $workspace_directory . '/composer/Plugin/Scaffold', ]; } @@ -56,9 +64,10 @@ public function provideTemplateCreateProject() { public function testTemplateCreateProject($project, $package_dir, $docroot_dir) { $this->copyCodebase(); + $core_version = '8.9.x-dev'; + // Set up the template to use our path repos. - foreach ($this->getPathRepos() as $name => $path) { - // composer config repositories.asdf path a/path + foreach ($this->getPathRepos($this->getWorkspaceDirectory()) as $name => $path) { $this->executeCommand('composer config repositories.' . $name . ' path ' . $path, $package_dir . '/'); $this->assertCommandSuccessful(); } @@ -68,13 +77,35 @@ public function testTemplateCreateProject($project, $package_dir, $docroot_dir) $autoloader = $this->getWorkspaceDirectory() . '/testproject' . $docroot_dir . '/autoload.php'; $this->assertFileNotExists($autoloader); - $process = $this->executeCommand('composer create-project ' . $project . ' testproject -s dev -v --repository ' . $repository_path); + $this->executeCommand("COMPOSER_CORE_VERSION=$core_version composer create-project $project testproject $core_version -s dev -vv --repository $repository_path"); $this->assertCommandSuccessful(); // Ensure we used the project from our codebase. - $this->assertErrorOutputContains('Installing ' . $project . ' (dev-master): Symlinking from ' . $package_dir); + $this->assertErrorOutputContains("Installing $project ($core_version): Symlinking from $package_dir"); // Verify that there is an autoloader. $this->assertFileExists($autoloader); + + // Get the composer.json data. + $package_json = $this->getWorkspaceDirectory() . '/' . $package_dir . '/composer.json'; + $this->assertFileExists($package_json); + $template_json = json_decode(file_get_contents($package_json), TRUE); + // Get the require and require-dev information. + $require = array_merge( + $template_json['require'] ?? [], + $template_json['require-dev'] ?? [] + ); + // Verify that path repo packages were installed as symlinks. Composer does + // not announce that we're using a symlink for the metapackages, so we can + // only check the packages. + $path_repos = [ + 'drupal/core-vendor-hardening', + 'drupal/core-composer-scaffold', + ]; + foreach (array_keys($require) as $package_name) { + if (in_array($package_name, $path_repos)) { + $this->assertErrorOutputContains("Installing $package_name ($core_version): Symlinking from"); + } + } } } diff --git a/core/tests/Drupal/BuildTests/Composer/fixtures/packages.json b/core/tests/Drupal/BuildTests/Composer/fixtures/packages.json index 733163f980..86c4d95d4e 100644 --- a/core/tests/Drupal/BuildTests/Composer/fixtures/packages.json +++ b/core/tests/Drupal/BuildTests/Composer/fixtures/packages.json @@ -1,25 +1,25 @@ { "packages": { "drupal/recommended-project": { - "dev-master": { + "8.9.x-dev": { "name": "drupal/recommended-project", "dist": { "type": "path", "url": "composer/Template/RecommendedProject" }, "type": "project", - "version": "dev-master" + "version": "8.9.x-dev" } }, "drupal/legacy-project": { - "dev-master": { + "8.9.x-dev": { "name": "drupal/legacy-project", "dist": { "type": "path", "url": "composer/Template/LegacyProject" }, "type": "project", - "version": "dev-master" + "version": "8.9.x-dev" } } }