You are here

public function AllowedValuesConstraintValidatorTest::testValidationCallback in Drupal 10

Same name and namespace in other branches
  1. 8 core/tests/Drupal/KernelTests/Core/TypedData/AllowedValuesConstraintValidatorTest.php \Drupal\KernelTests\Core\TypedData\AllowedValuesConstraintValidatorTest::testValidationCallback()
  2. 9 core/tests/Drupal/KernelTests/Core/TypedData/AllowedValuesConstraintValidatorTest.php \Drupal\KernelTests\Core\TypedData\AllowedValuesConstraintValidatorTest::testValidationCallback()

Tests the AllowedValuesConstraintValidator with callbacks.

File

core/tests/Drupal/KernelTests/Core/TypedData/AllowedValuesConstraintValidatorTest.php, line 63

Class

AllowedValuesConstraintValidatorTest
Tests AllowedValues validation constraint with both valid and invalid values.

Namespace

Drupal\KernelTests\Core\TypedData

Code

public function testValidationCallback() {

  // Create a definition that specifies some AllowedValues and a callback.
  // This tests that callbacks have a higher priority than a supplied list of
  // values and can be used to coerce the value to the correct type.
  $definition = DataDefinition::create('string')
    ->addConstraint('AllowedValues', [
    'choices' => [
      1,
      2,
      3,
    ],
    'callback' => [
      static::class,
      'allowedValueCallback',
    ],
  ]);
  $typed_data = $this->typedData
    ->create($definition, 'a');
  $violations = $typed_data
    ->validate();
  $this
    ->assertEquals(0, $violations
    ->count(), 'Validation passed for correct value.');
  $typed_data = $this->typedData
    ->create($definition, 1);
  $violations = $typed_data
    ->validate();
  $this
    ->assertEquals(0, $violations
    ->count(), 'Validation passed for value that will be cast to the correct type.');
  $typed_data = $this->typedData
    ->create($definition, 2);
  $violations = $typed_data
    ->validate();
  $this
    ->assertEquals(1, $violations
    ->count(), 'Validation failed for incorrect value.');
  $typed_data = $this->typedData
    ->create($definition, 'd');
  $violations = $typed_data
    ->validate();
  $this
    ->assertEquals(1, $violations
    ->count(), 'Validation failed for incorrect value.');
  $typed_data = $this->typedData
    ->create($definition, 0);
  $violations = $typed_data
    ->validate();
  $this
    ->assertEquals(1, $violations
    ->count(), 'Validation failed for incorrect value.');
}