From e1a0bf4e31c1dfef2c4e1ab7bbab5bc8e70b96fd Mon Sep 17 00:00:00 2001
From: TravisCarden <traviscarden@236758.no-reply.drupal.org>
Date: Fri, 11 Nov 2022 22:05:33 +0000
Subject: [PATCH] Issue #3320815 by TravisCarden: Make validation result
 comparison test messages more helpful

---
 .../tests/src/Traits/ValidationTestTrait.php  | 42 ++++++++++++++++---
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/package_manager/tests/src/Traits/ValidationTestTrait.php b/package_manager/tests/src/Traits/ValidationTestTrait.php
index d40a26084a..f0b6455ec1 100644
--- a/package_manager/tests/src/Traits/ValidationTestTrait.php
+++ b/package_manager/tests/src/Traits/ValidationTestTrait.php
@@ -12,18 +12,50 @@ trait ValidationTestTrait {
   /**
    * Asserts two validation result sets are equal.
    *
+   * This assertion is sensitive to the order of results. For example,
+   * ['a', 'b'] is not equal to ['b', 'a'].
+   *
    * @param \Drupal\package_manager\ValidationResult[] $expected_results
    *   The expected validation results.
    * @param \Drupal\package_manager\ValidationResult[] $actual_results
    *   The actual validation results.
    */
   protected function assertValidationResultsEqual(array $expected_results, array $actual_results): void {
-    $this->assertCount(count($expected_results), $actual_results);
+    $expected_results = $this->getValidationResultsAsArray($expected_results);
+    $actual_results = $this->getValidationResultsAsArray($actual_results);
+
+    self::assertSame($expected_results, $actual_results);
+  }
+
+  /**
+   * Gets an array representation of validation results for easy comparison.
+   *
+   * @param \Drupal\package_manager\ValidationResult[] $results
+   *   An array of validation results.
+   *
+   * @return array
+   *   An array of validation results details:
+   *   - severity: (int) The severity code.
+   *   - messages: (array) An array of strings.
+   *   - summary: (string|null) A summary string if there is one or NULL if not.
+   */
+  protected function getValidationResultsAsArray(array $results): array {
+    return array_values(array_map(static function (ValidationResult $result) {
+      $messages = array_map(static function ($message): string {
+        return (string) $message;
+      }, $result->getMessages());
+
+      $summary = $result->getSummary();
+      if ($summary !== NULL) {
+        $summary = (string) $result->getSummary();
+      }
 
-    foreach ($expected_results as $expected_result) {
-      $actual_result = array_shift($actual_results);
-      $this->assertTrue(ValidationResult::isEqual($expected_result, $actual_result));
-    }
+      return [
+        'severity' => $result->getSeverity(),
+        'messages' => $messages,
+        'summary' => $summary,
+      ];
+    }, $results));
   }
 
 }
-- 
GitLab