function FileFieldWidgetClaroThemeTest::testWidgetDefaultVisibilitySettings

Same name and namespace in other branches
  1. 11.x core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetClaroThemeTest.php \Drupal\Tests\file\FunctionalJavascript\FileFieldWidgetClaroThemeTest::testWidgetDefaultVisibilitySettings()

Tests that the field widget visibility settings are respected on the form.

File

core/modules/file/tests/src/FunctionalJavascript/FileFieldWidgetClaroThemeTest.php, line 30

Class

FileFieldWidgetClaroThemeTest
Tests the widget visibility settings for the Claro theme.

Namespace

Drupal\Tests\file\FunctionalJavascript

Code

public function testWidgetDefaultVisibilitySettings() : void {
  // Set up an article node with all field storage settings set to TRUE.
  $type_name = 'article';
  $field_name = 'test_file_field_1';
  $field_storage_settings = [
    'display_field' => TRUE,
    'display_default' => TRUE,
  ];
  $field_settings = [];
  $widget_settings = [];
  $field_storage = $this->createFileField($field_name, 'node', $type_name, $field_storage_settings, $field_settings, $widget_settings);
  $page = $this->getSession()
    ->getPage();
  $assert_session = $this->assertSession();
  $test_file = current($this->getTestFiles('text'));
  $test_file_path = \Drupal::service('file_system')->realpath($test_file->uri);
  // Fill out the form accordingly.
  $this->drupalGet("node/add/{$type_name}");
  $title = 'Fake Article Name 01';
  $page->findField('title[0][value]')
    ->setValue($title);
  $page->attachFileToField('files[' . $field_name . '_0]', $test_file_path);
  $remove_button = $assert_session->waitForElementVisible('css', '[name="' . $field_name . '_0_remove_button"]');
  $this->assertNotNull($remove_button);
  $type = $assert_session->fieldExists("{$field_name}[0][display]")
    ->getAttribute('type');
  $this->assertEquals($type, 'checkbox');
  $assert_session->checkboxChecked("{$field_name}[0][display]");
  // Now, submit the same form and ensure that value is retained.
  $this->submitForm([], 'Save');
  $node = $this->drupalGetNodeByTitle($title, TRUE);
  $this->assertEquals(1, $node->get($field_name)
    ->getValue()[0]['display'], 'The checkbox is enabled.');
  $this->drupalGet(Url::fromRoute('entity.node.edit_form', [
    'node' => $node->id(),
  ]));
  $assert_session->checkboxChecked("{$field_name}[0][display]");
  // Submit the form again with the disabled value of the checkbox.
  $this->submitForm([
    "{$field_name}[0][display]" => FALSE,
  ], 'Save');
  $node = $this->drupalGetNodeByTitle($title, TRUE);
  $this->assertEquals(0, $node->get($field_name)
    ->getValue()[0]['display'], 'The checkbox is disabled.');
  $this->drupalGet(Url::fromRoute('entity.node.edit_form', [
    'node' => $node->id(),
  ]));
  $assert_session->checkboxNotChecked("{$field_name}[0][display]");
  // Disable the field settings and ensure that the form is updated.
  $field_storage->setSetting('display_default', FALSE);
  $field_storage->save();
  $page = $this->getSession()
    ->getPage();
  $assert_session = $this->assertSession();
  $this->drupalGet("node/add/{$type_name}");
  $title = 'Fake Article Name 02';
  $page->findField('title[0][value]')
    ->setValue($title);
  $page->attachFileToField('files[' . $field_name . '_0]', $test_file_path);
  $remove_button = $assert_session->waitForElementVisible('css', '[name="' . $field_name . '_0_remove_button"]');
  $this->assertNotNull($remove_button);
  $type = $assert_session->fieldExists("{$field_name}[0][display]")
    ->getAttribute('type');
  $this->assertEquals($type, 'checkbox');
  $assert_session->checkboxNotChecked("{$field_name}[0][display]");
  // Submit the same form and ensure that value is retained.
  $this->submitForm([], 'Save');
  $node = $this->drupalGetNodeByTitle($title, TRUE);
  $this->assertEquals(0, $node->get($field_name)
    ->getValue()[0]['display'], 'The checkbox is disabled.');
  $this->drupalGet(Url::fromRoute('entity.node.edit_form', [
    'node' => $node->id(),
  ]));
  $assert_session->checkboxNotChecked("{$field_name}[0][display]");
  // Check the checkbox and ensure that it is submitted properly.
  $this->submitForm([
    "{$field_name}[0][display]" => TRUE,
  ], 'Save');
  $node = $this->drupalGetNodeByTitle($title, TRUE);
  $this->assertEquals(1, $node->get($field_name)
    ->getValue()[0]['display'], 'The checkbox is disabled because display_default option is marked as false.');
  $this->drupalGet(Url::fromRoute('entity.node.edit_form', [
    'node' => $node->id(),
  ]));
  $assert_session->checkboxChecked("{$field_name}[0][display]");
}

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