Updated Drupal to 8.6. This goes with the following updates because it's possible...
[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   public static $modules = ['block', 'datetime', 'layout_builder', 'user'];
20
21   /**
22    * {@inheritdoc}
23    */
24   protected function setUp() {
25     parent::setUp();
26
27     $field_storage = FieldStorageConfig::create([
28       'field_name' => 'field_date',
29       'entity_type' => 'user',
30       'type' => 'datetime',
31     ]);
32     $field_storage->save();
33     $field = FieldConfig::create([
34       'field_storage' => $field_storage,
35       'bundle' => 'user',
36       'label' => 'Date field',
37     ]);
38     $field->save();
39
40     $user = $this->drupalCreateUser([
41       'administer blocks',
42       'access administration pages',
43     ]);
44     $user->field_date = '1978-11-19T05:00:00';
45     $user->save();
46     $this->drupalLogin($user);
47   }
48
49   /**
50    * Tests configuring a field block for a user field.
51    */
52   public function testFieldBlock() {
53     $page = $this->getSession()->getPage();
54     $assert_session = $this->assertSession();
55
56     // Assert that the field value is not displayed.
57     $this->drupalGet('admin');
58     $assert_session->pageTextNotContains('Sunday, November 19, 1978 - 16:00');
59
60     $this->drupalGet('admin/structure/block');
61     $this->clickLink('Place block');
62     $assert_session->assertWaitOnAjaxRequest();
63
64     // Ensure that fields without any formatters are not available.
65     $assert_session->pageTextNotContains('Password');
66     // Ensure that non-display-configurable fields are not available.
67     $assert_session->pageTextNotContains('Initial email');
68
69     $assert_session->pageTextContains('Date field');
70     $block_url = 'admin/structure/block/add/field_block%3Auser%3Auser%3Afield_date/classy';
71     $assert_session->linkByHrefExists($block_url);
72
73     $this->drupalGet($block_url);
74     $page->fillField('region', 'content');
75
76     // Assert the default formatter configuration.
77     $assert_session->fieldValueEquals('settings[formatter][type]', 'datetime_default');
78     $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'medium');
79
80     // Change the formatter.
81     $page->selectFieldOption('settings[formatter][type]', 'datetime_time_ago');
82     $assert_session->assertWaitOnAjaxRequest();
83     // Changing the formatter removes the old settings and introduces new ones.
84     $assert_session->fieldNotExists('settings[formatter][settings][format_type]');
85     $assert_session->fieldExists('settings[formatter][settings][granularity]');
86     $page->pressButton('Save block');
87     $assert_session->pageTextContains('The block configuration has been saved.');
88
89     // Configure the block and change the formatter again.
90     $this->clickLink('Configure');
91     $page->selectFieldOption('settings[formatter][type]', 'datetime_default');
92     $assert_session->assertWaitOnAjaxRequest();
93     $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'medium');
94     $page->selectFieldOption('settings[formatter][settings][format_type]', 'long');
95
96     $page->pressButton('Save block');
97     $assert_session->pageTextContains('The block configuration has been saved.');
98
99     // Assert that the field value is updated.
100     $this->clickLink('Configure');
101     $assert_session->fieldValueEquals('settings[formatter][settings][format_type]', 'long');
102
103     // Assert that the field block is configured as expected.
104     $expected = [
105       'label' => 'above',
106       'type' => 'datetime_default',
107       'settings' => [
108         'format_type' => 'long',
109         'timezone_override' => '',
110       ],
111       'third_party_settings' => [],
112     ];
113     $config = $this->container->get('config.factory')->get('block.block.datefield');
114     $this->assertEquals($expected, $config->get('settings.formatter'));
115     $this->assertEquals(['field.field.user.user.field_date'], $config->get('dependencies.config'));
116
117     // Assert that the block is displaying the user field.
118     $this->drupalGet('admin');
119     $assert_session->pageTextContains('Sunday, November 19, 1978 - 16:00');
120   }
121
122 }