Skip to content
Snippets Groups Projects
Commit 015b00ae authored by Ted Bowman's avatar Ted Bowman Committed by Adam G-H
Browse files

Issue #3295830 by tedbow, phenaproxima: Replace...

Issue #3295830 by tedbow, phenaproxima: Replace ValidationTestTrait::createTestValidationResults() with something that makes sense
parent 49fb3de6
No related branches found
No related tags found
No related merge requests found
......@@ -67,7 +67,6 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
'access administration pages',
'access site in maintenance mode',
]);
$this->createTestValidationResults();
$this->drupalLogin($this->reportViewerUser);
}
......@@ -116,7 +115,7 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->drupalGet('admin/reports/status');
$this->assertNoErrors(TRUE);
/** @var \Drupal\package_manager\ValidationResult[] $expected_results */
$expected_results = $this->testResults['checker_1']['1 error'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
// Run the readiness checks.
......@@ -137,29 +136,35 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->drupalGet('admin/reports/status');
$this->assertErrors($expected_results);
$expected_results = $this->testResults['checker_1']['1 error 1 warning'];
$expected_results = [
'error' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR),
'warning' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING),
];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$key_value->delete('readiness_validation_last_run');
// Confirm a new message is displayed if the stored messages are deleted.
$this->drupalGet('admin/reports/status');
// Confirm that on the status page if there is only 1 warning or error the
// the summaries will not be displayed.
$this->assertErrors([$expected_results['1:error']]);
$this->assertWarnings([$expected_results['1:warning']]);
$assert->pageTextNotContains($expected_results['1:error']->getSummary());
$assert->pageTextNotContains($expected_results['1:warning']->getSummary());
$this->assertErrors([$expected_results['error']]);
$this->assertWarnings([$expected_results['warning']]);
$assert->pageTextNotContains($expected_results['error']->getSummary());
$assert->pageTextNotContains($expected_results['warning']->getSummary());
$key_value->delete('readiness_validation_last_run');
$expected_results = $this->testResults['checker_1']['2 errors 2 warnings'];
$expected_results = [
'error' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR, 2),
'warning' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING, 2),
];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->drupalGet('admin/reports/status');
// Confirm that both messages and summaries will be displayed on status
// report when there multiple messages.
$this->assertErrors([$expected_results['1:errors']]);
$this->assertWarnings([$expected_results['1:warnings']]);
$this->assertErrors([$expected_results['error']]);
$this->assertWarnings([$expected_results['warning']]);
$key_value->delete('readiness_validation_last_run');
$expected_results = $this->testResults['checker_1']['2 warnings'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_WARNING, 2)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->drupalGet('admin/reports/status');
$assert->pageTextContainsOnce('Update readiness checks');
......@@ -168,7 +173,7 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->assertWarnings($expected_results);
$key_value->delete('readiness_validation_last_run');
$expected_results = $this->testResults['checker_1']['1 warning'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_WARNING)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->drupalGet('admin/reports/status');
$assert->pageTextContainsOnce('Update readiness checks');
......@@ -197,7 +202,7 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
// Confirm a user without the permission to run readiness checks does not
// have a link to run the checks when the checks need to be run again.
$expected_results = $this->testResults['checker_1']['1 error'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
// @todo Change this to use ::delayRequestTime() to simulate running cron
// after a 24 wait instead of directly deleting 'readiness_validation_last_run'
......@@ -220,7 +225,10 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$assert->addressEquals('admin/structure');
$assert->pageTextContainsOnce($expected_results[0]->getMessages()[0]);
$expected_results = $this->testResults['checker_1']['1 error 1 warning'];
$expected_results = [
'1 error' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR),
'1 warning' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING),
];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
// Confirm a new message is displayed if the cron is run after an hour.
$this->delayRequestTime();
......@@ -229,25 +237,28 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$assert->pageTextContainsOnce(static::$errorsExplanation);
// Confirm on admin pages that a single error will be displayed instead of a
// summary.
$this->assertSame(SystemManager::REQUIREMENT_ERROR, $expected_results['1:error']->getSeverity());
$assert->pageTextContainsOnce($expected_results['1:error']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1:error']->getSummary());
$this->assertSame(SystemManager::REQUIREMENT_ERROR, $expected_results['1 error']->getSeverity());
$assert->pageTextContainsOnce($expected_results['1 error']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1 error']->getSummary());
// Warnings are not displayed on admin pages if there are any errors.
$this->assertSame(SystemManager::REQUIREMENT_WARNING, $expected_results['1:warning']->getSeverity());
$assert->pageTextNotContains($expected_results['1:warning']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1:warning']->getSummary());
$this->assertSame(SystemManager::REQUIREMENT_WARNING, $expected_results['1 warning']->getSeverity());
$assert->pageTextNotContains($expected_results['1 warning']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1 warning']->getSummary());
// Confirm that if cron runs less than hour after it previously ran it will
// not run the checkers again.
$unexpected_results = $this->testResults['checker_1']['2 errors 2 warnings'];
$unexpected_results = [
'2 errors' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR, 2),
'2 warnings' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING, 2),
];
TestSubscriber1::setTestResult($unexpected_results, ReadinessCheckEvent::class);
$this->delayRequestTime(30);
$this->cronRun();
$this->drupalGet('admin/structure');
$assert->pageTextNotContains($unexpected_results['1:errors']->getSummary());
$assert->pageTextContainsOnce($expected_results['1:error']->getMessages()[0]);
$assert->pageTextNotContains($unexpected_results['1:warnings']->getSummary());
$assert->pageTextNotContains($expected_results['1:warning']->getMessages()[0]);
$assert->pageTextNotContains($unexpected_results['2 errors']->getSummary());
$assert->pageTextContainsOnce($expected_results['1 error']->getMessages()[0]);
$assert->pageTextNotContains($unexpected_results['2 warnings']->getSummary());
$assert->pageTextNotContains($expected_results['1 warning']->getMessages()[0]);
// Confirm that is if cron is run over an hour after the checkers were
// previously run the checkers will be run again.
......@@ -257,18 +268,18 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->drupalGet('admin/structure');
// Confirm on admin pages only the error summary will be displayed if there
// is more than 1 error.
$this->assertSame(SystemManager::REQUIREMENT_ERROR, $expected_results['1:errors']->getSeverity());
$assert->pageTextNotContains($expected_results['1:errors']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1:errors']->getMessages()[1]);
$assert->pageTextContainsOnce($expected_results['1:errors']->getSummary());
$this->assertSame(SystemManager::REQUIREMENT_ERROR, $expected_results['2 errors']->getSeverity());
$assert->pageTextNotContains($expected_results['2 errors']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['2 errors']->getMessages()[1]);
$assert->pageTextContainsOnce($expected_results['2 errors']->getSummary());
$assert->pageTextContainsOnce(static::$errorsExplanation);
// Warnings are not displayed on admin pages if there are any errors.
$this->assertSame(SystemManager::REQUIREMENT_WARNING, $expected_results['1:warnings']->getSeverity());
$assert->pageTextNotContains($expected_results['1:warnings']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1:warnings']->getMessages()[1]);
$assert->pageTextNotContains($expected_results['1:warnings']->getSummary());
$this->assertSame(SystemManager::REQUIREMENT_WARNING, $expected_results['2 warnings']->getSeverity());
$assert->pageTextNotContains($expected_results['2 warnings']->getMessages()[0]);
$assert->pageTextNotContains($expected_results['2 warnings']->getMessages()[1]);
$assert->pageTextNotContains($expected_results['2 warnings']->getSummary());
$expected_results = $this->testResults['checker_1']['2 warnings'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_WARNING, 2)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->delayRequestTime();
$this->cronRun();
......@@ -282,7 +293,7 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$assert->pageTextContainsOnce(static::$warningsExplanation);
$assert->pageTextContainsOnce($expected_results[0]->getSummary());
$expected_results = $this->testResults['checker_1']['1 warning'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_WARNING)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->delayRequestTime();
$this->cronRun();
......@@ -321,7 +332,7 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->drupalGet('admin/reports/status');
$this->assertNoErrors(TRUE);
$expected_results = $this->testResults['checker_1']['1 error'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber2::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->container->get('module_installer')->install(['automatic_updates_test2']);
$this->drupalGet('admin/structure');
......@@ -330,7 +341,10 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
// Confirm that installing a module runs the checkers, even if the new
// module does not provide any validators.
$previous_results = $expected_results;
$expected_results = $this->testResults['checker_1']['2 errors 2 warnings'];
$expected_results = [
'2 errors' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR, 2),
'2 warnings' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING, 2),
];
TestSubscriber2::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->container->get('module_installer')->install(['help']);
// Check for messages on 'admin/structure' instead of the status report,
......@@ -338,8 +352,8 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->drupalGet('admin/structure');
// Confirm that new checker messages are displayed.
$assert->pageTextNotContains($previous_results[0]->getMessages()[0]);
$assert->pageTextNotContains($expected_results['1:errors']->getMessages()[0]);
$assert->pageTextContainsOnce($expected_results['1:errors']->getSummary());
$assert->pageTextNotContains($expected_results['2 errors']->getMessages()[0]);
$assert->pageTextContainsOnce($expected_results['2 errors']->getSummary());
}
/**
......@@ -349,9 +363,9 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$assert = $this->assertSession();
$this->drupalLogin($this->checkerRunnerUser);
$expected_results_1 = $this->testResults['checker_1']['1 error'];
$expected_results_1 = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($expected_results_1, ReadinessCheckEvent::class);
$expected_results_2 = $this->testResults['checker_2']['1 error'];
$expected_results_2 = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber2::setTestResult($expected_results_2, ReadinessCheckEvent::class);
$this->container->get('module_installer')->install([
'automatic_updates',
......@@ -392,7 +406,7 @@ class ReadinessValidationTest extends AutomaticUpdatesFunctionalTestBase {
$this->setCoreVersion('9.8.0');
// Flag a validation error, which will be displayed in the messages area.
$results = $this->testResults['checker_1']['1 error'];
$results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($results, ReadinessCheckEvent::class);
$message = $results[0]->getMessages()[0];
......
......@@ -11,6 +11,7 @@ use Drupal\package_manager\Event\PreCreateEvent;
use Drupal\package_manager\ValidationResult;
use Drupal\automatic_updates_test\EventSubscriber\TestSubscriber1;
use Drupal\package_manager_bypass\Stager;
use Drupal\system\SystemManager;
use Drupal\Tests\automatic_updates\Traits\ValidationTestTrait;
use Drupal\Tests\package_manager\Traits\PackageManagerBypassTestTrait;
......@@ -239,8 +240,7 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
// Set up a new fake error. Use an error with multiple messages so we can
// ensure that they're all displayed, along with their summary.
$this->createTestValidationResults();
$expected_results = [$this->testResults['checker_1']['2 errors 2 warnings']['1:errors']];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR, 2)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
// If a validator raises an error during readiness checking, the form should
......@@ -412,8 +412,7 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
// If a legitimate error is raised during pre-apply, we should be able to
// delete the staged update right away.
$this->createTestValidationResults();
$results = $this->testResults['checker_1']['1 error'];
$results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($results, PreApplyEvent::class);
$page->pressButton('Update to 9.8.1');
$this->checkForMetaRefresh();
......@@ -458,8 +457,7 @@ class UpdaterFormTest extends AutomaticUpdatesFunctionalTestBase {
// Flag a warning, which will not block the update but should be displayed
// on the updater form.
$this->createTestValidationResults();
$expected_results = $this->testResults['checker_1']['1 warning'];
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_WARNING)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$messages = reset($expected_results)->getMessages();
......
......@@ -33,7 +33,6 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
$this->setCoreVersion('9.8.2');
$this->installEntitySchema('user');
$this->installSchema('user', ['users_data']);
$this->createTestValidationResults();
}
/**
......@@ -42,14 +41,11 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
public function testGetResults(): void {
$this->enableModules(['automatic_updates', 'automatic_updates_test2']);
$this->assertCheckerResultsFromManager([], TRUE);
$expected_results = [
array_pop($this->testResults['checker_1']),
array_pop($this->testResults['checker_2']),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($expected_results[1], ReadinessCheckEvent::class);
$expected_results_all = array_merge($expected_results[0], $expected_results[1]);
$checker_1_expected = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
$checker_2_expected = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_expected, ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($checker_2_expected, ReadinessCheckEvent::class);
$expected_results_all = array_merge($checker_1_expected, $checker_2_expected);
$this->assertCheckerResultsFromManager($expected_results_all, TRUE);
// Define a constant flag that will cause the readiness checker
......@@ -65,25 +61,29 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
$expected_results_all_reversed = array_reverse($expected_results_all);
$this->assertCheckerResultsFromManager($expected_results_all_reversed, TRUE);
$expected_results = [
$this->testResults['checker_1']['2 errors 2 warnings'],
$this->testResults['checker_2']['2 errors 2 warnings'],
$checker_1_expected = [
'checker 1 errors' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR),
'checker 1 warnings' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($expected_results[1], ReadinessCheckEvent::class);
$expected_results_all = array_merge($expected_results[1], $expected_results[0]);
$checker_2_expected = [
'checker 2 errors' => $this->createValidationResult(SystemManager::REQUIREMENT_ERROR),
'checker 2 warnings' => $this->createValidationResult(SystemManager::REQUIREMENT_WARNING),
];
TestSubscriber1::setTestResult($checker_1_expected, ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($checker_2_expected, ReadinessCheckEvent::class);
$expected_results_all = array_merge($checker_2_expected, $checker_1_expected);
$this->assertCheckerResultsFromManager($expected_results_all, TRUE);
// Confirm that filtering by severity works.
$warnings_only_results = [
$expected_results[1]['2:warnings'],
$expected_results[0]['1:warnings'],
$checker_2_expected['checker 2 warnings'],
$checker_1_expected['checker 1 warnings'],
];
$this->assertCheckerResultsFromManager($warnings_only_results, FALSE, SystemManager::REQUIREMENT_WARNING);
$errors_only_results = [
$expected_results[1]['2:errors'],
$expected_results[0]['1:errors'],
$checker_2_expected['checker 2 errors'],
$checker_1_expected['checker 1 errors'],
];
$this->assertCheckerResultsFromManager($errors_only_results, FALSE, SystemManager::REQUIREMENT_ERROR);
}
......@@ -92,34 +92,30 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
* Tests that the manager is run after modules are installed.
*/
public function testRunOnInstall(): void {
$expected_results = [array_pop($this->testResults['checker_1'])];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
$checker_1_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_results, ReadinessCheckEvent::class);
// Confirm that messages from an existing module are displayed when
// 'automatic_updates' is installed.
$this->container->get('module_installer')->install(['automatic_updates']);
$this->assertCheckerResultsFromManager($expected_results[0]);
$this->assertCheckerResultsFromManager($checker_1_results);
// Confirm that the checkers are run when a module that provides a readiness
// checker is installed.
$expected_results = [
array_pop($this->testResults['checker_1']),
array_pop($this->testResults['checker_2']),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($expected_results[1], ReadinessCheckEvent::class);
$checker_1_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
$checker_2_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_results, ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($checker_2_results, ReadinessCheckEvent::class);
$this->container->get('module_installer')->install(['automatic_updates_test2']);
$expected_results_all = array_merge($expected_results[0], $expected_results[1]);
$expected_results_all = array_merge($checker_1_results, $checker_2_results);
$this->assertCheckerResultsFromManager($expected_results_all);
// Confirm that the checkers are run when a module that does not provide a
// readiness checker is installed.
$expected_results = [
array_pop($this->testResults['checker_1']),
array_pop($this->testResults['checker_2']),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($expected_results[1], ReadinessCheckEvent::class);
$expected_results_all = array_merge($expected_results[0], $expected_results[1]);
$checker_1_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
$checker_2_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_results, ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($checker_2_results, ReadinessCheckEvent::class);
$expected_results_all = array_merge($checker_1_results, $checker_2_results);
$this->container->get('module_installer')->install(['help']);
$this->assertCheckerResultsFromManager($expected_results_all);
}
......@@ -128,36 +124,31 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
* Tests that the manager is run after modules are uninstalled.
*/
public function testRunOnUninstall(): void {
$expected_results = [
array_pop($this->testResults['checker_1']),
array_pop($this->testResults['checker_2']),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($expected_results[1], ReadinessCheckEvent::class);
$checker_1_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
$checker_2_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_results, ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($checker_2_results, ReadinessCheckEvent::class);
// Confirm that messages from existing modules are displayed when
// 'automatic_updates' is installed.
$this->container->get('module_installer')->install(['automatic_updates', 'automatic_updates_test2', 'help']);
$expected_results_all = array_merge($expected_results[0], $expected_results[1]);
$expected_results_all = array_merge($checker_1_results, $checker_2_results);
$this->assertCheckerResultsFromManager($expected_results_all);
// Confirm that the checkers are run when a module that provides a readiness
// checker is uninstalled.
$expected_results = [
array_pop($this->testResults['checker_1']),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
TestSubscriber2::setTestResult(array_pop($this->testResults['checker_2']), ReadinessCheckEvent::class);
$checker_1_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
$checker_2_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_results, ReadinessCheckEvent::class);
TestSubscriber2::setTestResult($checker_2_results, ReadinessCheckEvent::class);
$this->container->get('module_installer')->uninstall(['automatic_updates_test2']);
$this->assertCheckerResultsFromManager($expected_results[0]);
$this->assertCheckerResultsFromManager($checker_1_results);
// Confirm that the checkers are run when a module that does not provide a
// readiness checker is uninstalled.
$expected_results = [
array_pop($this->testResults['checker_1']),
];
TestSubscriber1::setTestResult($expected_results[0], ReadinessCheckEvent::class);
$checker_1_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($checker_1_results, ReadinessCheckEvent::class);
$this->container->get('module_installer')->uninstall(['help']);
$this->assertCheckerResultsFromManager($expected_results[0]);
$this->assertCheckerResultsFromManager($checker_1_results);
}
/**
......@@ -165,12 +156,12 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
* @covers ::clearStoredResults
*/
public function testRunIfNeeded(): void {
$expected_results = array_pop($this->testResults['checker_1']);
$expected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($expected_results, ReadinessCheckEvent::class);
$this->container->get('module_installer')->install(['automatic_updates', 'automatic_updates_test2']);
$this->assertCheckerResultsFromManager($expected_results);
$unexpected_results = array_pop($this->testResults['checker_1']);
$unexpected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($unexpected_results, ReadinessCheckEvent::class);
$manager = $this->container->get('automatic_updates.readiness_validation_manager');
// Confirm that the new results will not be returned because the checkers
......@@ -186,7 +177,7 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
$this->assertCheckerResultsFromManager($expected_results);
// Confirm that the results are the same after rebuilding the container.
$unexpected_results = array_pop($this->testResults['checker_1']);
$unexpected_results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($unexpected_results, ReadinessCheckEvent::class);
/** @var \Drupal\Core\DrupalKernel $kernel */
$kernel = $this->container->get('kernel');
......@@ -225,7 +216,7 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
// The readiness checker should raise a warning, so that the update is not
// blocked or aborted.
$results = $this->testResults['checker_1']['1 warning'];
$results = [$this->createValidationResult(SystemManager::REQUIREMENT_WARNING)];
TestSubscriber1::setTestResult($results, ReadinessCheckEvent::class);
// Ensure that the validation manager collects the warning.
......@@ -267,7 +258,7 @@ class ReadinessValidationManagerTest extends AutomaticUpdatesKernelTestBase {
public function testStoredResultsClearedOnConfigChanges(): void {
$this->enableModules(['automatic_updates']);
$results = $this->testResults['checker_1']['1 error'];
$results = [$this->createValidationResult(SystemManager::REQUIREMENT_ERROR)];
TestSubscriber1::setTestResult($results, ReadinessCheckEvent::class);
$this->assertCheckerResultsFromManager($results, TRUE);
// The results should be stored.
......
......@@ -48,7 +48,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
[CronUpdater::DISABLED, CronUpdater::SECURITY, CronUpdater::ALL],
[
$this->createValidationResult('9.8.0-dev', NULL, [
$this->createVersionPolicyValidationResult('9.8.0-dev', NULL, [
'Drupal cannot be automatically updated from the installed version, 9.8.0-dev, because automatic updates from a dev version to any other version are not supported.',
]),
],
......@@ -66,7 +66,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
[CronUpdater::SECURITY, CronUpdater::ALL],
[
$this->createValidationResult('9.8.0-alpha1', NULL, [
$this->createVersionPolicyValidationResult('9.8.0-alpha1', NULL, [
'Drupal cannot be automatically updated during cron from its current version, 9.8.0-alpha1, because it is not a stable version.',
]),
],
......@@ -82,7 +82,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
[CronUpdater::SECURITY, CronUpdater::ALL],
[
$this->createValidationResult('9.8.0-beta2', NULL, [
$this->createVersionPolicyValidationResult('9.8.0-beta2', NULL, [
'Drupal cannot be automatically updated during cron from its current version, 9.8.0-beta2, because it is not a stable version.',
]),
],
......@@ -98,7 +98,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
[CronUpdater::SECURITY, CronUpdater::ALL],
[
$this->createValidationResult('9.8.0-rc3', NULL, [
$this->createVersionPolicyValidationResult('9.8.0-rc3', NULL, [
'Drupal cannot be automatically updated during cron from its current version, 9.8.0-rc3, because it is not a stable version.',
]),
],
......@@ -132,7 +132,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
[CronUpdater::SECURITY, CronUpdater::ALL],
[
$this->createValidationResult('9.7.1', NULL, [
$this->createVersionPolicyValidationResult('9.7.1', NULL, [
'The currently installed version of Drupal core, 9.7.1, is not in a supported minor version. Your site will not be automatically updated during cron until it is updated to a supported minor version.',
'See the <a href="/admin/reports/updates">available updates page</a> for available updates.',
]),
......@@ -143,7 +143,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
[CronUpdater::SECURITY, CronUpdater::ALL],
[
$this->createValidationResult('9.7.1', NULL, [
$this->createVersionPolicyValidationResult('9.7.1', NULL, [
'The currently installed version of Drupal core, 9.7.1, is not in a supported minor version. Your site will not be automatically updated during cron until it is updated to a supported minor version.',
'Use the <a href="/admin/modules/automatic-update">update form</a> to update to a supported version.',
]),
......@@ -202,7 +202,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.1-security.xml",
['drupal' => '9.8.1'],
[
$this->createValidationResult('9.8.0-dev', '9.8.1', [
$this->createVersionPolicyValidationResult('9.8.0-dev', '9.8.1', [
'Drupal cannot be automatically updated from the installed version, 9.8.0-dev, because automatic updates from a dev version to any other version are not supported.',
]),
],
......@@ -214,7 +214,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.2.xml",
['drupal' => '9.8.0'],
[
$this->createValidationResult('9.8.1', '9.8.0', [
$this->createVersionPolicyValidationResult('9.8.1', '9.8.0', [
'Update version 9.8.0 is lower than 9.8.1, downgrading is not supported.',
]),
],
......@@ -224,7 +224,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.2.xml",
['drupal' => '9.8.2'],
[
$this->createValidationResult('8.9.1', '9.8.2', [
$this->createVersionPolicyValidationResult('8.9.1', '9.8.2', [
'Drupal cannot be automatically updated from 8.9.1 to 9.8.2 because automatic updates from one major version to another are not supported.',
]),
],
......@@ -234,7 +234,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.2-unsupported_unpublished.xml",
['drupal' => '9.8.1'],
[
$this->createValidationResult('9.8.0', '9.8.1', [
$this->createVersionPolicyValidationResult('9.8.0', '9.8.1', [
'Cannot update Drupal core to 9.8.1 because it is not in the list of installable releases.',
]),
],
......@@ -255,7 +255,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
"$metadata_dir/drupal.9.8.2.xml",
['drupal' => '9.8.2'],
[
$this->createValidationResult('9.7.9', '9.8.2', [
$this->createVersionPolicyValidationResult('9.7.9', '9.8.2', [
'Drupal cannot be automatically updated from 9.7.9 to 9.8.2 because automatic updates from one minor version to another are not supported.',
]),
],
......@@ -320,7 +320,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
}
/**
* Creates an expected validation result.
* Creates an expected validation result from the version policy validator.
*
* Results returned from VersionPolicyValidator are always summarized in the
* same way, so this method ensures that expected validation results are
......@@ -336,7 +336,7 @@ class VersionPolicyValidatorTest extends AutomaticUpdatesKernelTestBase {
* @return \Drupal\package_manager\ValidationResult
* A validation error object with the appropriate summary.
*/
private function createValidationResult(string $installed_version, ?string $target_version, array $messages): ValidationResult {
private function createVersionPolicyValidationResult(string $installed_version, ?string $target_version, array $messages): ValidationResult {
if ($target_version) {
$summary = t('Updating from Drupal @installed_version to @target_version is not allowed.', [
'@installed_version' => $installed_version,
......
......@@ -3,7 +3,7 @@
namespace Drupal\Tests\automatic_updates\Traits;
use Drupal\package_manager\ValidationResult;
use Drupal\system\SystemManager;
use Drupal\Tests\package_manager\Traits\ValidationTestTrait as PackageManagerValidationTestTrait;
/**
......@@ -28,67 +28,34 @@ trait ValidationTestTrait {
protected static $warningsExplanation = 'Your site does not pass some readiness checks for automatic updates. Depending on the nature of the failures, it might affect the eligibility for automatic updates.';
/**
* Test validation results.
* Creates a unique validation test result.
*
* @param int $severity
* The severity. Should be one of the SystemManager::REQUIREMENT_*
* constants.
* @param int $message_count
* (optional) The number of messages. Defaults to 1.
*
* @var \Drupal\package_manager\ValidationResult[][][]
* @return \Drupal\package_manager\ValidationResult
* The validation test result.
*/
protected $testResults;
protected function createValidationResult(int $severity, int $message_count = 1): ValidationResult {
$this->assertNotEmpty($message_count);
$messages = [];
$random = $this->randomMachineName(64);
for ($i = 0; $i < $message_count; $i++) {
$messages[] = "Message $i $random";
}
$summary = t('Summary @random', ['@random' => $random]);
switch ($severity) {
case SystemManager::REQUIREMENT_ERROR:
return ValidationResult::createError($messages, $summary);
/**
* Creates ValidationResult objects to be used in tests.
*/
protected function createTestValidationResults(): void {
// Set up various validation results for the test checkers.
foreach ([1, 2] as $listener_number) {
// Set test validation results.
$this->testResults["checker_$listener_number"]['1 error'] = [
ValidationResult::createError(
[t("$listener_number:OMG 🚒. Your server is on 🔥!")],
t("$listener_number:Summary: 🔥")
),
];
$this->testResults["checker_$listener_number"]['1 error 1 warning'] = [
"$listener_number:error" => ValidationResult::createError(
[t("$listener_number:OMG 🔌. Some one unplugged the server! How is this site even running?")],
t("$listener_number:Summary: 🔥")
),
"$listener_number:warning" => ValidationResult::createWarning(
[t("$listener_number:It looks like it going to rain and your server is outside.")],
t("$listener_number:Warnings summary not displayed because only 1 warning message.")
),
];
$this->testResults["checker_$listener_number"]['2 errors 2 warnings'] = [
"$listener_number:errors" => ValidationResult::createError(
[
t("$listener_number:😬Your server is in a cloud, a literal cloud!☁️."),
t("$listener_number:😂PHP only has 32k memory."),
],
t("$listener_number:Errors summary displayed because more than 1 error message")
),
"$listener_number:warnings" => ValidationResult::createWarning(
[
t("$listener_number:Your server is a smart fridge. Will this work?"),
t("$listener_number:Your server case is duct tape!"),
],
t("$listener_number:Warnings summary displayed because more than 1 warning message.")
),
case SystemManager::REQUIREMENT_WARNING:
return ValidationResult::createWarning($messages, $summary);
];
$this->testResults["checker_$listener_number"]['2 warnings'] = [
ValidationResult::createWarning(
[
t("$listener_number:The universe could collapse in on itself in the next second, in which case automatic updates will not run."),
t("$listener_number:An asteroid could hit your server farm, which would also stop automatic updates from running."),
],
t("$listener_number:Warnings summary displayed because more than 1 warning message.")
),
];
$this->testResults["checker_$listener_number"]['1 warning'] = [
ValidationResult::createWarning(
[t("$listener_number:This is your one and only warning. You have been warned.")],
t("$listener_number:No need for this summary with only 1 warning.")
),
];
default:
throw new \InvalidArgumentException("$severity is an invalid value for \$severity; it must be SystemManager::REQUIREMENT_ERROR or SystemManager::REQUIREMENT_WARNING.");
}
}
......
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