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