Mercurial > hg > isophonics-drupal-site
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\field_ui\Tests; | |
4 | |
5 use Drupal\field\Entity\FieldConfig; | |
6 use Drupal\field\Entity\FieldStorageConfig; | |
7 use Drupal\simpletest\WebTestBase; | |
8 use Drupal\views\Entity\View; | |
9 use Drupal\views\Tests\ViewTestData; | |
10 | |
11 /** | |
12 * Tests deletion of a field and their dependencies in the UI. | |
13 * | |
14 * @group field_ui | |
15 */ | |
16 class FieldUIDeleteTest extends WebTestBase { | |
17 | |
18 use FieldUiTestTrait; | |
19 | |
20 /** | |
21 * Modules to install. | |
22 * | |
23 * @var array | |
24 */ | |
25 public static $modules = ['node', 'field_ui', 'field_test', 'block', 'field_test_views']; | |
26 | |
27 /** | |
28 * Test views to enable | |
29 * | |
30 * @var string[] | |
31 */ | |
32 public static $testViews = ['test_view_field_delete']; | |
33 | |
34 /** | |
35 * {@inheritdoc} | |
36 */ | |
37 protected function setUp() { | |
38 parent::setUp(); | |
39 | |
40 $this->drupalPlaceBlock('system_breadcrumb_block'); | |
41 $this->drupalPlaceBlock('local_tasks_block'); | |
42 $this->drupalPlaceBlock('page_title_block'); | |
43 | |
44 // Create a test user. | |
45 $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']); | |
46 $this->drupalLogin($admin_user); | |
47 } | |
48 | |
49 /** | |
50 * Tests that deletion removes field storages and fields as expected. | |
51 */ | |
52 public function testDeleteField() { | |
53 $field_label = $this->randomMachineName(); | |
54 $field_name_input = 'test'; | |
55 $field_name = 'field_test'; | |
56 | |
57 // Create an additional node type. | |
58 $type_name1 = strtolower($this->randomMachineName(8)) . '_test'; | |
59 $type1 = $this->drupalCreateContentType(['name' => $type_name1, 'type' => $type_name1]); | |
60 $type_name1 = $type1->id(); | |
61 | |
62 // Create a new field. | |
63 $bundle_path1 = 'admin/structure/types/manage/' . $type_name1; | |
64 $this->fieldUIAddNewField($bundle_path1, $field_name_input, $field_label); | |
65 | |
66 // Create an additional node type. | |
67 $type_name2 = strtolower($this->randomMachineName(8)) . '_test'; | |
68 $type2 = $this->drupalCreateContentType(['name' => $type_name2, 'type' => $type_name2]); | |
69 $type_name2 = $type2->id(); | |
70 | |
71 // Add a field to the second node type. | |
72 $bundle_path2 = 'admin/structure/types/manage/' . $type_name2; | |
73 $this->fieldUIAddExistingField($bundle_path2, $field_name, $field_label); | |
74 | |
75 \Drupal::service('module_installer')->install(['views']); | |
76 ViewTestData::createTestViews(get_class($this), ['field_test_views']); | |
77 | |
78 $view = View::load('test_view_field_delete'); | |
79 $this->assertNotNull($view); | |
80 $this->assertTrue($view->status()); | |
81 // Test that the View depends on the field. | |
82 $dependencies = $view->getDependencies() + ['config' => []]; | |
83 $this->assertTrue(in_array("field.storage.node.$field_name", $dependencies['config'])); | |
84 | |
85 // Check the config dependencies of the first field, the field storage must | |
86 // not be shown as being deleted yet. | |
87 $this->drupalGet("$bundle_path1/fields/node.$type_name1.$field_name/delete"); | |
88 $this->assertNoText(t('The listed configuration will be deleted.')); | |
89 $this->assertNoText(t('View')); | |
90 $this->assertNoText('test_view_field_delete'); | |
91 | |
92 // Delete the first field. | |
93 $this->fieldUIDeleteField($bundle_path1, "node.$type_name1.$field_name", $field_label, $type_name1); | |
94 | |
95 // Check that the field was deleted. | |
96 $this->assertNull(FieldConfig::loadByName('node', $type_name1, $field_name), 'Field was deleted.'); | |
97 // Check that the field storage was not deleted | |
98 $this->assertNotNull(FieldStorageConfig::loadByName('node', $field_name), 'Field storage was not deleted.'); | |
99 | |
100 // Check the config dependencies of the first field. | |
101 $this->drupalGet("$bundle_path2/fields/node.$type_name2.$field_name/delete"); | |
102 $this->assertText(t('The listed configuration will be updated.')); | |
103 $this->assertText(t('View')); | |
104 $this->assertText('test_view_field_delete'); | |
105 | |
106 $xml = $this->cssSelect('#edit-entity-deletes'); | |
107 // Test that nothing is scheduled for deletion. | |
108 $this->assertFalse(isset($xml[0]), 'The field currently being deleted is not shown in the entity deletions.'); | |
109 | |
110 // Delete the second field. | |
111 $this->fieldUIDeleteField($bundle_path2, "node.$type_name2.$field_name", $field_label, $type_name2); | |
112 | |
113 // Check that the field was deleted. | |
114 $this->assertNull(FieldConfig::loadByName('node', $type_name2, $field_name), 'Field was deleted.'); | |
115 // Check that the field storage was deleted too. | |
116 $this->assertNull(FieldStorageConfig::loadByName('node', $field_name), 'Field storage was deleted.'); | |
117 | |
118 // Test that the View isn't deleted and has been disabled. | |
119 $view = View::load('test_view_field_delete'); | |
120 $this->assertNotNull($view); | |
121 $this->assertFalse($view->status()); | |
122 // Test that the View no longer depends on the deleted field. | |
123 $dependencies = $view->getDependencies() + ['config' => []]; | |
124 $this->assertFalse(in_array("field.storage.node.$field_name", $dependencies['config'])); | |
125 } | |
126 | |
127 } |