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