Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ValidationResultTest.php 4.84 KiB
<?php
namespace Drupal\Tests\package_manager\Unit;
use Drupal\package_manager\ValidationResult;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\system\SystemManager;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\package_manager\ValidationResult
*
* @group package_manager
*/
class ValidationResultTest extends UnitTestCase {
/**
* @covers ::createWarning
*
* @dataProvider providerValidConstructorArguments
*/
public function testCreateWarningResult(array $messages, ?string $summary): void {
$summary = $summary ? t($summary) : NULL;
$result = ValidationResult::createWarning($messages, $summary);
$this->assertResultValid($result, $messages, $summary, SystemManager::REQUIREMENT_WARNING);
}
/**
* @covers ::getOverallSeverity
*/
public function testOverallSeverity(): void {
// An error and a warning should be counted as an error.
$results = [
ValidationResult::createError(['Boo!']),
ValidationResult::createWarning(['Moo!']),
];
$this->assertSame(SystemManager::REQUIREMENT_ERROR, ValidationResult::getOverallSeverity($results));
// If there are no results, but no errors, the results should be counted as
// a warning.
array_shift($results);
$this->assertSame(SystemManager::REQUIREMENT_WARNING, ValidationResult::getOverallSeverity($results));
// If there are just plain no results, we should get REQUIREMENT_OK.
array_shift($results);
$this->assertSame(SystemManager::REQUIREMENT_OK, ValidationResult::getOverallSeverity($results));
}
/**
* @covers ::createError
*
* @dataProvider providerValidConstructorArguments
*/
public function testCreateErrorResult(array $messages, ?string $summary): void {
$summary = $summary ? t($summary) : NULL;
$result = ValidationResult::createError($messages, $summary);
$this->assertResultValid($result, $messages, $summary, SystemManager::REQUIREMENT_ERROR);
}
/**
* @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(array $messages, string $expected_exception_message): void {
$this->expectException(\InvalidArgumentException::class);
$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(array $messages, string $expected_exception_message): void {
$this->expectException(\InvalidArgumentException::class);
$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.',
],
];
}
/**
* Data provider for testCreateWarningResult().
*
* @return mixed[]
* The test cases.
*/
public function providerValidConstructorArguments(): array {
return [
'1 message no summary' => [
'messages' => ['Something is wrong'],
'summary' => NULL,
],
'2 messages has summary' => [
'messages' => ['Something is wrong', 'Something else is also wrong'],
'summary' => 'This sums it up.',
],
];
}
/**
* Asserts a check result is valid.
*
* @param \Drupal\package_manager\ValidationResult $result
* The validation result to check.
* @param array $expected_messages
* The expected messages.
* @param \Drupal\Core\StringTranslation\TranslatableMarkup|null $summary
* The expected summary or NULL if not summary is expected.
* @param int $severity
* The severity.
*/
protected function assertResultValid(ValidationResult $result, array $expected_messages, ?TranslatableMarkup $summary, int $severity): void {
$this->assertSame($expected_messages, $result->getMessages());
if ($summary === NULL) {
$this->assertNull($result->getSummary());
}
else {
$this->assertSame($summary->getUntranslatedString(), $result->getSummary()
->getUntranslatedString());
}
$this->assertSame($severity, $result->getSeverity());
}
}