diff --git a/automatic_updates_extensions/src/ExtensionUpdater.php b/automatic_updates_extensions/src/ExtensionUpdater.php index 4948ff6133f871f8e4cb70609e1e4504fd7da5e4..6314ea7d00dbd98a949d35ff239e71e13347e2e8 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 270f8c2a8b2146629d98cc2777a20d9e8d1e0aa4..d398b4f71872f25900ee81f1fb85972a0da15215 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 115479d19ddf2822f204a0bf2f256232bc9994f7..945d89b5a79b894cddfa0a641c4601ecdfd426c6 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 3d79f87987d2d204551136e287998f51b068f5db..3ad5cdda8bc3d4b2c70b185d9f3a670d20750c3e 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 0b9c3b2e4013c155543a2b33dc595067dfcdfdca..cf0acc27fbb3977de5d0d717c160d248fc85e3ea 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 6536f5db55b703ec97d6480d5ab061b89e3ab1c2..9de72109456237c3f369807daa535b53576b360c 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 1ec4061072d80f3540847623ef9b739a593696f8..c28b0927f2a8338e5814040d6362f8c8bd849a6d 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 0000000000000000000000000000000000000000..5466a623be5f70a26735dfce1270999c6ec02ff9 --- /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 0000000000000000000000000000000000000000..1bc31480c7eccc4ac938495cbbf04af3418b3f21 --- /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 0000000000000000000000000000000000000000..ecf62618b02ac39ce6e644f7a1fe634baed06855 --- /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 0000000000000000000000000000000000000000..a830e4d023fcdd25e5a178770a11070255815d82 --- /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 61e54d7658607177f9acfde4d2d3b5147e3f8f49..81ea6eba08882d02f1c6b576f8f1f95e4daa05c4 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 35605045ea2b3b4b50816f875400338e6ec8c85d..50e4c0e669ee1831fca2bc58b2c92f391e4e243d 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 63a5b2ce13fd8eb597b2f8758b6488015b41c61b..d0e404ff77f82130df6a28fda57c6e1aa1f49297 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 39594018b3f72f7b6c51647f839d683602e6cc3a..cfd06a1a6fc0a2e488dab563ab2485076e71a4f9 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 23f6183eefbafad478fe086f3d33fd55f788b178..f79d7561b206fda98916ab5156daaa6323e3b786 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 3994b341c8ba42d75343f06f8bc2f7bf8c48d785..2b36689a087033b342989bc26125f52815d3dcfd 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 04050af1aa02994157290f910539b1b433ea53c7..d620f181311a5fc20e0e90ca8bba3aa32db810df 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 e7bed65b642eb173cde95b12d4d41ef3b525bbe6..15f67b8cc4a1970d495ab0eac3f7ce56b98a549e 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 34842fcf68ebf7479fc97316b546bead936c333e..af8284e4402badabe9255239c43afc9cf108c2a1 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 532ca14047d24a1a239b8eef32faee3f0402c752..2814dc463d0901ee545962510b4a5f5002a4fae6 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 8043d9eff6f2e80f2c59100f654307b8b1b0b875..95d0edec25a35a3d006048fc5d464afd6db18d08 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 */