Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\field\Tests;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\field\Entity\FieldConfig;
|
Chris@0
|
6 use Drupal\simpletest\WebTestBase;
|
Chris@0
|
7 use Drupal\field\Entity\FieldStorageConfig;
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * Tests the behavior of a field module after being disabled and re-enabled.
|
Chris@0
|
11 *
|
Chris@0
|
12 * @group field
|
Chris@0
|
13 */
|
Chris@0
|
14 class reEnableModuleFieldTest extends WebTestBase {
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Modules to enable.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @var array
|
Chris@0
|
20 */
|
Chris@0
|
21 public static $modules = [
|
Chris@0
|
22 'field',
|
Chris@0
|
23 'node',
|
Chris@0
|
24 // We use telephone module instead of test_field because test_field is
|
Chris@0
|
25 // hidden and does not display on the admin/modules page.
|
Chris@0
|
26 'telephone'
|
Chris@0
|
27 ];
|
Chris@0
|
28
|
Chris@0
|
29 protected function setUp() {
|
Chris@0
|
30 parent::setUp();
|
Chris@0
|
31
|
Chris@0
|
32 $this->drupalCreateContentType(['type' => 'article']);
|
Chris@0
|
33 $this->drupalLogin($this->drupalCreateUser([
|
Chris@0
|
34 'create article content',
|
Chris@0
|
35 'edit own article content',
|
Chris@0
|
36 ]));
|
Chris@0
|
37 }
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * Test the behavior of a field module after being disabled and re-enabled.
|
Chris@0
|
41 *
|
Chris@0
|
42 * @see field_system_info_alter()
|
Chris@0
|
43 */
|
Chris@0
|
44 public function testReEnabledField() {
|
Chris@0
|
45
|
Chris@0
|
46 // Add a telephone field to the article content type.
|
Chris@0
|
47 $field_storage = FieldStorageConfig::create([
|
Chris@0
|
48 'field_name' => 'field_telephone',
|
Chris@0
|
49 'entity_type' => 'node',
|
Chris@0
|
50 'type' => 'telephone',
|
Chris@0
|
51 ]);
|
Chris@0
|
52 $field_storage->save();
|
Chris@0
|
53 FieldConfig::create([
|
Chris@0
|
54 'field_storage' => $field_storage,
|
Chris@0
|
55 'bundle' => 'article',
|
Chris@0
|
56 'label' => 'Telephone Number',
|
Chris@0
|
57 ])->save();
|
Chris@0
|
58
|
Chris@0
|
59 entity_get_form_display('node', 'article', 'default')
|
Chris@0
|
60 ->setComponent('field_telephone', [
|
Chris@0
|
61 'type' => 'telephone_default',
|
Chris@0
|
62 'settings' => [
|
Chris@0
|
63 'placeholder' => '123-456-7890',
|
Chris@0
|
64 ],
|
Chris@0
|
65 ])
|
Chris@0
|
66 ->save();
|
Chris@0
|
67
|
Chris@0
|
68 entity_get_display('node', 'article', 'default')
|
Chris@0
|
69 ->setComponent('field_telephone', [
|
Chris@0
|
70 'type' => 'telephone_link',
|
Chris@0
|
71 'weight' => 1,
|
Chris@0
|
72 ])
|
Chris@0
|
73 ->save();
|
Chris@0
|
74
|
Chris@0
|
75 // Display the article node form and verify the telephone widget is present.
|
Chris@0
|
76 $this->drupalGet('node/add/article');
|
Chris@0
|
77 $this->assertFieldByName("field_telephone[0][value]", '', 'Widget found.');
|
Chris@0
|
78
|
Chris@0
|
79 // Submit an article node with a telephone field so data exist for the
|
Chris@0
|
80 // field.
|
Chris@0
|
81 $edit = [
|
Chris@0
|
82 'title[0][value]' => $this->randomMachineName(),
|
Chris@0
|
83 'field_telephone[0][value]' => "123456789",
|
Chris@0
|
84 ];
|
Chris@0
|
85 $this->drupalPostForm(NULL, $edit, t('Save'));
|
Chris@0
|
86 $this->assertRaw('<a href="tel:123456789">');
|
Chris@0
|
87
|
Chris@0
|
88 // Test that the module can't be uninstalled from the UI while there is data
|
Chris@0
|
89 // for it's fields.
|
Chris@0
|
90 $admin_user = $this->drupalCreateUser(['access administration pages', 'administer modules']);
|
Chris@0
|
91 $this->drupalLogin($admin_user);
|
Chris@0
|
92 $this->drupalGet('admin/modules/uninstall');
|
Chris@0
|
93 $this->assertText("The Telephone number field type is used in the following field: node.field_telephone");
|
Chris@0
|
94
|
Chris@0
|
95 // Add another telephone field to a different entity type in order to test
|
Chris@0
|
96 // the message for the case when multiple fields are blocking the
|
Chris@0
|
97 // uninstallation of a module.
|
Chris@0
|
98 $field_storage2 = entity_create('field_storage_config', [
|
Chris@0
|
99 'field_name' => 'field_telephone_2',
|
Chris@0
|
100 'entity_type' => 'user',
|
Chris@0
|
101 'type' => 'telephone',
|
Chris@0
|
102 ]);
|
Chris@0
|
103 $field_storage2->save();
|
Chris@0
|
104 FieldConfig::create([
|
Chris@0
|
105 'field_storage' => $field_storage2,
|
Chris@0
|
106 'bundle' => 'user',
|
Chris@0
|
107 'label' => 'User Telephone Number',
|
Chris@0
|
108 ])->save();
|
Chris@0
|
109
|
Chris@0
|
110 $this->drupalGet('admin/modules/uninstall');
|
Chris@0
|
111 $this->assertText("The Telephone number field type is used in the following fields: node.field_telephone, user.field_telephone_2");
|
Chris@0
|
112
|
Chris@0
|
113 // Delete both fields.
|
Chris@0
|
114 $field_storage->delete();
|
Chris@0
|
115 $field_storage2->delete();
|
Chris@0
|
116
|
Chris@0
|
117 $this->drupalGet('admin/modules/uninstall');
|
Chris@0
|
118 $this->assertText('Fields pending deletion');
|
Chris@0
|
119 $this->cronRun();
|
Chris@0
|
120 $this->assertNoText("The Telephone number field type is used in the following field: node.field_telephone");
|
Chris@0
|
121 $this->assertNoText('Fields pending deletion');
|
Chris@0
|
122 }
|
Chris@0
|
123
|
Chris@0
|
124 }
|