RoleExistsConstraintValidatorTest.php

Namespace

Drupal\Tests\user\Kernel\Plugin\Validation\Constraint

File

core/modules/user/tests/src/Kernel/Plugin/Validation/Constraint/RoleExistsConstraintValidatorTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\user\Kernel\Plugin\Validation\Constraint;

use Drupal\Core\TypedData\DataDefinition;
use Drupal\KernelTests\KernelTestBase;
use Drupal\user\Entity\Role;
use Symfony\Component\Validator\Exception\UnexpectedTypeException;

/**
 * @group user
 * @group Validation
 *
 * @covers \Drupal\user\Plugin\Validation\Constraint\RoleExistsConstraint
 * @covers \Drupal\user\Plugin\Validation\Constraint\RoleExistsConstraintValidator
 */
class RoleExistsConstraintValidatorTest extends KernelTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'user',
  ];
  
  /**
   * Tests that the constraint validator will only work with strings.
   */
  public function testValueMustBeAString() : void {
    $definition = DataDefinition::create('any')->addConstraint('RoleExists');
    $this->expectException(UnexpectedTypeException::class);
    $this->expectExceptionMessage('Expected argument of type "string", "int" given');
    $this->container
      ->get('typed_data_manager')
      ->create($definition, 39)
      ->validate();
  }
  
  /**
   * Tests when the constraint's entityTypeId value is not valid.
   */
  public function testRoleExists() : void {
    // Validation error when role does not exist.
    $definition = DataDefinition::create('string')->addConstraint('RoleExists');
    $violations = $this->container
      ->get('typed_data_manager')
      ->create($definition, 'test_role')
      ->validate();
    $this->assertEquals('The role with id \'test_role\' does not exist.', $violations->get(0)
      ->getMessage());
    $this->assertCount(1, $violations);
    // Validation success when role exists.
    Role::create([
      'id' => 'test_role',
      'label' => 'Test role',
    ])->save();
    $definition = DataDefinition::create('string')->addConstraint('RoleExists');
    $violations = $this->container
      ->get('typed_data_manager')
      ->create($definition, 'test_role')
      ->validate();
    $this->assertCount(0, $violations);
  }

}

Classes

Title Deprecated Summary
RoleExistsConstraintValidatorTest @group user @group Validation

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.