function LinkFieldUITest::runFieldUIItem

Same name in other branches
  1. 9 core/modules/link/tests/src/Functional/LinkFieldUITest.php \Drupal\Tests\link\Functional\LinkFieldUITest::runFieldUIItem()
  2. 8.9.x core/modules/link/tests/src/Functional/LinkFieldUITest.php \Drupal\Tests\link\Functional\LinkFieldUITest::runFieldUIItem()
  3. 10 core/modules/link/tests/src/Functional/LinkFieldUITest.php \Drupal\Tests\link\Functional\LinkFieldUITest::runFieldUIItem()

Tests one link field UI item.

Parameters

int $cardinality: The field cardinality.

int $link_type: Determine if the link is external, internal or both.

int $title: Determine if the field will display the link text field.

string $label: The field label.

string $field_name: The unique machine name for the field.

string $default_uri: The default URI value.

1 call to LinkFieldUITest::runFieldUIItem()
LinkFieldUITest::testFieldUI in core/modules/link/tests/src/Functional/LinkFieldUITest.php
Tests the link field UI.

File

core/modules/link/tests/src/Functional/LinkFieldUITest.php, line 152

Class

LinkFieldUITest
Tests link field UI functionality.

Namespace

Drupal\Tests\link\Functional

Code

public function runFieldUIItem($cardinality, $link_type, $title, $label, $field_name, $default_uri) : void {
    $this->drupalLogin($this->adminUser);
    $type_path = 'admin/structure/types/manage/' . $this->contentType
        ->id();
    // Add a link field to the newly-created type.
    $description = 'link field description';
    $field_edit = [
        'description' => $description,
        'settings[link_type]' => (int) $link_type,
    ];
    if (!empty($default_uri)) {
        $field_edit['set_default_value'] = '1';
        $field_edit['default_value_input[field_' . $field_name . '][0][uri]'] = $default_uri;
        $field_edit['default_value_input[field_' . $field_name . '][0][title]'] = 'Default title';
    }
    $storage_edit = [
        'cardinality_number' => $cardinality,
    ];
    $this->fieldUIAddNewField($type_path, $field_name, $label, 'link', $storage_edit, $field_edit);
    // Load the formatter page to check that the settings summary does not
    // generate warnings.
    // @todo Mess with the formatter settings a bit here.
    $this->drupalGet("{$type_path}/display");
    $this->assertSession()
        ->pageTextContains('Link text trimmed to 80 characters');
    // Make the fields visible in the form display.
    $form_display_id = implode('.', [
        'node',
        $this->contentType
            ->id(),
        'default',
    ]);
    $form_display = EntityFormDisplay::load($form_display_id);
    $form_display->setComponent($field_name, [
        'region' => 'content',
    ]);
    $form_display->save();
    // Log in a user that is allowed to create this content type, see if
    // the user can see the expected help text.
    $this->drupalLogin($this->helpTextUser);
    $add_path = 'node/add/' . $this->contentType
        ->id();
    $this->drupalGet($add_path);
    $expected_help_texts = [
        LinkItemInterface::LINK_EXTERNAL => 'This must be an external URL such as <em class="placeholder">https://example.com</em>.',
        LinkItemInterface::LINK_GENERIC => 'You can also enter an internal path such as <em class="placeholder">/node/add</em> or an external URL such as <em class="placeholder">https://example.com</em>. Enter <em class="placeholder">&lt;front&gt;</em> to link to the front page. Enter <em class="placeholder">&lt;nolink&gt;</em> to display link text only',
        LinkItemInterface::LINK_INTERNAL => rtrim(Url::fromRoute('<front>', [], [
            'absolute' => TRUE,
        ])->toString(), '/'),
    ];
    // Check that the help texts we assume should be there, is there.
    $this->assertFieldContainsRawText($field_name, $expected_help_texts[$link_type]);
    if ($link_type === LinkItemInterface::LINK_INTERNAL) {
        // Internal links have no "system" description. Test that none
        // of the other help texts show here.
        $this->assertNoFieldContainsRawText($field_name, $expected_help_texts[LinkItemInterface::LINK_EXTERNAL]);
        $this->assertNoFieldContainsRawText($field_name, $expected_help_texts[LinkItemInterface::LINK_GENERIC]);
    }
    // Also assert that the description we made is here, no matter what the
    // cardinality or link setting.
    if (!empty($label)) {
        $this->assertFieldContainsRawText($field_name, $label);
    }
    // Test the default field value is used as expected.
    $this->assertSession()
        ->fieldValueEquals('field_' . $field_name . '[0][uri]', $default_uri);
}

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