3 namespace Drupal\Tests\layout_builder\FunctionalJavascript;
5 use Drupal\field\Entity\FieldConfig;
6 use Drupal\field\Entity\FieldStorageConfig;
7 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
10 * @coversDefaultClass \Drupal\layout_builder\Plugin\Block\FieldBlock
14 class FieldBlockTest extends WebDriverTestBase {
19 protected static $modules = [
24 // See \Drupal\layout_builder_fieldblock_test\Plugin\Block\FieldBlock.
25 'layout_builder_fieldblock_test',
31 protected function setUp() {
34 $field_storage = FieldStorageConfig::create([
35 'field_name' => 'field_date',
36 'entity_type' => 'user',
39 $field_storage->save();
40 $field = FieldConfig::create([
41 'field_storage' => $field_storage,
43 'label' => 'Date field',
47 $user = $this->drupalCreateUser([
49 'access administration pages',
51 $user->field_date = '1978-11-19T05:00:00';
53 $this->drupalLogin($user);
57 * Tests configuring a field block for a user field.
59 public function testFieldBlock() {
60 $page = $this->getSession()->getPage();
61 $assert_session = $this->assertSession();
63 // Assert that the field value is not displayed.
64 $this->drupalGet('admin');
65 $assert_session->pageTextNotContains('Sunday, November 19, 1978 - 16:00');
67 $this->drupalGet('admin/structure/block');
68 $this->clickLink('Place block');
69 $assert_session->assertWaitOnAjaxRequest();
71 // Ensure that fields without any formatters are not available.
72 $assert_session->pageTextNotContains('Password');
73 // Ensure that non-display-configurable fields are not available.
74 $assert_session->pageTextNotContains('Initial email');
76 $assert_session->pageTextContains('Date field');
77 $block_url = 'admin/structure/block/add/field_block_test%3Auser%3Auser%3Afield_date/classy';
78 $assert_session->linkByHrefExists($block_url);
80 $this->drupalGet($block_url);
81 $page->fillField('region', 'content');
83 // Assert the default formatter configuration.
84 $assert_session->fieldValueEquals('settings[formatter][type]', 'datetime_default');
85 $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'medium');
87 // Change the formatter.
88 $page->selectFieldOption('settings[formatter][type]', 'datetime_time_ago');
89 $assert_session->assertWaitOnAjaxRequest();
90 // Changing the formatter removes the old settings and introduces new ones.
91 $assert_session->fieldNotExists('settings[formatter][settings][format_type]');
92 $assert_session->fieldExists('settings[formatter][settings][granularity]');
93 $page->pressButton('Save block');
94 $assert_session->pageTextContains('The block configuration has been saved.');
96 // Configure the block and change the formatter again.
97 $this->clickLink('Configure');
98 $page->selectFieldOption('settings[formatter][type]', 'datetime_default');
99 $assert_session->assertWaitOnAjaxRequest();
100 $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'medium');
101 $page->selectFieldOption('settings[formatter][settings][format_type]', 'long');
103 $page->pressButton('Save block');
104 $assert_session->pageTextContains('The block configuration has been saved.');
106 // Assert that the field value is updated.
107 $this->clickLink('Configure');
108 $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'long');
110 // Assert that the field block is configured as expected.
113 'type' => 'datetime_default',
115 'format_type' => 'long',
116 'timezone_override' => '',
118 'third_party_settings' => [],
120 $config = $this->container->get('config.factory')->get('block.block.datefield');
121 $this->assertEquals($expected, $config->get('settings.formatter'));
122 $this->assertEquals(['field.field.user.user.field_date'], $config->get('dependencies.config'));
124 // Assert that the block is displaying the user field.
125 $this->drupalGet('admin');
126 $assert_session->pageTextContains('Sunday, November 19, 1978 - 16:00');