Skip to content
Snippets Groups Projects
Commit 3308cc49 authored by Rahul Gupta's avatar Rahul Gupta Committed by Ted Bowman
Browse files

Issue #3304640 by rahul_, tedbow: Logic error in...

Issue #3304640 by rahul_, tedbow: Logic error in \Drupal\automatic_updates\Controller\UpdateController::onFinish
parent 6b2c682f
No related branches found
No related tags found
No related merge requests found
...@@ -135,6 +135,10 @@ class TestSubscriber implements EventSubscriberInterface { ...@@ -135,6 +135,10 @@ class TestSubscriber implements EventSubscriberInterface {
elseif ($results === 'exit') { elseif ($results === 'exit') {
exit(); exit();
} }
elseif (is_string($results)) {
\Drupal::messenger()->addStatus($results);
return;
}
/** @var \Drupal\package_manager\ValidationResult $result */ /** @var \Drupal\package_manager\ValidationResult $result */
foreach ($results as $result) { foreach ($results as $result) {
if ($result->getSeverity() === SystemManager::REQUIREMENT_ERROR) { if ($result->getSeverity() === SystemManager::REQUIREMENT_ERROR) {
...@@ -164,4 +168,18 @@ class TestSubscriber implements EventSubscriberInterface { ...@@ -164,4 +168,18 @@ class TestSubscriber implements EventSubscriberInterface {
]; ];
} }
/**
* Sets a status message that will be sent to the messenger for an event.
*
* @param string $message
* Message text.
* @param string $event
* The event class.
*/
public static function setMessage(string $message, string $event): void {
$key = static::getStateKey($event);
$state = \Drupal::state();
$state->set($key, $message);
}
} }
...@@ -78,13 +78,13 @@ final class UpdateController extends ControllerBase { ...@@ -78,13 +78,13 @@ final class UpdateController extends ControllerBase {
// @todo Remove once the core bug that shows the maintenance mode // @todo Remove once the core bug that shows the maintenance mode
// message after the site is out of maintenance mode is fixed in // message after the site is out of maintenance mode is fixed in
// https://www.drupal.org/i/3279246. // https://www.drupal.org/i/3279246.
$messages = $this->messenger()->messagesByType(MessengerInterface::TYPE_STATUS); $status_messages = $this->messenger()->messagesByType(MessengerInterface::TYPE_STATUS);
$messages = array_filter($messages, function (string $message) { $status_messages = array_filter($status_messages, function (string $message) {
return !str_starts_with($message, (string) $this->t('Operating in maintenance mode.')); return !str_starts_with($message, (string) $this->t('Operating in maintenance mode.'));
}); });
$this->messenger()->deleteByType(MessengerInterface::TYPE_STATUS); $this->messenger()->deleteByType(MessengerInterface::TYPE_STATUS);
foreach ($messages as $message) { foreach ($status_messages as $status_message) {
$this->messenger()->addStatus($message); $this->messenger()->addStatus($status_message);
} }
} }
} }
......
...@@ -7,6 +7,7 @@ use Drupal\automatic_updates_test\Datetime\TestTime; ...@@ -7,6 +7,7 @@ use Drupal\automatic_updates_test\Datetime\TestTime;
use Drupal\automatic_updates_test\StagedDatabaseUpdateValidator; use Drupal\automatic_updates_test\StagedDatabaseUpdateValidator;
use Drupal\package_manager\Event\PostRequireEvent; use Drupal\package_manager\Event\PostRequireEvent;
use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreApplyEvent;
use Drupal\package_manager\Event\PostApplyEvent;
use Drupal\package_manager\Event\PreCreateEvent; use Drupal\package_manager\Event\PreCreateEvent;
use Drupal\package_manager\ValidationResult; use Drupal\package_manager\ValidationResult;
use Drupal\automatic_updates_test\EventSubscriber\TestSubscriber1; use Drupal\automatic_updates_test\EventSubscriber\TestSubscriber1;
...@@ -601,6 +602,48 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase { ...@@ -601,6 +602,48 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
$this->assertNotSame($pre_apply_time, $post_apply_time); $this->assertNotSame($pre_apply_time, $post_apply_time);
} }
/**
* Data provider for testUpdateCompleteMessage().
*
* @return string[][]
* The test cases.
*/
public function providerUpdateCompleteMessage(): array {
return [
'maintenance mode off' => [FALSE],
'maintenance mode on' => [TRUE],
];
}
/**
* Tests the update complete message is displayed when another message exist.
*
* @param bool $maintenance_mode_on
* Whether maintenance should be on at the beginning of the update.
*
* @dataProvider providerUpdateCompleteMessage
*/
public function testUpdateCompleteMessage(bool $maintenance_mode_on): void {
$assert_session = $this->assertSession();
$this->setCoreVersion('9.8.0');
$this->checkForUpdates();
$state = $this->container->get('state');
$state->set('system.maintenance_mode', $maintenance_mode_on);
$page = $this->getSession()->getPage();
$this->drupalGet('/admin/modules/automatic-update');
Stager::setFixturePath(__DIR__ . '/../../fixtures/staged/9.8.1');
$page->pressButton('Update to 9.8.1');
$this->checkForMetaRefresh();
// Confirm that the site was put into maintenance mode if needed.
$custom_message = 'custom status message.';
TestSubscriber1::setMessage($custom_message, PostApplyEvent::class);
$page->pressButton('Continue');
$this->checkForMetaRefresh();
$assert_session->pageTextContainsOnce($custom_message);
$assert_session->pageTextContainsOnce('Update complete!');
}
/** /**
* Tests what happens when a staged update is deleted without being destroyed. * Tests what happens when a staged update is deleted without being destroyed.
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment