From 3d0c65a8f47fc13a64a17a1c4ae7c1c3655f7263 Mon Sep 17 00:00:00 2001 From: webchick Date: Fri, 24 Jan 2014 22:00:57 -0800 Subject: [PATCH] Issue #2142989 by fago, damiankloip, stefan.r, mariancalinro: Test for BundleConstraintValidator. --- .../Constraint/BundleConstraintValidator.php | 2 +- .../Entity/BundleConstraintValidatorTest.php | 82 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 core/modules/system/lib/Drupal/system/Tests/Entity/BundleConstraintValidatorTest.php diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/BundleConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/BundleConstraintValidator.php index 876c1e3729c..196dab96693 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/BundleConstraintValidator.php +++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/BundleConstraintValidator.php @@ -20,7 +20,7 @@ class BundleConstraintValidator extends ConstraintValidator { */ public function validate($entity, Constraint $constraint) { if (!empty($entity) && !in_array($entity->bundle(), $constraint->getBundleOption())) { - $this->context->addViolation($constraint->message, array('%bundle', implode(', ', $constraint->getBundleOption()))); + $this->context->addViolation($constraint->message, array('%bundle' => implode(', ', $constraint->getBundleOption()))); } } } diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/BundleConstraintValidatorTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/BundleConstraintValidatorTest.php new file mode 100644 index 00000000000..b26b0fc8bd0 --- /dev/null +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/BundleConstraintValidatorTest.php @@ -0,0 +1,82 @@ + 'Entity bundle constraint', + 'description' => 'Tests validation constraints for BundleConstraintValidator.', + 'group' => 'Validation', + ); + } + + public function setUp() { + parent::setUp(); + $this->typedData = $this->container->get('typed_data_manager'); + } + + /** + * Tests bundle constraint validation. + */ + public function testValidation() { + // Test with multiple values. + $this->assertValidation(array('foo', 'bar')); + // Test with a single string value as well. + $this->assertValidation('foo'); + } + + /** + * Executes the BundleConstraintValidator test for a given bundle. + * + * @param string|array $bundle + * Bundle/bundles to use as constraint option. + */ + protected function assertValidation($bundle) { + // Create a typed data definition with a Bundle constraint. + $definition = DataDefinition::create('entity_reference') + ->addConstraint('Bundle', $bundle); + + // Test the validation. + $node = $this->container->get('entity.manager')->getStorageController('node')->create(array('type' => 'foo')); + + $typed_data = $this->typedData->create($definition, $node); + $violations = $typed_data->validate(); + $this->assertEqual($violations->count(), 0, 'Validation passed for correct value.'); + + // Test the validation when an invalid value is passed. + $page_node = $this->container->get('entity.manager')->getStorageController('node')->create(array('type' => 'baz')); + + $typed_data = $this->typedData->create($definition, $page_node); + $violations = $typed_data->validate(); + $this->assertEqual($violations->count(), 1, 'Validation failed for incorrect value.'); + + // Make sure the information provided by a violation is correct. + $violation = $violations[0]; + $this->assertEqual($violation->getMessage(), t('The entity must be of bundle %bundle.', array('%bundle' => implode(', ', (array) $bundle))), 'The message for invalid value is correct.'); + $this->assertEqual($violation->getRoot(), $typed_data, 'Violation root is correct.'); + $this->assertEqual($violation->getInvalidValue(), $page_node, 'The invalid value is set correctly in the violation.'); + } +}