From 991088ee6c55447ec1f27515325b9e87979ef1ef Mon Sep 17 00:00:00 2001 From: tedbow <tedbow@240860.no-reply.drupal.org> Date: Thu, 1 Sep 2022 16:14:03 +0000 Subject: [PATCH] Issue #3303902 by tedbow, phenaproxima, dww, TravisCarden: Move ProjectInfo class into package_manager --- .../src/ExtensionUpdater.php | 2 +- .../src/Form/UpdateReady.php | 2 +- .../src/Validator/UpdateReleaseValidator.php | 4 +- .../Validator/UpdateReleaseValidatorTest.php | 4 +- package_manager/package_manager.info.yml | 2 + .../src}/LegacyVersionUtility.php | 2 +- {src => package_manager/src}/ProjectInfo.php | 2 +- .../aaa_automatic_updates_test.9.8.2.xml | 0 .../release-history/drupal.9.8.1-security.xml | 65 ++++++++ .../drupal.9.8.2-older-sec-release.xml | 127 +++++++++++++++ .../drupal.9.8.2-unsupported_unpublished.xml | 147 ++++++++++++++++++ .../fixtures/release-history/drupal.9.8.2.xml | 146 +++++++++++++++++ .../drupal.9.8.2_unknown_status.xml | 0 .../Kernel/PackageManagerKernelTestBase.php | 76 +++++++++ .../Kernel/PendingUpdatesValidatorTest.php | 6 +- .../tests}/src/Kernel/ProjectInfoTest.php | 9 +- .../tests/src/Kernel/StageOwnershipTest.php | 3 +- src/CronUpdater.php | 1 + src/Form/UpdaterForm.php | 2 +- src/ReleaseChooser.php | 3 +- src/Validator/VersionPolicyValidator.php | 4 +- .../automatic_updates_test_cron.module | 2 +- .../Kernel/AutomaticUpdatesKernelTestBase.php | 75 --------- tests/src/Unit/LegacyVersionUtilityTest.php | 4 +- 24 files changed, 587 insertions(+), 101 deletions(-) rename {src => package_manager/src}/LegacyVersionUtility.php (98%) rename {src => package_manager/src}/ProjectInfo.php (99%) rename {tests => package_manager/tests}/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml (100%) create mode 100644 package_manager/tests/fixtures/release-history/drupal.9.8.1-security.xml create mode 100644 package_manager/tests/fixtures/release-history/drupal.9.8.2-older-sec-release.xml create mode 100644 package_manager/tests/fixtures/release-history/drupal.9.8.2-unsupported_unpublished.xml create mode 100644 package_manager/tests/fixtures/release-history/drupal.9.8.2.xml rename {tests => package_manager/tests}/fixtures/release-history/drupal.9.8.2_unknown_status.xml (100%) rename {tests => package_manager/tests}/src/Kernel/ProjectInfoTest.php (94%) diff --git a/automatic_updates_extensions/src/ExtensionUpdater.php b/automatic_updates_extensions/src/ExtensionUpdater.php index 4948ff6133..6314ea7d00 100644 --- a/automatic_updates_extensions/src/ExtensionUpdater.php +++ b/automatic_updates_extensions/src/ExtensionUpdater.php @@ -3,7 +3,7 @@ namespace Drupal\automatic_updates_extensions; use Drupal\automatic_updates\Exception\UpdateException; -use Drupal\automatic_updates\LegacyVersionUtility; +use Drupal\package_manager\LegacyVersionUtility; use Drupal\package_manager\Event\StageEvent; use Drupal\package_manager\Exception\StageValidationException; use Drupal\package_manager\Stage; diff --git a/automatic_updates_extensions/src/Form/UpdateReady.php b/automatic_updates_extensions/src/Form/UpdateReady.php index 270f8c2a8b..d398b4f718 100644 --- a/automatic_updates_extensions/src/Form/UpdateReady.php +++ b/automatic_updates_extensions/src/Form/UpdateReady.php @@ -2,7 +2,7 @@ namespace Drupal\automatic_updates_extensions\Form; -use Drupal\automatic_updates\ProjectInfo; +use Drupal\package_manager\ProjectInfo; use Drupal\automatic_updates\Validator\StagedDatabaseUpdateValidator; use Drupal\automatic_updates_extensions\BatchProcessor; use Drupal\automatic_updates\BatchProcessor as AutoUpdatesBatchProcessor; diff --git a/automatic_updates_extensions/src/Validator/UpdateReleaseValidator.php b/automatic_updates_extensions/src/Validator/UpdateReleaseValidator.php index 115479d19d..945d89b5a7 100644 --- a/automatic_updates_extensions/src/Validator/UpdateReleaseValidator.php +++ b/automatic_updates_extensions/src/Validator/UpdateReleaseValidator.php @@ -2,9 +2,9 @@ namespace Drupal\automatic_updates_extensions\Validator; -use Drupal\automatic_updates\ProjectInfo; +use Drupal\package_manager\ProjectInfo; use Drupal\automatic_updates_extensions\ExtensionUpdater; -use Drupal\automatic_updates\LegacyVersionUtility; +use Drupal\package_manager\LegacyVersionUtility; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreCreateEvent; diff --git a/automatic_updates_extensions/tests/src/Kernel/Validator/UpdateReleaseValidatorTest.php b/automatic_updates_extensions/tests/src/Kernel/Validator/UpdateReleaseValidatorTest.php index 3d79f87987..3ad5cdda8b 100644 --- a/automatic_updates_extensions/tests/src/Kernel/Validator/UpdateReleaseValidatorTest.php +++ b/automatic_updates_extensions/tests/src/Kernel/Validator/UpdateReleaseValidatorTest.php @@ -2,7 +2,7 @@ namespace Drupal\Tests\automatic_updates_extensions\Kernel\Validator; -use Drupal\automatic_updates\LegacyVersionUtility; +use Drupal\package_manager\LegacyVersionUtility; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreCreateEvent; use Drupal\package_manager\ValidationResult; @@ -129,7 +129,7 @@ class UpdateReleaseValidatorTest extends AutomaticUpdatesExtensionsKernelTestBas $this->assertFileIsReadable($active_installed); $this->assertFileIsReadable($staged_installed); $this->setReleaseMetadata([ - 'aaa_automatic_updates_test' => __DIR__ . "/../../../../../tests/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml", + 'aaa_automatic_updates_test' => __DIR__ . "/../../../../../package_manager/tests/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml", $project => __DIR__ . "/../../../fixtures/release-history/$project.1.1.xml", 'drupal' => __DIR__ . '/../../../../../tests/fixtures/release-history/drupal.9.8.2.xml', ]); diff --git a/package_manager/package_manager.info.yml b/package_manager/package_manager.info.yml index 0b9c3b2e40..cf0acc27fb 100644 --- a/package_manager/package_manager.info.yml +++ b/package_manager/package_manager.info.yml @@ -3,3 +3,5 @@ type: module description: 'API module providing functionality for staging package installs and updates with Composer.' core_version_requirement: ^9.3 php: 7.4 +dependencies: + - drupal:update diff --git a/src/LegacyVersionUtility.php b/package_manager/src/LegacyVersionUtility.php similarity index 98% rename from src/LegacyVersionUtility.php rename to package_manager/src/LegacyVersionUtility.php index 6536f5db55..9de7210945 100644 --- a/src/LegacyVersionUtility.php +++ b/package_manager/src/LegacyVersionUtility.php @@ -1,6 +1,6 @@ <?php -namespace Drupal\automatic_updates; +namespace Drupal\package_manager; use Drupal\Core\Extension\ExtensionVersion; diff --git a/src/ProjectInfo.php b/package_manager/src/ProjectInfo.php similarity index 99% rename from src/ProjectInfo.php rename to package_manager/src/ProjectInfo.php index 1ec4061072..c28b0927f2 100644 --- a/src/ProjectInfo.php +++ b/package_manager/src/ProjectInfo.php @@ -1,6 +1,6 @@ <?php -namespace Drupal\automatic_updates; +namespace Drupal\package_manager; use Composer\Semver\Comparator; use Drupal\update\ProjectRelease; diff --git a/tests/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml b/package_manager/tests/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml similarity index 100% rename from tests/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml rename to package_manager/tests/fixtures/release-history/aaa_automatic_updates_test.9.8.2.xml diff --git a/package_manager/tests/fixtures/release-history/drupal.9.8.1-security.xml b/package_manager/tests/fixtures/release-history/drupal.9.8.1-security.xml new file mode 100644 index 0000000000..5466a623be --- /dev/null +++ b/package_manager/tests/fixtures/release-history/drupal.9.8.1-security.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>9.8.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 9.8.1</name> + <version>9.8.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-1-release</release_link> + <download_link>http://example.com/drupal-9-8-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security update</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0</name> + <version>9.8.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-release</release_link> + <download_link>http://example.com/drupal-9-8-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0-alpha1</name> + <version>9.8.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-8-0-alpha1-.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.x-dev</name> + <version>9.8.x-dev</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-x-dex-release</release_link> + <download_link>http://example.com/drupal-9-8-x-dex.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/package_manager/tests/fixtures/release-history/drupal.9.8.2-older-sec-release.xml b/package_manager/tests/fixtures/release-history/drupal.9.8.2-older-sec-release.xml new file mode 100644 index 0000000000..1bc31480c7 --- /dev/null +++ b/package_manager/tests/fixtures/release-history/drupal.9.8.2-older-sec-release.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>9.7.,9.8.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 9.8.2</name> + <version>9.8.2</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-2-release</release_link> + <download_link>http://example.com/drupal-9-8-2.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.1</name> + <version>9.8.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-1-release</release_link> + <download_link>http://example.com/drupal-9-8-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security update</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.1-beta1</name> + <version>9.8.1-beta1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-1-beta1-release</release_link> + <download_link>http://example.com/drupal-9-8-1-beta1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security release</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0</name> + <version>9.8.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-release</release_link> + <download_link>http://example.com/drupal-9-8-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0-alpha1</name> + <version>9.8.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-8-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.1</name> + <version>9.7.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-1-release</release_link> + <download_link>http://example.com/drupal-9-7-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Security update</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.0</name> + <version>9.7.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-0-release</release_link> + <download_link>http://example.com/drupal-9-7-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Insecure</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.0-alpha1</name> + <version>9.7.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-7-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.x-dev</name> + <version>9.8.x-dev</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-x-dex-release</release_link> + <download_link>http://example.com/drupal-9-8-x-dex.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/package_manager/tests/fixtures/release-history/drupal.9.8.2-unsupported_unpublished.xml b/package_manager/tests/fixtures/release-history/drupal.9.8.2-unsupported_unpublished.xml new file mode 100644 index 0000000000..ecf62618b0 --- /dev/null +++ b/package_manager/tests/fixtures/release-history/drupal.9.8.2-unsupported_unpublished.xml @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>9.7.,9.8.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 9.8.2</name> + <version>9.8.2</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-2-release</release_link> + <download_link>http://example.com/drupal-9-8-2.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.1</name> + <version>9.8.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-1-release</release_link> + <download_link>http://example.com/drupal-9-8-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + <term><name>Release type</name><value>Unsupported</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0</name> + <version>9.8.0</version> + <status>unpublished</status> + <release_link>http://example.com/drupal-9-8-0-release</release_link> + <download_link>http://example.com/drupal-9-8-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0-alpha1</name> + <version>9.8.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-8-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.1</name> + <version>9.7.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-1-release</release_link> + <download_link>http://example.com/drupal-9-7-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.0</name> + <version>9.7.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-0-release</release_link> + <download_link>http://example.com/drupal-9-7-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.0-alpha1</name> + <version>9.7.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-7-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.6.1</name> + <version>9.6.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-6-1-release</release_link> + <download_link>http://example.com/drupal-9-6-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.6.0</name> + <version>9.6.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-6-0-release</release_link> + <download_link>http://example.com/drupal-9-6-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.6.0-alpha1</name> + <version>9.6.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-6-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-6-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.x-dev</name> + <version>9.8.x-dev</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-x-dex-release</release_link> + <download_link>http://example.com/drupal-9-8-x-dex.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/package_manager/tests/fixtures/release-history/drupal.9.8.2.xml b/package_manager/tests/fixtures/release-history/drupal.9.8.2.xml new file mode 100644 index 0000000000..a830e4d023 --- /dev/null +++ b/package_manager/tests/fixtures/release-history/drupal.9.8.2.xml @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="utf-8"?> +<project xmlns:dc="http://purl.org/dc/elements/1.1/"> +<title>Drupal</title> +<short_name>drupal</short_name> +<dc:creator>Drupal</dc:creator> +<supported_branches>9.7.,9.8.</supported_branches> +<project_status>published</project_status> +<link>http://example.com/project/drupal</link> + <terms> + <term><name>Projects</name><value>Drupal project</value></term> + </terms> +<releases> + <release> + <name>Drupal 9.8.2</name> + <version>9.8.2</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-2-release</release_link> + <download_link>http://example.com/drupal-9-8-2.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.1</name> + <version>9.8.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-1-release</release_link> + <download_link>http://example.com/drupal-9-8-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0</name> + <version>9.8.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-release</release_link> + <download_link>http://example.com/drupal-9-8-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.0-alpha1</name> + <version>9.8.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-8-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.1</name> + <version>9.7.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-1-release</release_link> + <download_link>http://example.com/drupal-9-7-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.0</name> + <version>9.7.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-0-release</release_link> + <download_link>http://example.com/drupal-9-7-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.7.0-alpha1</name> + <version>9.7.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-7-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-7-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.6.1</name> + <version>9.6.1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-6-1-release</release_link> + <download_link>http://example.com/drupal-9-6-1.tar.gz</download_link> + <date>1250425521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.6.0</name> + <version>9.6.0</version> + <status>published</status> + <release_link>http://example.com/drupal-9-6-0-release</release_link> + <download_link>http://example.com/drupal-9-6-0.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.6.0-alpha1</name> + <version>9.6.0-alpha1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-6-0-alpha1-release</release_link> + <download_link>http://example.com/drupal-9-6-0-alpha1.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> + <release> + <name>Drupal 9.8.x-dev</name> + <version>9.8.x-dev</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-x-dex-release</release_link> + <download_link>http://example.com/drupal-9-8-x-dex.tar.gz</download_link> + <date>1250424521</date> + <terms> + <term><name>Release type</name><value>New features</value></term> + <term><name>Release type</name><value>Bug fixes</value></term> + </terms> + </release> +</releases> +</project> diff --git a/tests/fixtures/release-history/drupal.9.8.2_unknown_status.xml b/package_manager/tests/fixtures/release-history/drupal.9.8.2_unknown_status.xml similarity index 100% rename from tests/fixtures/release-history/drupal.9.8.2_unknown_status.xml rename to package_manager/tests/fixtures/release-history/drupal.9.8.2_unknown_status.xml diff --git a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php index 61e54d7658..81ea6eba08 100644 --- a/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php +++ b/package_manager/tests/src/Kernel/PackageManagerKernelTestBase.php @@ -11,6 +11,11 @@ use Drupal\package_manager\Exception\StageValidationException; use Drupal\package_manager\Stage; use Drupal\package_manager_bypass\Beginner; use Drupal\Tests\package_manager\Traits\ValidationTestTrait; +use GuzzleHttp\Client; +use GuzzleHttp\Handler\MockHandler; +use GuzzleHttp\HandlerStack; +use GuzzleHttp\Psr7\Response; +use GuzzleHttp\Psr7\Utils; use org\bovigo\vfs\vfsStream; use org\bovigo\vfs\vfsStreamDirectory; use org\bovigo\vfs\vfsStreamFile; @@ -18,6 +23,7 @@ use org\bovigo\vfs\visitor\vfsStreamAbstractVisitor; use PhpTuf\ComposerStager\Domain\Value\Path\PathInterface; use PhpTuf\ComposerStager\Infrastructure\Factory\Path\PathFactoryInterface; use PhpTuf\ComposerStager\Infrastructure\Value\Path\AbstractPath; +use Psr\Http\Message\RequestInterface; use Symfony\Component\DependencyInjection\Definition; /** @@ -27,12 +33,28 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { use ValidationTestTrait; + /** + * The mocked HTTP client that returns metadata about available updates. + * + * We need to preserve this as a class property so that we can re-inject it + * into the container when a rebuild is triggered by module installation. + * + * @var \GuzzleHttp\Client + * + * @see ::register() + */ + private $client; + + /** * {@inheritdoc} */ protected static $modules = [ 'package_manager', 'package_manager_bypass', + 'system', + 'update', + 'update_test', ]; /** @@ -50,6 +72,14 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { $this->installConfig('package_manager'); $this->createVirtualProject(); + + // The Update module's default configuration must be installed for our + // fake release metadata to be fetched. + $this->installConfig('update'); + + // Make the update system think that all of System's post-update functions + // have run. + $this->registerPostUpdateFunctions(); } /** @@ -58,6 +88,12 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { public function register(ContainerBuilder $container) { parent::register($container); + // If we previously set up a mock HTTP client in ::setReleaseMetadata(), + // re-inject it into the container. + if ($this->client) { + $container->set('http_client', $this->client); + } + // Ensure that Composer Stager uses the test path factory, which is aware // of the virtual file system. $definition = new Definition(TestPathFactory::class); @@ -228,6 +264,46 @@ abstract class PackageManagerKernelTestBase extends KernelTestBase { $this->container->set('package_manager.validator.disk_space', $validator); } + /** + * Sets the current (running) version of core, as known to the Update module. + * + * @param string $version + * The current version of core. + */ + protected function setCoreVersion(string $version): void { + $this->config('update_test.settings') + ->set('system_info.#all.version', $version) + ->save(); + } + + /** + * Sets the release metadata file to use when fetching available updates. + * + * @param string[] $files + * The paths of the XML metadata files to use, keyed by project name. + */ + protected function setReleaseMetadata(array $files): void { + $responses = []; + + foreach ($files as $project => $file) { + $metadata = Utils::tryFopen($file, 'r'); + $responses["/release-history/$project/current"] = new Response(200, [], Utils::streamFor($metadata)); + } + $callable = function (RequestInterface $request) use ($responses): Response { + return $responses[$request->getUri()->getPath()] ?? new Response(404); + }; + + // The mock handler's queue consist of same callable as many times as the + // number of requests we expect to be made for update XML because it will + // retrieve one item off the queue for each request. + // @see \GuzzleHttp\Handler\MockHandler::__invoke() + $handler = new MockHandler(array_fill(0, 100, $callable)); + $this->client = new Client([ + 'handler' => HandlerStack::create($handler), + ]); + $this->container->set('http_client', $this->client); + } + } /** diff --git a/package_manager/tests/src/Kernel/PendingUpdatesValidatorTest.php b/package_manager/tests/src/Kernel/PendingUpdatesValidatorTest.php index 35605045ea..50e4c0e669 100644 --- a/package_manager/tests/src/Kernel/PendingUpdatesValidatorTest.php +++ b/package_manager/tests/src/Kernel/PendingUpdatesValidatorTest.php @@ -21,7 +21,6 @@ class PendingUpdatesValidatorTest extends PackageManagerKernelTestBase { * Tests that no error is raised if there are no pending updates. */ public function testNoPendingUpdates(): void { - $this->registerPostUpdateFunctions(); $this->assertResults([], PreCreateEvent::class); } @@ -31,10 +30,6 @@ class PendingUpdatesValidatorTest extends PackageManagerKernelTestBase { * @depends testNoPendingUpdates */ public function testPendingUpdateHook(): void { - // Register the System module's post-update functions, so that any detected - // pending updates are guaranteed to be schema updates. - $this->registerPostUpdateFunctions(); - // Set the installed schema version of Package Manager to its default value // and import an empty update hook which is numbered much higher than will // ever exist in the real world. @@ -54,6 +49,7 @@ class PendingUpdatesValidatorTest extends PackageManagerKernelTestBase { * Tests that an error is raised if there are pending post-updates. */ public function testPendingPostUpdate(): void { + $this->registerPostUpdateFunctions(); // The System module's post-update functions have not been registered, so // the update registry will think they're pending. $result = ValidationResult::createError([ diff --git a/tests/src/Kernel/ProjectInfoTest.php b/package_manager/tests/src/Kernel/ProjectInfoTest.php similarity index 94% rename from tests/src/Kernel/ProjectInfoTest.php rename to package_manager/tests/src/Kernel/ProjectInfoTest.php index 63a5b2ce13..d0e404ff77 100644 --- a/tests/src/Kernel/ProjectInfoTest.php +++ b/package_manager/tests/src/Kernel/ProjectInfoTest.php @@ -1,15 +1,16 @@ <?php -namespace Drupal\Tests\automatic_updates\Kernel; +namespace Drupal\Tests\package_manger\Kernel; -use Drupal\automatic_updates\ProjectInfo; +use Drupal\package_manager\ProjectInfo; +use Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase; /** - * @coversDefaultClass \Drupal\automatic_updates\ProjectInfo + * @coversDefaultClass \Drupal\package_manager\ProjectInfo * * @group automatic_updates */ -class ProjectInfoTest extends AutomaticUpdatesKernelTestBase { +class ProjectInfoTest extends PackageManagerKernelTestBase { /** * @covers ::getInstallableReleases() diff --git a/package_manager/tests/src/Kernel/StageOwnershipTest.php b/package_manager/tests/src/Kernel/StageOwnershipTest.php index 39594018b3..cfd06a1a6f 100644 --- a/package_manager/tests/src/Kernel/StageOwnershipTest.php +++ b/package_manager/tests/src/Kernel/StageOwnershipTest.php @@ -16,7 +16,7 @@ use Psr\Log\Test\TestLogger; /** * Tests that ownership of the stage is enforced. * - * @group package_manger + * @group package_manager */ class StageOwnershipTest extends PackageManagerKernelTestBase { @@ -39,7 +39,6 @@ class StageOwnershipTest extends PackageManagerKernelTestBase { $this->installSchema('system', ['sequences']); $this->installSchema('user', ['users_data']); $this->installEntitySchema('user'); - $this->registerPostUpdateFunctions(); } /** diff --git a/src/CronUpdater.php b/src/CronUpdater.php index 23f6183eef..f79d7561b2 100644 --- a/src/CronUpdater.php +++ b/src/CronUpdater.php @@ -8,6 +8,7 @@ use Drupal\Core\Mail\MailManagerInterface; use Drupal\Core\State\StateInterface; use Drupal\Core\Url; use Drupal\package_manager\Exception\StageValidationException; +use Drupal\package_manager\ProjectInfo; use Drupal\update\ProjectRelease; use GuzzleHttp\Psr7\Uri as GuzzleUri; use Symfony\Component\HttpFoundation\Response; diff --git a/src/Form/UpdaterForm.php b/src/Form/UpdaterForm.php index 3994b341c8..2b36689a08 100644 --- a/src/Form/UpdaterForm.php +++ b/src/Form/UpdaterForm.php @@ -4,7 +4,7 @@ namespace Drupal\automatic_updates\Form; use Drupal\automatic_updates\BatchProcessor; use Drupal\automatic_updates\Event\ReadinessCheckEvent; -use Drupal\automatic_updates\ProjectInfo; +use Drupal\package_manager\ProjectInfo; use Drupal\automatic_updates\ReleaseChooser; use Drupal\automatic_updates\Updater; use Drupal\automatic_updates\Validation\ReadinessTrait; diff --git a/src/ReleaseChooser.php b/src/ReleaseChooser.php index 04050af1aa..d620f18131 100644 --- a/src/ReleaseChooser.php +++ b/src/ReleaseChooser.php @@ -4,6 +4,7 @@ namespace Drupal\automatic_updates; use Composer\Semver\Semver; use Drupal\automatic_updates\Validator\VersionPolicyValidator; +use Drupal\package_manager\ProjectInfo; use Drupal\update\ProjectRelease; use Drupal\Core\Extension\ExtensionVersion; @@ -24,7 +25,7 @@ final class ReleaseChooser { /** * The project information fetcher. * - * @var \Drupal\automatic_updates\ProjectInfo + * @var \Drupal\package_manager\ProjectInfo */ protected $projectInfo; diff --git a/src/Validator/VersionPolicyValidator.php b/src/Validator/VersionPolicyValidator.php index e7bed65b64..15f67b8cc4 100644 --- a/src/Validator/VersionPolicyValidator.php +++ b/src/Validator/VersionPolicyValidator.php @@ -4,7 +4,7 @@ namespace Drupal\automatic_updates\Validator; use Drupal\automatic_updates\CronUpdater; use Drupal\automatic_updates\Event\ReadinessCheckEvent; -use Drupal\automatic_updates\ProjectInfo; +use Drupal\package_manager\ProjectInfo; use Drupal\automatic_updates\Updater; use Drupal\automatic_updates\Validator\VersionPolicy\ForbidDowngrade; use Drupal\automatic_updates\Validator\VersionPolicy\ForbidMinorUpdates; @@ -228,7 +228,7 @@ final class VersionPolicyValidator implements EventSubscriberInterface { * descending order (i.e., newest first). Will be in ascending order (i.e., * oldest first) if $updater is the cron updater. * - * @see \Drupal\automatic_updates\ProjectInfo::getInstallableReleases() + * @see \Drupal\package_manager\ProjectInfo::getInstallableReleases() */ private function getAvailableReleases(Updater $updater): array { $project_info = new ProjectInfo('drupal'); diff --git a/tests/modules/automatic_updates_test_cron/automatic_updates_test_cron.module b/tests/modules/automatic_updates_test_cron/automatic_updates_test_cron.module index 34842fcf68..af8284e440 100644 --- a/tests/modules/automatic_updates_test_cron/automatic_updates_test_cron.module +++ b/tests/modules/automatic_updates_test_cron/automatic_updates_test_cron.module @@ -7,7 +7,7 @@ * @todo Move into automatic_updates when TUF integration is stable. */ -use Drupal\automatic_updates\ProjectInfo; +use Drupal\package_manager\ProjectInfo; use Drupal\automatic_updates\CronUpdater; use Drupal\Core\Extension\ExtensionVersion; use Drupal\Core\Form\FormStateInterface; diff --git a/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php b/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php index 532ca14047..2814dc463d 100644 --- a/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php +++ b/tests/src/Kernel/AutomaticUpdatesKernelTestBase.php @@ -9,12 +9,6 @@ use Drupal\Core\Url; use Drupal\Tests\automatic_updates\Traits\ValidationTestTrait; use Drupal\Tests\package_manager\Kernel\PackageManagerKernelTestBase; use Drupal\Tests\package_manager\Kernel\TestStageTrait; -use GuzzleHttp\Client; -use GuzzleHttp\Handler\MockHandler; -use GuzzleHttp\HandlerStack; -use GuzzleHttp\Psr7\Response; -use GuzzleHttp\Psr7\Utils; -use Psr\Http\Message\RequestInterface; /** * Base class for kernel tests of the Automatic Updates module. @@ -28,23 +22,8 @@ abstract class AutomaticUpdatesKernelTestBase extends PackageManagerKernelTestBa */ protected static $modules = [ 'automatic_updates_test_cron', - 'system', - 'update', - 'update_test', ]; - /** - * The mocked HTTP client that returns metadata about available updates. - * - * We need to preserve this as a class property so that we can re-inject it - * into the container when a rebuild is triggered by module installation. - * - * @var \GuzzleHttp\Client - * - * @see ::register() - */ - private $client; - /** * {@inheritdoc} */ @@ -63,14 +42,6 @@ abstract class AutomaticUpdatesKernelTestBase extends PackageManagerKernelTestBa $this->disableValidators[] = 'automatic_updates.validator.xdebug'; parent::setUp(); - // The Update module's default configuration must be installed for our - // fake release metadata to be fetched. - $this->installConfig('update'); - - // Make the update system think that all of System's post-update functions - // have run. - $this->registerPostUpdateFunctions(); - // By default, pretend we're running Drupal core 9.8.0 and a non-security // update to 9.8.1 is available. $this->setCoreVersion('9.8.0'); @@ -85,30 +56,12 @@ abstract class AutomaticUpdatesKernelTestBase extends PackageManagerKernelTestBa $this->container->get('automatic_updates_test_cron.enabler')->enableCron(); } - /** - * Sets the current (running) version of core, as known to the Update module. - * - * @param string $version - * The current version of core. - */ - protected function setCoreVersion(string $version): void { - $this->config('update_test.settings') - ->set('system_info.#all.version', $version) - ->save(); - } - /** * {@inheritdoc} */ public function register(ContainerBuilder $container) { parent::register($container); - // If we previously set up a mock HTTP client in ::setReleaseMetadata(), - // re-inject it into the container. - if ($this->client) { - $container->set('http_client', $this->client); - } - // Use the test-only implementations of the regular and cron updaters. $overrides = [ 'automatic_updates.updater' => TestUpdater::class, @@ -121,34 +74,6 @@ abstract class AutomaticUpdatesKernelTestBase extends PackageManagerKernelTestBa } } - /** - * Sets the release metadata file to use when fetching available updates. - * - * @param string[] $files - * The paths of the XML metadata files to use, keyed by project name. - */ - protected function setReleaseMetadata(array $files): void { - $responses = []; - - foreach ($files as $project => $file) { - $metadata = Utils::tryFopen($file, 'r'); - $responses["/release-history/$project/current"] = new Response(200, [], Utils::streamFor($metadata)); - } - $callable = function (RequestInterface $request) use ($responses): Response { - return $responses[$request->getUri()->getPath()] ?? new Response(404); - }; - - // The mock handler's queue consist of same callable as many times as the - // number of requests we expect to be made for update XML because it will - // retrieve one item off the queue for each request. - // @see \GuzzleHttp\Handler\MockHandler::__invoke() - $handler = new MockHandler(array_fill(0, count($responses), $callable)); - $this->client = new Client([ - 'handler' => HandlerStack::create($handler), - ]); - $this->container->set('http_client', $this->client); - } - } /** diff --git a/tests/src/Unit/LegacyVersionUtilityTest.php b/tests/src/Unit/LegacyVersionUtilityTest.php index 8043d9eff6..95d0edec25 100644 --- a/tests/src/Unit/LegacyVersionUtilityTest.php +++ b/tests/src/Unit/LegacyVersionUtilityTest.php @@ -2,11 +2,11 @@ namespace Drupal\Tests\automatic_updates\Unit; -use Drupal\automatic_updates\LegacyVersionUtility; +use Drupal\package_manager\LegacyVersionUtility; use Drupal\Tests\UnitTestCase; /** - * @coversDefaultClass \Drupal\automatic_updates\LegacyVersionUtility + * @coversDefaultClass \Drupal\package_manager\LegacyVersionUtility * * @group automatic_updates */ -- GitLab