diff options
Diffstat (limited to 'modules/field/field.test')
-rw-r--r-- | modules/field/field.test | 81 |
1 files changed, 64 insertions, 17 deletions
diff --git a/modules/field/field.test b/modules/field/field.test index 917654721..64a13f323 100644 --- a/modules/field/field.test +++ b/modules/field/field.test @@ -116,39 +116,86 @@ class FieldAttachTestCase extends DrupalWebTestCase { */ function testFieldAttachSaveMissingData() { $entity_type = 'test_entity'; - $entity = field_test_create_stub_entity(0, 0, $this->instance['bundle']); + $entity_init = field_test_create_stub_entity(); // Insert: Field is missing. + $entity = clone($entity_init); field_attach_insert($entity_type, $entity); - field_attach_load($entity_type, array(0 => $entity)); - $this->assertEqual(count($entity->{$this->field_name}), 0, 'Missing field results in no inserts'); + + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $this->assertTrue(empty($entity->{$this->field_name}), t('Insert: missing field results in no value saved')); // Insert: Field is NULL. + field_cache_clear(); + $entity = clone($entity_init); $entity->{$this->field_name} = NULL; field_attach_insert($entity_type, $entity); - field_attach_load($entity_type, array(0 => $entity)); - $this->assertTrue($entity->{$this->field_name} == NULL, 'NULL field results in no inserts'); - // Add some real data - $value = 5; - $entity->{$this->field_name} = array(0 => array('value' => $value)); + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $this->assertTrue(empty($entity->{$this->field_name}), t('Insert: NULL field results in no value saved')); + + // Add some real data. + field_cache_clear(); + $entity = clone($entity_init); + $values = array(0 => array('value' => mt_rand(1, 127))); + $entity->{$this->field_name} = $values; field_attach_insert($entity_type, $entity); - $entity->{$this->field_name} = NULL; - field_attach_load($entity_type, array(0 => $entity)); - $this->assertTrue($entity->{$this->field_name}[0]['value'] == $value, 'Field data saved'); + + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $this->assertEqual($entity->{$this->field_name}, $values, t('Field data saved')); // Update: Field is missing. Data should survive. - unset($entity->{$this->field_name}); + field_cache_clear(); + $entity = clone($entity_init); field_attach_update($entity_type, $entity); - $entity->{$this->field_name} = NULL; - field_attach_load($entity_type, array(0 => $entity)); - $this->assertEqual($entity->{$this->field_name}[0]['value'], $value, 'Field missing data survives'); + + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $this->assertEqual($entity->{$this->field_name}, $values, t('Update: missing field leaves existing values in place')); // Update: Field is NULL. Data should be wiped. + field_cache_clear(); + $entity = clone($entity_init); $entity->{$this->field_name} = NULL; field_attach_update($entity_type, $entity); - field_attach_load($entity_type, array(0 => $entity)); - $this->assertTrue($entity->{$this->field_name} == NULL, 'NULL field update'); + + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $this->assertTrue(empty($entity->{$this->field_name}), t('Update: NULL field removes existing values')); + } + + /** + * Test insert with missing or NULL fields, with default value. + */ + function testFieldAttachSaveMissingDataDefaultValue() { + // Add a default value. + $this->instance['default_value_function'] = 'field_test_default_value'; + field_update_instance($this->instance); + + $entity_type = 'test_entity'; + $entity_init = field_test_create_stub_entity(); + + // Insert: Field is NULL. + $entity = clone($entity_init); + $entity->{$this->field_name} = NULL; + field_attach_insert($entity_type, $entity); + + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $this->assertTrue(empty($entity->{$this->field_name}), t('Insert: NULL field results in no value saved')); + + // Insert: Field is missing. + field_cache_clear(); + $entity = clone($entity_init); + field_attach_insert($entity_type, $entity); + + $entity = clone($entity_init); + field_attach_load($entity_type, array($entity->ftid => $entity)); + $values = field_test_default_value($entity_type, $entity, $this->field, $this->instance); + $this->assertEqual($entity->{$this->field_name}, $values, t('Insert: missing field results in default value saved')); } function testFieldAttachViewAndPreprocess() { |