function DateTimeWidgetTest::testDateOnlyDefaultValue

Same name in other branches
  1. 9 core/modules/datetime/tests/src/Functional/DateTimeWidgetTest.php \Drupal\Tests\datetime\Functional\DateTimeWidgetTest::testDateonlyDefaultValue()
  2. 10 core/modules/datetime/tests/src/Functional/DateTimeWidgetTest.php \Drupal\Tests\datetime\Functional\DateTimeWidgetTest::testDateOnlyDefaultValue()

Test default value functionality.

File

core/modules/datetime/tests/src/Functional/DateTimeWidgetTest.php, line 39

Class

DateTimeWidgetTest
Tests Datetime widgets functionality.

Namespace

Drupal\Tests\datetime\Functional

Code

public function testDateOnlyDefaultValue() : void {
    // Create a test content type.
    $this->drupalCreateContentType([
        'type' => 'date_only_content',
    ]);
    // Create a field storage with settings to validate.
    $field_storage = FieldStorageConfig::create([
        'field_name' => 'field_date_only',
        'entity_type' => 'node',
        'type' => 'datetime',
        'settings' => [
            'datetime_type' => 'date',
        ],
    ]);
    $field_storage->save();
    $field = FieldConfig::create([
        'field_storage' => $field_storage,
        'bundle' => 'date_only_content',
    ]);
    $field->save();
    $edit = [
        'fields[field_date_only][region]' => 'content',
        'fields[field_date_only][type]' => 'datetime_default',
    ];
    $this->drupalGet('admin/structure/types/manage/date_only_content/form-display');
    $this->submitForm($edit, 'Save');
    $this->drupalGet('admin/structure/types/manage/date_only_content/display');
    $this->submitForm($edit, 'Save');
    // Set now as default_value.
    $edit = [
        'set_default_value' => '1',
        'default_value_input[default_date_type]' => 'now',
    ];
    $this->drupalGet('admin/structure/types/manage/date_only_content/fields/node.date_only_content.field_date_only');
    $this->submitForm($edit, 'Save settings');
    // Check that default value is selected in default value form.
    $this->drupalGet('admin/structure/types/manage/date_only_content/fields/node.date_only_content.field_date_only');
    $option_field = $this->assertSession()
        ->optionExists('edit-default-value-input-default-date-type', 'now');
    $this->assertTrue($option_field->hasAttribute('selected'));
    $this->assertSession()
        ->fieldValueEquals('default_value_input[default_date]', '');
    // Loop through defined timezones to test that date-only defaults work at
    // the extremes.
    foreach (static::$timezones as $timezone) {
        $this->setSiteTimezone($timezone);
        $this->assertEquals($timezone, $this->config('system.date')
            ->get('timezone.default'), 'Time zone set to ' . $timezone);
        // The time of the request is determined very early on in the request so
        // use the current time prior to making a request.
        $request_time = $this->container
            ->get('datetime.time')
            ->getCurrentTime();
        $this->drupalGet('node/add/date_only_content');
        $today = $this->dateFormatter
            ->format($request_time, 'html_date', NULL, $timezone);
        $this->assertSession()
            ->fieldValueEquals('field_date_only[0][value][date]', $today);
        $edit = [
            'title[0][value]' => $timezone,
        ];
        $this->submitForm($edit, 'Save');
        $this->assertSession()
            ->pageTextContains('date_only_content ' . $timezone . ' has been created');
        $node = $this->drupalGetNodeByTitle($timezone);
        $today_storage = $this->dateFormatter
            ->format($request_time, 'html_date', NULL, $timezone);
        $this->assertEquals($today_storage, $node->field_date_only->value);
    }
}

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