function FieldDefaultValueCallbackTest::testDefaultValueCallbackForm

Same name and namespace in other branches
  1. 9 core/modules/field/tests/src/Functional/FieldDefaultValueCallbackTest.php \Drupal\Tests\field\Functional\FieldDefaultValueCallbackTest::testDefaultValueCallbackForm()
  2. 8.9.x core/modules/field/tests/src/Functional/FieldDefaultValueCallbackTest.php \Drupal\Tests\field\Functional\FieldDefaultValueCallbackTest::testDefaultValueCallbackForm()
  3. 11.x core/modules/field/tests/src/Functional/FieldDefaultValueCallbackTest.php \Drupal\Tests\field\Functional\FieldDefaultValueCallbackTest::testDefaultValueCallbackForm()

File

core/modules/field/tests/src/Functional/FieldDefaultValueCallbackTest.php, line 57

Class

FieldDefaultValueCallbackTest
Tests the default value callback.

Namespace

Drupal\Tests\field\Functional

Code

public function testDefaultValueCallbackForm() : void {
  // Create a field and storage for checking.
  /** @var \Drupal\field\Entity\FieldStorageConfig $field_storage */
  FieldStorageConfig::create([
    'field_name' => $this->fieldName,
    'entity_type' => 'node',
    'type' => 'text',
  ])
    ->save();
  /** @var \Drupal\field\Entity\FieldConfig $field_config */
  $field_config = FieldConfig::create([
    'entity_type' => 'node',
    'field_name' => $this->fieldName,
    'bundle' => 'article',
  ]);
  $field_config->save();
  // Check that the default field form is visible when no callback is set.
  $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.field_test');
  $this->assertSession()
    ->fieldValueEquals('default_value_input[field_test][0][value]', '');
  // Set a different field value, it should be on the field.
  $default_value = $this->randomString();
  $field_config->setDefaultValue([
    [
      'value' => $default_value,
    ],
  ])
    ->save();
  $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.field_test');
  $this->assertSession()
    ->fieldValueEquals('default_value_input[field_test][0][value]', $default_value);
  // Set a different field value to the field directly, instead of an array.
  $default_value = $this->randomString();
  $field_config->setDefaultValue($default_value)
    ->save();
  $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.field_test');
  $this->assertSession()
    ->fieldValueEquals('default_value_input[field_test][0][value]', $default_value);
  // Set a default value callback instead, and the default field form should
  // not be visible.
  $field_config->setDefaultValueCallback('\\Drupal\\field_test\\FieldDefaultValueCallbackProvider::calculateDefaultValue')
    ->save();
  $this->drupalGet('/admin/structure/types/manage/article/fields/node.article.field_test');
  $this->assertSession()
    ->fieldNotExists('default_value_input[field_test][0][value]');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.