You are here

function FieldUIDeleteTest::testDeleteField in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/field_ui/src/Tests/FieldUIDeleteTest.php \Drupal\field_ui\Tests\FieldUIDeleteTest::testDeleteField()

Tests that deletion removes field storages and fields as expected.

File

core/modules/field_ui/src/Tests/FieldUIDeleteTest.php, line 56
Contains \Drupal\field_ui\Tests\FieldUIDeleteTest.

Class

FieldUIDeleteTest
Tests deletion of a field and their dependencies in the UI.

Namespace

Drupal\field_ui\Tests

Code

function testDeleteField() {
  $field_label = $this
    ->randomMachineName();
  $field_name_input = 'test';
  $field_name = 'field_test';

  // Create an additional node type.
  $type_name1 = strtolower($this
    ->randomMachineName(8)) . '_test';
  $type1 = $this
    ->drupalCreateContentType(array(
    'name' => $type_name1,
    'type' => $type_name1,
  ));
  $type_name1 = $type1
    ->id();

  // Create a new field.
  $bundle_path1 = 'admin/structure/types/manage/' . $type_name1;
  $this
    ->fieldUIAddNewField($bundle_path1, $field_name_input, $field_label);

  // Create an additional node type.
  $type_name2 = strtolower($this
    ->randomMachineName(8)) . '_test';
  $type2 = $this
    ->drupalCreateContentType(array(
    'name' => $type_name2,
    'type' => $type_name2,
  ));
  $type_name2 = $type2
    ->id();

  // Add a field to the second node type.
  $bundle_path2 = 'admin/structure/types/manage/' . $type_name2;
  $this
    ->fieldUIAddExistingField($bundle_path2, $field_name, $field_label);
  \Drupal::service('module_installer')
    ->install([
    'views',
  ]);
  ViewTestData::createTestViews(get_class($this), array(
    'field_test_views',
  ));

  // Check the config dependencies of the first field, the field storage must
  // not be shown as being deleted yet.
  $this
    ->drupalGet("{$bundle_path1}/fields/node.{$type_name1}.{$field_name}/delete");
  $this
    ->assertNoText(t('The listed configuration will be deleted.'));
  $this
    ->assertNoText(t('View'));
  $this
    ->assertNoText('test_view_field_delete');

  // Delete the first field.
  $this
    ->fieldUIDeleteField($bundle_path1, "node.{$type_name1}.{$field_name}", $field_label, $type_name1);

  // Check that the field was deleted.
  $this
    ->assertNull(FieldConfig::loadByName('node', $type_name1, $field_name), 'Field was deleted.');

  // Check that the field storage was not deleted
  $this
    ->assertNotNull(FieldStorageConfig::loadByName('node', $field_name), 'Field storage was not deleted.');

  // Check the config dependencies of the first field.
  $this
    ->drupalGet("{$bundle_path2}/fields/node.{$type_name2}.{$field_name}/delete");
  $this
    ->assertText(t('The listed configuration will be deleted.'));
  $this
    ->assertText(t('View'));
  $this
    ->assertText('test_view_field_delete');
  $xml = $this
    ->cssSelect('#edit-entity-deletes');

  // Remove the wrapping HTML.
  $this
    ->assertIdentical(FALSE, strpos($xml[0]
    ->asXml(), $field_label), 'The currently being deleted field is not shown in the entity deletions.');

  // Delete the second field.
  $this
    ->fieldUIDeleteField($bundle_path2, "node.{$type_name2}.{$field_name}", $field_label, $type_name2);

  // Check that the field was deleted.
  $this
    ->assertNull(FieldConfig::loadByName('node', $type_name2, $field_name), 'Field was deleted.');

  // Check that the field storage was deleted too.
  $this
    ->assertNull(FieldStorageConfig::loadByName('node', $field_name), 'Field storage was deleted.');
}