Commit e1a0bf4e authored by Travis Carden's avatar Travis Carden Committed by Ted Bowman
Browse files

Issue #3320815 by TravisCarden: Make validation result comparison test messages more helpful

parent 18d1ca72
Loading
Loading
Loading
Loading
+36 −4
Changes for package_manager/tests/src/Traits/ValidationTestTrait.php: 36 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -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);

    foreach ($expected_results as $expected_result) {
      $actual_result = array_shift($actual_results);
      $this->assertTrue(ValidationResult::isEqual($expected_result, $actual_result));
    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();
      }

      return [
        'severity' => $result->getSeverity(),
        'messages' => $messages,
        'summary' => $summary,
      ];
    }, $results));
  }

}