From 328a5a09e9709ca1e0458faf60ad494537614c11 Mon Sep 17 00:00:00 2001 From: "Theresa.Grannum" <theresa.grannum@3688861.no-reply.drupal.org> Date: Mon, 15 Aug 2022 20:07:05 +0000 Subject: [PATCH] Issue #3302673 by Theresa.Grannum, tedbow, phenaproxima: It should not be possible to create a validation result with no information --- package_manager/src/ValidationResult.php | 3 ++ .../tests/src/Unit/ValidationResultTest.php | 45 ++++++++++++++++--- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/package_manager/src/ValidationResult.php b/package_manager/src/ValidationResult.php index ddfa728715..f5c9b51c02 100644 --- a/package_manager/src/ValidationResult.php +++ b/package_manager/src/ValidationResult.php @@ -43,6 +43,9 @@ final class ValidationResult { * The errors summary. */ private function __construct(int $severity, array $messages, ?TranslatableMarkup $summary = NULL) { + if (empty($messages)) { + throw new \InvalidArgumentException('At least one message is required.'); + } if (count($messages) > 1 && !$summary) { throw new \InvalidArgumentException('If more than one message is provided, a summary is required.'); } diff --git a/package_manager/tests/src/Unit/ValidationResultTest.php b/package_manager/tests/src/Unit/ValidationResultTest.php index ad994450bf..67f08161fb 100644 --- a/package_manager/tests/src/Unit/ValidationResultTest.php +++ b/package_manager/tests/src/Unit/ValidationResultTest.php @@ -38,20 +38,53 @@ class ValidationResultTest extends UnitTestCase { /** * @covers ::createWarning + * + * @param string[] $messages + * The warning messages of the validation result. + * @param string $expected_exception_message + * The expected exception message. + * + * @dataProvider providerCreateExceptions */ - public function testCreateWarningResultException(): void { + public function testCreateWarningResultException(array $messages, string $expected_exception_message): void { $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('If more than one message is provided, a summary is required.'); - ValidationResult::createWarning(['Something is wrong', 'Something else is also wrong'], NULL); + $this->expectExceptionMessage($expected_exception_message); + ValidationResult::createWarning($messages, NULL); } /** * @covers ::createError + * + * @param string[] $messages + * The error messages of the validation result. + * @param string $expected_exception_message + * The expected exception message. + * + * @dataProvider providerCreateExceptions */ - public function testCreateErrorResultException(): void { + public function testCreateErrorResultException(array $messages, string $expected_exception_message): void { $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('If more than one message is provided, a summary is required.'); - ValidationResult::createError(['Something is wrong', 'Something else is also wrong'], NULL); + $this->expectExceptionMessage($expected_exception_message); + ValidationResult::createError($messages, NULL); + } + + /** + * Data provider for test methods that test create exceptions. + * + * @return array[] + * The test cases. + */ + public function providerCreateExceptions(): array { + return [ + '2 messages, no summary' => [ + ['Something is wrong', 'Something else is also wrong'], + 'If more than one message is provided, a summary is required.', + ], + 'no messages' => [ + [], + 'At least one message is required.', + ], + ]; } /** -- GitLab