Mercurial > hg > isophonics-drupal-site
diff core/modules/field_ui/src/Tests/FieldUIDeleteTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/field_ui/src/Tests/FieldUIDeleteTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,127 @@ +<?php + +namespace Drupal\field_ui\Tests; + +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\simpletest\WebTestBase; +use Drupal\views\Entity\View; +use Drupal\views\Tests\ViewTestData; + +/** + * Tests deletion of a field and their dependencies in the UI. + * + * @group field_ui + */ +class FieldUIDeleteTest extends WebTestBase { + + use FieldUiTestTrait; + + /** + * Modules to install. + * + * @var array + */ + public static $modules = ['node', 'field_ui', 'field_test', 'block', 'field_test_views']; + + /** + * Test views to enable + * + * @var string[] + */ + public static $testViews = ['test_view_field_delete']; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->drupalPlaceBlock('system_breadcrumb_block'); + $this->drupalPlaceBlock('local_tasks_block'); + $this->drupalPlaceBlock('page_title_block'); + + // Create a test user. + $admin_user = $this->drupalCreateUser(['access content', 'administer content types', 'administer node fields', 'administer node form display', 'administer node display', 'administer users', 'administer account settings', 'administer user display', 'bypass node access']); + $this->drupalLogin($admin_user); + } + + /** + * Tests that deletion removes field storages and fields as expected. + */ + public 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(['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(['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), ['field_test_views']); + + $view = View::load('test_view_field_delete'); + $this->assertNotNull($view); + $this->assertTrue($view->status()); + // Test that the View depends on the field. + $dependencies = $view->getDependencies() + ['config' => []]; + $this->assertTrue(in_array("field.storage.node.$field_name", $dependencies['config'])); + + // 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 updated.')); + $this->assertText(t('View')); + $this->assertText('test_view_field_delete'); + + $xml = $this->cssSelect('#edit-entity-deletes'); + // Test that nothing is scheduled for deletion. + $this->assertFalse(isset($xml[0]), 'The field currently being deleted 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.'); + + // Test that the View isn't deleted and has been disabled. + $view = View::load('test_view_field_delete'); + $this->assertNotNull($view); + $this->assertFalse($view->status()); + // Test that the View no longer depends on the deleted field. + $dependencies = $view->getDependencies() + ['config' => []]; + $this->assertFalse(in_array("field.storage.node.$field_name", $dependencies['config'])); + } + +}