ClassResolverConstraintValidatorTest.php
Namespace
Drupal\KernelTests\Core\TypedDataFile
-
core/
tests/ Drupal/ KernelTests/ Core/ TypedData/ ClassResolverConstraintValidatorTest.php
View source
<?php
declare (strict_types=1);
namespace Drupal\KernelTests\Core\TypedData;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\TypedData\TypedDataManagerInterface;
use Drupal\KernelTests\KernelTestBase;
/**
* Tests ClassResolver validation constraint with both valid and invalid values.
*
* @covers \Drupal\Core\Validation\Plugin\Validation\Constraint\ClassResolverConstraintValidator
* @group Validation
*/
class ClassResolverConstraintValidatorTest extends KernelTestBase {
/**
* The typed data manager to use.
*
* @var \Drupal\Core\TypedData\TypedDataManager
*/
protected TypedDataManagerInterface $typedData;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$this->typedData = $this->container
->get('typed_data_manager');
$this->container
->set('test.service', new class {
/**
* Dummy method to return TRUE.
*
* @return bool
* TRUE.
*/
public function returnTrue() : bool {
return TRUE;
}
/**
* Dummy method to return FALSE.
*
* @return bool
* FALSE.
*/
public function returnFalse() : bool {
return FALSE;
}
/**
* Dummy method to return a truthy value.
*
* @return string
* A string that evaluates to TRUE.
*/
public function returnNotTrue() : string {
return 'true';
}
});
}
/**
* Data provider for service validation test cases.
*/
public static function provideServiceValidationCases() : array {
return [
'false result' => [
'method' => 'returnFalse',
'expected_violations' => 1,
'message' => 'Validation failed when returning FALSE.',
'expected_violation_message' => 'Calling \'returnFalse\' method with value \'1\' on \'test.service\' evaluated as invalid.',
],
'true result' => [
'method' => 'returnTrue',
'expected_violations' => 0,
'message' => 'Validation succeeds when returning TRUE.',
],
'truthy result' => [
'method' => 'returnNotTrue',
'expected_violations' => 1,
'message' => 'Validation fails when returning \'true\'.',
'expected_violation_message' => 'Calling \'returnNotTrue\' method with value \'1\' on \'test.service\' evaluated as invalid.',
],
];
}
/**
* @dataProvider provideServiceValidationCases
*/
public function testValidationForService(string $method, int $expected_violations, string $message, ?string $expected_violation_message = NULL) : void {
$definition = DataDefinition::create('integer')->addConstraint('ClassResolver', [
'classOrService' => 'test.service',
'method' => $method,
]);
$typed_data = $this->typedData
->create($definition, 1);
$violations = $typed_data->validate();
$this->assertEquals($expected_violations, $violations->count(), $message);
if ($expected_violation_message) {
$this->assertEquals($expected_violation_message, $violations->get(0)
->getMessage());
}
}
/**
* Test missing method case.
*
* Tests that the ClassResolver constraint throws an exception when the
* method does not exist.
*/
public function testNonExistingMethod() : void {
$definition = DataDefinition::create('integer')->addConstraint('ClassResolver', [
'classOrService' => 'test.service',
'method' => 'missingMethod',
]);
$typed_data = $this->typedData
->create($definition, 1);
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage('The method "missingMethod" does not exist on the service "test.service".');
$typed_data->validate();
}
/**
* Test missing class case.
*
* Tests that the ClassResolver constraint throws an exception when the
* class does not exist.
*/
public function testNonExistingClass() : void {
$definition = DataDefinition::create('integer')->addConstraint('ClassResolver', [
'classOrService' => '\\Drupal\\NonExisting\\Class',
'method' => 'boo',
]);
$typed_data = $this->typedData
->create($definition, 1);
$this->expectExceptionMessage('Class "\\Drupal\\NonExisting\\Class" does not exist.');
$typed_data->validate();
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
ClassResolverConstraintValidatorTest | Tests ClassResolver validation constraint with both valid and invalid values. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.