FieldAttachOtherTestCase::testFieldAttachValidate

7 field.test FieldAttachOtherTestCase::testFieldAttachValidate()
8 field.test FieldAttachOtherTestCase::testFieldAttachValidate()

Test field_attach_validate().

Verify that field_attach_validate() invokes the correct hook_field_validate.

File

modules/field/tests/field.test, line 909
Tests for field.module.

Code

function testFieldAttachValidate() {
  $entity_type = 'test_entity';
  $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']);
  $langcode = LANGUAGE_NONE;

  // Set up values to generate errors
  $values = array();
  for ($delta = 0; $delta < $this->field['cardinality']; $delta++) {
    $values[$delta]['value'] = -1;
  }
  // Arrange for item 1 not to generate an error
  $values[1]['value'] = 1;
  $entity->{$this->field_name}[$langcode] = $values;

  try {
    field_attach_validate($entity_type, $entity);
  }
  catch (FieldValidationException $e) {
    $errors = $e->errors;
  }

  foreach ($values as $delta => $value) {
    if ($value['value'] != 1) {
      $this->assertIdentical($errors[$this->field_name][$langcode][$delta][0]['error'], 'field_test_invalid', "Error set on value $delta");
      $this->assertEqual(count($errors[$this->field_name][$langcode][$delta]), 1, "Only one error set on value $delta");
      unset($errors[$this->field_name][$langcode][$delta]);
    }
    else {
      $this->assertFalse(isset($errors[$this->field_name][$langcode][$delta]), "No error set on value $delta");
    }
  }
  $this->assertEqual(count($errors[$this->field_name][$langcode]), 0, 'No extraneous errors set');

  // Check that cardinality is validated.
  $entity->{$this->field_name}[$langcode] = $this->_generateTestFieldValues($this->field['cardinality'] + 1);
  try {
    field_attach_validate($entity_type, $entity);
  }
  catch (FieldValidationException $e) {
    $errors = $e->errors;
  }
  $this->assertEqual($errors[$this->field_name][$langcode][0][0]['error'], 'field_cardinality', t('Cardinality validation failed.'));

}
Login or register to post comments