diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php index 82dc7da..a4eff05 100644 --- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php @@ -174,34 +174,46 @@ function testDeleteFieldInstance() { // Make sure the other field instance is not deleted. $another_instance = field_read_instance('entity_test', $another_instance_definition['field_name'], $another_instance_definition['bundle']); $this->assertTrue(!empty($another_instance) && empty($another_instance['deleted']), 'A non-deleted field instance is not marked for deletion.'); + } - // Make sure the field is deleted when its last instance is deleted. - $another_instance->delete(); - $deleted_fields = \Drupal::state()->get('field.field.deleted'); - $this->assertTrue(isset($deleted_fields[$another_instance['field_id']]), 'A deleted field is marked for deletion.'); - $field = field_read_field($another_instance['entity_type'], $another_instance['field_name']); - $this->assertFalse($field, 'The field marked to be deleted is not found anymore in the configuration.'); - - - - + /** + * Tests the cross deletion behavior between fields and instances. + */ + function testDeleteFieldInstanceCrossDeletion() { + $instance_definition_2 = $this->instance_definition; + $instance_definition_2['bundle'] .= '_another_bundle'; - entity_create('field_entity', $this->field_definition)->save(); + // Check that deletion of a field deletes its instances. + $field = $this->field; entity_create('field_instance', $this->instance_definition)->save(); - $field = field_info_field($this->field_definition['entity_type'], $this->field_definition['name']); + entity_create('field_instance', $instance_definition_2)->save(); $field->delete(); + $this->assertFalse(field_info_instance('entity_test', $this->instance_definition['bundle'], $field->name)); + $this->assertFalse(field_info_instance('entity_test', $instance_definition_2['bundle'], $field->name)); - entity_create('field_entity', $this->field_definition)->save(); - $instance_1 = entity_create('field_instance', $this->instance_definition); - $instance_1->save(); - $another_instance_definition = $this->instance_definition; - $another_instance_definition['bundle'] .= '_another_bundle'; - $instance_2 = entity_create('field_instance', $another_instance_definition); + // Chack that deletion of the last instance deletes the field. + $field = entity_create('field_entity', $this->field_definition); + $field->save(); + $instance = entity_create('field_instance', $this->instance_definition); + $instance->save(); + $instance_2 = entity_create('field_instance', $instance_definition_2); + $instance_2->save(); + $instance->delete(); + $this->assertTrue(field_info_field('entity_test', $field->name)); + $instance_2->delete(); + $this->assertFalse(field_info_field('entity_test', $field->name)); + + // Check that deletion of all instances of the same field simultaneously + // deletes the field. + $field = entity_create('field_entity', $this->field_definition); + $field->save(); + $instance = entity_create('field_instance', $this->instance_definition); + $instance->save(); + $instance_2 = entity_create('field_instance', $instance_definition_2); $instance_2->save(); $instance_controller = $this->container->get('entity.manager')->getStorageController('field_instance'); - $instance_controller->delete(array($instance_1, $instance_2)); - $field = field_info_field($this->field_definition['entity_type'], $this->field_definition['name']); - $this->assertFalse($field); + $instance_controller->delete(array($instance, $instance_2)); + $this->assertFalse(field_info_field('entity_test', $field->name)); } }