X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=web%2Fcore%2Fmodules%2Ffield%2Ftests%2Fsrc%2FKernel%2FFieldValidationTest.php;fp=web%2Fcore%2Fmodules%2Ffield%2Ftests%2Fsrc%2FKernel%2FFieldValidationTest.php;h=92d33972f65d632f663d41882e50840805d084c3;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/field/tests/src/Kernel/FieldValidationTest.php b/web/core/modules/field/tests/src/Kernel/FieldValidationTest.php new file mode 100644 index 000000000..92d33972f --- /dev/null +++ b/web/core/modules/field/tests/src/Kernel/FieldValidationTest.php @@ -0,0 +1,97 @@ +entityType = 'entity_test'; + $this->bundle = 'entity_test'; + $this->createFieldWithStorage('', $this->entityType, $this->bundle); + + // Create an 'entity_test' entity. + $this->entity = entity_create($this->entityType, [ + 'type' => $this->bundle, + ]); + } + + /** + * Tests that the number of values is validated against the field cardinality. + */ + public function testCardinalityConstraint() { + $cardinality = $this->fieldTestData->field_storage->getCardinality(); + $entity = $this->entity; + + for ($delta = 0; $delta < $cardinality + 1; $delta++) { + $entity->{$this->fieldTestData->field_name}[] = ['value' => 1]; + } + + // Validate the field. + $violations = $entity->{$this->fieldTestData->field_name}->validate(); + + // Check that the expected constraint violations are reported. + $this->assertEqual(count($violations), 1); + $this->assertEqual($violations[0]->getPropertyPath(), ''); + $this->assertEqual($violations[0]->getMessage(), t('%name: this field cannot hold more than @count values.', ['%name' => $this->fieldTestData->field->getLabel(), '@count' => $cardinality])); + } + + /** + * Tests that constraints defined by the field type are validated. + */ + public function testFieldConstraints() { + $cardinality = $this->fieldTestData->field_storage->getCardinality(); + $entity = $this->entity; + + // The test is only valid if the field cardinality is greater than 2. + $this->assertTrue($cardinality >= 2); + + // Set up values for the field. + $expected_violations = []; + for ($delta = 0; $delta < $cardinality; $delta++) { + // All deltas except '1' have incorrect values. + if ($delta == 1) { + $value = 1; + } + else { + $value = -1; + $expected_violations[$delta . '.value'][] = t('%name does not accept the value -1.', ['%name' => $this->fieldTestData->field->getLabel()]); + } + $entity->{$this->fieldTestData->field_name}[] = $value; + } + + // Validate the field. + $violations = $entity->{$this->fieldTestData->field_name}->validate(); + + // Check that the expected constraint violations are reported. + $violations_by_path = []; + foreach ($violations as $violation) { + $violations_by_path[$violation->getPropertyPath()][] = $violation->getMessage(); + } + $this->assertEqual($violations_by_path, $expected_violations); + } + +}