DateTimeWidgetTest.php

Same filename in other branches
  1. 10 core/modules/datetime/tests/src/Functional/DateTimeWidgetTest.php
  2. 11.x core/modules/datetime/tests/src/Functional/DateTimeWidgetTest.php

Namespace

Drupal\Tests\datetime\Functional

File

core/modules/datetime/tests/src/Functional/DateTimeWidgetTest.php

View source
<?php

namespace Drupal\Tests\datetime\Functional;

use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;

/**
 * Tests Datetime widgets functionality.
 *
 * @group datetime
 */
class DateTimeWidgetTest extends DateTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * The default display settings to use for the formatters.
     *
     * @var array
     */
    protected $defaultSettings = [
        'timezone_override' => '',
    ];
    
    /**
     * {@inheritdoc}
     */
    protected function getTestFieldType() {
        return 'datetime';
    }
    
    /**
     * Test default value functionality.
     */
    public function testDateonlyDefaultValue() {
        // Create a test content type.
        $this->drupalCreateContentType([
            'type' => 'dateonly_content',
        ]);
        // Create a field storage with settings to validate.
        $field_storage = FieldStorageConfig::create([
            'field_name' => 'field_dateonly',
            'entity_type' => 'node',
            'type' => 'datetime',
            'settings' => [
                'datetime_type' => 'date',
            ],
        ]);
        $field_storage->save();
        $field = FieldConfig::create([
            'field_storage' => $field_storage,
            'bundle' => 'dateonly_content',
        ]);
        $field->save();
        $edit = [
            'fields[field_dateonly][region]' => 'content',
            'fields[field_dateonly][type]' => 'datetime_default',
        ];
        $this->drupalGet('admin/structure/types/manage/dateonly_content/form-display');
        $this->submitForm($edit, 'Save');
        $this->drupalGet('admin/structure/types/manage/dateonly_content/display');
        $this->submitForm($edit, 'Save');
        // Set now as default_value.
        $edit = [
            'default_value_input[default_date_type]' => 'now',
        ];
        $this->drupalGet('admin/structure/types/manage/dateonly_content/fields/node.dateonly_content.field_dateonly');
        $this->submitForm($edit, 'Save settings');
        // Check that default value is selected in default value form.
        $this->drupalGet('admin/structure/types/manage/dateonly_content/fields/node.dateonly_content.field_dateonly');
        $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/dateonly_content');
            $today = $this->dateFormatter
                ->format($request_time, 'html_date', NULL, $timezone);
            $this->assertSession()
                ->fieldValueEquals('field_dateonly[0][value][date]', $today);
            $edit = [
                'title[0][value]' => $timezone,
            ];
            $this->submitForm($edit, 'Save');
            $this->assertSession()
                ->pageTextContains('dateonly_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_dateonly->value);
        }
    }

}

Classes

Title Deprecated Summary
DateTimeWidgetTest Tests Datetime widgets functionality.

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