class StringEqualsConcatenatedValuesConstraintValidatorTest

Tests the StringEqualsConcatenatedValues validator.

Attributes

#[Group('Validation')] #[CoversClass(StringEqualsConcatenatedValuesConstraint::class)] #[CoversClass(StringEqualsConcatenatedValuesConstraintValidator::class)] #[RunTestsInSeparateProcesses]

Hierarchy

Expanded class hierarchy of StringEqualsConcatenatedValuesConstraintValidatorTest

File

core/tests/Drupal/KernelTests/Core/Validation/StringEqualsConcatenatedValuesConstraintValidatorTest.php, line 18

Namespace

Drupal\KernelTests\Core\Validation
View source
class StringEqualsConcatenatedValuesConstraintValidatorTest extends KernelTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'config_test',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->installConfig('config_test');
  }
  
  /**
   * Tests basic validation of concatenated config values.
   *
   * @see \Drupal\Core\Validation\Plugin\Validation\Constraint\StringEqualsConcatenatedValuesConstraint
   */
  public function testStringEqualsConcatenatedValuesConstraint() : void {
    /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config_manager */
    $typed_config_manager = \Drupal::service('config.typed');
    /** @var \Drupal\Core\Config\Schema\TypedConfigInterface $typed_config */
    $typed_config = $typed_config_manager->get('config_test.validation');
    // Test valid names.
    $typed_config->get('string_concat_values')
      ->setValue('localhost.llama');
    $this->assertCount(0, $typed_config->validate());
    // Test invalid names.
    $typed_config->get('string_concat_values')
      ->setValue('drupal.kitten');
    $constraintViolationList = $typed_config->validate();
    $this->assertCount(1, $constraintViolationList);
    $this->assertSame("Expected 'localhost.llama', not 'drupal.kitten'. Format: '<%parent.string_concat_value_1>.<%parent.string_concat_value_2>'.", (string) $constraintViolationList->get(0)
      ->getMessage());
  }
  
  /**
   * Tests that validation fails if the schema references missing properties.
   *
   * @see \Drupal\Core\Validation\Plugin\Validation\Constraint\StringEqualsConcatenatedValuesConstraint
   */
  public function testInvalidReferenceToProperties() : void {
    $this->expectExceptionMessage('Schema errors for config_test.validation with the following errors: 0 [string_concat_values_invalid] This validation constraint is configured to inspect the properties <em class="placeholder">%parent.invalid, %parent.reference</em>, but some do not exist: <em class="placeholder">%parent.invalid, %parent.reference</em>.');
    /** @var \Drupal\Core\Config\Config $editable_config */
    $editable_config = \Drupal::configFactory()->getEditable('config_test.validation');
    $editable_config->set('string_concat_values_invalid', 'test');
    $editable_config->save();
  }
  
  /**
   * Tests that validation fails if reserved characters are not replaced.
   *
   * @see \Drupal\Core\Validation\Plugin\Validation\Constraint\StringEqualsConcatenatedValuesConstraint
   */
  public function testReservedCharacters() : void {
    /** @var \Drupal\Core\Config\Config $editable_config */
    $editable_config = \Drupal::configFactory()->getEditable('config_test.validation');
    $editable_config->set('string_concat_value_1', 'test|||value');
    $editable_config->set('string_concat_values', 'test>>>value.llama');
    $editable_config->save();
    $this->expectExceptionMessage('Schema errors for config_test.validation with the following errors: 0 [string_concat_values] Expected 'test>>>value.llama', not 'test|||value.llama'. Format: '<%parent.string_concat_value_1>.<%parent.string_concat_value_2>'.');
    $editable_config->set('string_concat_values', 'test|||value.llama');
    $editable_config->save();
  }
  
  /**
   * Tests concatenation of basic schema value types.
   *
   * @see \Drupal\Core\Validation\Plugin\Validation\Constraint\StringEqualsConcatenatedValuesConstraint
   */
  public function testValueTypes($first_value, $second_value, $result, $invalid_result) : void {
    $editable_config = \Drupal::configFactory()->getEditable('config_test.validation');
    $editable_config->set('string_concat_value_1', $first_value);
    $editable_config->set('string_concat_value_2', $second_value);
    $editable_config->set('string_concat_values', $result);
    $editable_config->save();
    $this->expectExceptionMessage("Schema errors for config_test.validation with the following errors: 0 [string_concat_values] Expected '{$result}', not '{$invalid_result}'. Format: '<%parent.string_concat_value_1>.<%parent.string_concat_value_2>'");
    $editable_config->set('string_concat_values', $invalid_result);
    $editable_config->save();
  }
  
  /**
   * Data provider for testValueTypes().
   */
  public static function valueTypesProvider() : array {
    return [
      [
        'part1',
        'part2',
        'part1.part2',
        'part1-part2',
      ],
      [
        123,
        456,
        '123.456',
        '123-456',
      ],
      [
        TRUE,
        FALSE,
        '1.',
        '1-0',
      ],
    ];
  }

}

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