From 8f44f19cada4ec40e20b91579b180d3ee8a4c006 Mon Sep 17 00:00:00 2001 From: rahul_ <rahul_gupta@3278723.no-reply.drupal.org> Date: Wed, 2 Nov 2022 16:18:47 +0000 Subject: [PATCH] Issue #3310666 by tedbow, kunal.sachdev, rahul_, phenaproxima, Shabbir, siramsay: UpdaterForm throws an exception if you try to update to the next minor beta --- .../release-history/drupal.9.8.0-beta1.xml | 77 +++++++++++++++++++ src/Form/UpdaterForm.php | 26 +++++-- tests/src/Functional/UpdaterFormTest.php | 16 ++++ 3 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 package_manager/tests/fixtures/release-history/drupal.9.8.0-beta1.xml diff --git a/package_manager/tests/fixtures/release-history/drupal.9.8.0-beta1.xml b/package_manager/tests/fixtures/release-history/drupal.9.8.0-beta1.xml new file mode 100644 index 0000000000..d95cabcc79 --- /dev/null +++ b/package_manager/tests/fixtures/release-history/drupal.9.8.0-beta1.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +Contains metadata about the following (fake) releases of Drupal core, in order: +* 9.8.0-beta1 +* 9.7.0 +* 9.8.x-dev +--> +<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.,9.7.</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.0-beta1</name> + <version>9.8.0-beta1</version> + <status>published</status> + <release_link>http://example.com/drupal-9-8-0-beta1-release</release_link> + <download_link>http://example.com/drupal-9-8-0-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> + </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.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/src/Form/UpdaterForm.php b/src/Form/UpdaterForm.php index ba57131731..fd7c5a78da 100644 --- a/src/Form/UpdaterForm.php +++ b/src/Form/UpdaterForm.php @@ -314,18 +314,28 @@ final class UpdaterForm extends UpdateFormBase { $first_release_version = $release_version->getMajorVersion() . '.' . $release_version->getMinorVersion() . '.0'; $available_updates = update_get_available(TRUE); - // @todo In https://www.drupal.org/i/3310666 handle if the .0 release is - // not available, and only pre-releases are available. - $next_minor_first_release = ProjectRelease::createFromArray($available_updates['drupal']['releases'][$first_release_version]); + // If the `.0` patch release of this minor is available link to its + // release notes because this will document the most important changes + // in this minor. + if (isset($available_updates['drupal']['releases'][$first_release_version])) { + $next_minor_first_release = ProjectRelease::createFromArray($available_updates['drupal']['releases'][$first_release_version]); + $caption = $this->t('Latest version of Drupal @major.@minor (next minor) (<a href=":url">Release notes</a>):', [ + '@major' => $release_version->getMajorVersion(), + '@minor' => $release_version->getMinorVersion(), + ':url' => $next_minor_first_release->getReleaseUrl(), + ]); + } + else { + $caption = $this->t('Latest version of Drupal @major.@minor (next minor):', [ + '@major' => $release_version->getMajorVersion(), + '@minor' => $release_version->getMinorVersion(), + ]); + } $form["next_minor_$next_minor_release_count"] = $this->createReleaseTable( $release, $installed_minor_release ? $this->t('Minor update') : $release_status, - $this->t('Latest version of Drupal @major.@minor (next minor) (<a href=":url">Release notes</a>):', [ - '@major' => $release_version->getMajorVersion(), - '@minor' => $release_version->getMinorVersion(), - ':url' => $next_minor_first_release->getReleaseUrl(), - ]), + $caption, $installed_minor_release ? 'update-optional' : $type, $create_update_buttons, $is_primary diff --git a/tests/src/Functional/UpdaterFormTest.php b/tests/src/Functional/UpdaterFormTest.php index 03942b99e7..ad6f42d3c7 100644 --- a/tests/src/Functional/UpdaterFormTest.php +++ b/tests/src/Functional/UpdaterFormTest.php @@ -259,6 +259,22 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase { $assert_session->pageTextContains($message); } + /** + * Checks pre-releases of the next minor are available on the form. + */ + public function testNextMinorPreRelease(): void { + $this->setReleaseMetadata(__DIR__ . '/../../../package_manager/tests/fixtures/release-history/drupal.9.8.0-beta1.xml'); + $this->setCoreVersion('9.7.0'); + $this->config('automatic_updates.settings') + ->set('allow_core_minor_updates', TRUE) + ->save(); + $this->checkForUpdates(); + $this->drupalGet('/admin/reports/updates/automatic-update'); + $assert_session = $this->assertSession(); + $this->checkReleaseTable('#edit-next-minor-1', '.update-update-recommended', '9.8.0-beta1', FALSE, 'Latest version of Drupal 9.8 (next minor):'); + $assert_session->pageTextContainsOnce('Currently installed: 9.7.0 (Up to date)'); + } + /** * Checks the table for a release on the form. * -- GitLab