annotate core/modules/field/src/Tests/reEnableModuleFieldTest.php @ 6:875880e46745

Styling
author Chris Cannam
date Fri, 08 Dec 2017 13:21:27 +0000
parents 4c8ae668cc8c
children 1fec387a4317
rev   line source
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 }