Pull merge.
[yaffs-website] / web / core / modules / layout_builder / tests / src / FunctionalJavascript / FieldBlockTest.php
1 <?php
2
3 namespace Drupal\Tests\layout_builder\FunctionalJavascript;
4
5 use Drupal\field\Entity\FieldConfig;
6 use Drupal\field\Entity\FieldStorageConfig;
7 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
8
9 /**
10  * @coversDefaultClass \Drupal\layout_builder\Plugin\Block\FieldBlock
11  *
12  * @group field
13  */
14 class FieldBlockTest extends WebDriverTestBase {
15
16   /**
17    * {@inheritdoc}
18    */
19   protected static $modules = [
20     'block',
21     'datetime',
22     'layout_builder',
23     'user',
24     // See \Drupal\layout_builder_fieldblock_test\Plugin\Block\FieldBlock.
25     'layout_builder_fieldblock_test',
26   ];
27
28   /**
29    * {@inheritdoc}
30    */
31   protected function setUp() {
32     parent::setUp();
33
34     $field_storage = FieldStorageConfig::create([
35       'field_name' => 'field_date',
36       'entity_type' => 'user',
37       'type' => 'datetime',
38     ]);
39     $field_storage->save();
40     $field = FieldConfig::create([
41       'field_storage' => $field_storage,
42       'bundle' => 'user',
43       'label' => 'Date field',
44     ]);
45     $field->save();
46
47     $user = $this->drupalCreateUser([
48       'administer blocks',
49       'access administration pages',
50     ]);
51     $user->field_date = '1978-11-19T05:00:00';
52     $user->save();
53     $this->drupalLogin($user);
54   }
55
56   /**
57    * Tests configuring a field block for a user field.
58    */
59   public function testFieldBlock() {
60     $page = $this->getSession()->getPage();
61     $assert_session = $this->assertSession();
62
63     // Assert that the field value is not displayed.
64     $this->drupalGet('admin');
65     $assert_session->pageTextNotContains('Sunday, November 19, 1978 - 16:00');
66
67     $this->drupalGet('admin/structure/block');
68     $this->clickLink('Place block');
69     $assert_session->assertWaitOnAjaxRequest();
70
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');
75
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);
79
80     $this->drupalGet($block_url);
81     $page->fillField('region', 'content');
82
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');
86
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.');
95
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');
102
103     $page->pressButton('Save block');
104     $assert_session->pageTextContains('The block configuration has been saved.');
105
106     // Assert that the field value is updated.
107     $this->clickLink('Configure');
108     $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'long');
109
110     // Assert that the field block is configured as expected.
111     $expected = [
112       'label' => 'above',
113       'type' => 'datetime_default',
114       'settings' => [
115         'format_type' => 'long',
116         'timezone_override' => '',
117       ],
118       'third_party_settings' => [],
119     ];
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'));
123
124     // Assert that the block is displaying the user field.
125     $this->drupalGet('admin');
126     $assert_session->pageTextContains('Sunday, November 19, 1978 - 16:00');
127   }
128
129 }