Mercurial > hg > isophonics-drupal-site
diff core/modules/field/src/Tests/Boolean/BooleanFieldTest.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/src/Tests/Boolean/BooleanFieldTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,249 @@ +<?php + +namespace Drupal\field\Tests\Boolean; + +use Drupal\Component\Utility\Unicode; +use Drupal\entity_test\Entity\EntityTest; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\field\Entity\FieldConfig; +use Drupal\simpletest\WebTestBase; + +/** + * Tests boolean field functionality. + * + * @group field + */ +class BooleanFieldTest extends WebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = [ + 'entity_test', + 'field_ui', + 'options', + 'field_test_boolean_access_denied', + ]; + + /** + * A field to use in this test class. + * + * @var \Drupal\field\Entity\FieldStorageConfig + */ + protected $fieldStorage; + + /** + * The field used in this test class. + * + * @var \Drupal\field\Entity\FieldConfig + */ + protected $field; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->drupalLogin($this->drupalCreateUser([ + 'view test entity', + 'administer entity_test content', + 'administer entity_test form display', + 'administer entity_test fields', + ])); + } + + /** + * Tests boolean field. + */ + public function testBooleanField() { + $on = $this->randomMachineName(); + $off = $this->randomMachineName(); + $label = $this->randomMachineName(); + + // Create a field with settings to validate. + $field_name = Unicode::strtolower($this->randomMachineName()); + $this->fieldStorage = FieldStorageConfig::create([ + 'field_name' => $field_name, + 'entity_type' => 'entity_test', + 'type' => 'boolean', + ]); + $this->fieldStorage->save(); + $this->field = FieldConfig::create([ + 'field_name' => $field_name, + 'entity_type' => 'entity_test', + 'bundle' => 'entity_test', + 'label' => $label, + 'required' => TRUE, + 'settings' => [ + 'on_label' => $on, + 'off_label' => $off, + ], + ]); + $this->field->save(); + + // Create a form display for the default form mode. + entity_get_form_display('entity_test', 'entity_test', 'default') + ->setComponent($field_name, [ + 'type' => 'boolean_checkbox', + ]) + ->save(); + // Create a display for the full view mode. + entity_get_display('entity_test', 'entity_test', 'full') + ->setComponent($field_name, [ + 'type' => 'boolean', + ]) + ->save(); + + // Display creation form. + $this->drupalGet('entity_test/add'); + $this->assertFieldByName("{$field_name}[value]", '', 'Widget found.'); + $this->assertText($this->field->label(), 'Uses field label by default.'); + $this->assertNoRaw($on, 'Does not use the "On" label.'); + + // Submit and ensure it is accepted. + $edit = [ + "{$field_name}[value]" => 1, + ]; + $this->drupalPostForm(NULL, $edit, t('Save')); + preg_match('|entity_test/manage/(\d+)|', $this->url, $match); + $id = $match[1]; + $this->assertText(t('entity_test @id has been created.', ['@id' => $id])); + + // Verify that boolean value is displayed. + $entity = EntityTest::load($id); + $display = entity_get_display($entity->getEntityTypeId(), $entity->bundle(), 'full'); + $content = $display->build($entity); + $this->setRawContent(\Drupal::service('renderer')->renderRoot($content)); + $this->assertRaw('<div class="field__item">' . $on . '</div>'); + + // Test with "On" label option. + entity_get_form_display('entity_test', 'entity_test', 'default') + ->setComponent($field_name, [ + 'type' => 'boolean_checkbox', + 'settings' => [ + 'display_label' => FALSE, + ] + ]) + ->save(); + + $this->drupalGet('entity_test/add'); + $this->assertFieldByName("{$field_name}[value]", '', 'Widget found.'); + $this->assertRaw($on); + $this->assertNoText($this->field->label()); + + // Test if we can change the on label. + $on = $this->randomMachineName(); + $edit = [ + 'settings[on_label]' => $on, + ]; + $this->drupalPostForm('entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field_name, $edit, t('Save settings')); + // Check if we see the updated labels in the creation form. + $this->drupalGet('entity_test/add'); + $this->assertRaw($on); + + // Go to the form display page and check if the default settings works as + // expected. + $fieldEditUrl = 'entity_test/structure/entity_test/form-display'; + $this->drupalGet($fieldEditUrl); + + // Click on the widget settings button to open the widget settings form. + $this->drupalPostAjaxForm(NULL, [], $field_name . "_settings_edit"); + + $this->assertText( + 'Use field label instead of the "On label" as label', + t('Display setting checkbox available.') + ); + + // Enable setting. + $edit = ['fields[' . $field_name . '][settings_edit_form][settings][display_label]' => 1]; + $this->drupalPostAjaxForm(NULL, $edit, $field_name . "_plugin_settings_update"); + $this->drupalPostForm(NULL, NULL, 'Save'); + + // Go again to the form display page and check if the setting + // is stored and has the expected effect. + $this->drupalGet($fieldEditUrl); + $this->assertText('Use field label: Yes', 'Checking the display settings checkbox updated the value.'); + + $this->drupalPostAjaxForm(NULL, [], $field_name . "_settings_edit"); + $this->assertText( + 'Use field label instead of the "On label" as label', + t('Display setting checkbox is available') + ); + $this->assertFieldByXPath( + '*//input[starts-with(@id, "edit-fields-' . $field_name . '-settings-edit-form-settings-display-label") and @value="1"]', + TRUE, + t('Display label changes label of the checkbox') + ); + + // Test the boolean field settings. + $this->drupalGet('entity_test/structure/entity_test/fields/entity_test.entity_test.' . $field_name); + $this->assertFieldById('edit-settings-on-label', $on); + $this->assertFieldById('edit-settings-off-label', $off); + } + + /** + * Test field access. + */ + public function testFormAccess() { + $on = 'boolean_on'; + $off = 'boolean_off'; + $label = 'boolean_label'; + $field_name = 'boolean_name'; + $this->fieldStorage = FieldStorageConfig::create([ + 'field_name' => $field_name, + 'entity_type' => 'entity_test', + 'type' => 'boolean', + ]); + $this->fieldStorage->save(); + $this->field = FieldConfig::create([ + 'field_name' => $field_name, + 'entity_type' => 'entity_test', + 'bundle' => 'entity_test', + 'label' => $label, + 'settings' => [ + 'on_label' => $on, + 'off_label' => $off, + ], + ]); + $this->field->save(); + + // Create a form display for the default form mode. + entity_get_form_display('entity_test', 'entity_test', 'default') + ->setComponent($field_name, [ + 'type' => 'boolean_checkbox', + ]) + ->save(); + + // Create a display for the full view mode. + entity_get_display('entity_test', 'entity_test', 'full') + ->setComponent($field_name, [ + 'type' => 'boolean', + ]) + ->save(); + + // Display creation form. + $this->drupalGet('entity_test/add'); + $this->assertFieldByName("{$field_name}[value]"); + + // Should be posted OK. + $this->drupalPostForm(NULL, [], t('Save')); + preg_match('|entity_test/manage/(\d+)|', $this->url, $match); + $id = $match[1]; + $this->assertText(t('entity_test @id has been created.', ['@id' => $id])); + + // Tell the test module to disable access to the field. + \Drupal::state()->set('field.test_boolean_field_access_field', $field_name); + $this->drupalGet('entity_test/add'); + // Field should not be there anymore. + $this->assertNoFieldByName("{$field_name}[value]"); + // Should still be able to post the form. + $this->drupalPostForm(NULL, [], t('Save')); + preg_match('|entity_test/manage/(\d+)|', $this->url, $match); + $id = $match[1]; + $this->assertText(t('entity_test @id has been created.', ['@id' => $id])); + } + +}