annotate core/tests/Drupal/FunctionalTests/Datetime/TimestampTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\FunctionalTests\Datetime;
Chris@0 4
Chris@0 5 use Drupal\Core\Datetime\DrupalDateTime;
Chris@0 6 use Drupal\Core\Datetime\Entity\DateFormat;
Chris@0 7 use Drupal\Core\Entity\Entity\EntityFormDisplay;
Chris@0 8 use Drupal\Core\Entity\Entity\EntityViewDisplay;
Chris@0 9 use Drupal\field\Entity\FieldConfig;
Chris@0 10 use Drupal\field\Entity\FieldStorageConfig;
Chris@0 11 use Drupal\Tests\BrowserTestBase;
Chris@0 12
Chris@0 13 /**
Chris@0 14 * Tests the functionality of Timestamp core field UI.
Chris@0 15 *
Chris@0 16 * @group field
Chris@0 17 */
Chris@0 18 class TimestampTest extends BrowserTestBase {
Chris@0 19
Chris@0 20 /**
Chris@0 21 * An array of display options to pass to entity_get_display().
Chris@0 22 *
Chris@0 23 * @var array
Chris@0 24 */
Chris@0 25 protected $displayOptions;
Chris@0 26
Chris@0 27 /**
Chris@0 28 * A field storage to use in this test class.
Chris@0 29 *
Chris@0 30 * @var \Drupal\field\Entity\FieldStorageConfig
Chris@0 31 */
Chris@0 32 protected $fieldStorage;
Chris@0 33
Chris@0 34 /**
Chris@0 35 * The field used in this test class.
Chris@0 36 *
Chris@0 37 * @var \Drupal\field\Entity\FieldConfig
Chris@0 38 */
Chris@0 39 protected $field;
Chris@0 40
Chris@0 41 /**
Chris@0 42 * {@inheritdoc}
Chris@0 43 */
Chris@0 44 public static $modules = ['node', 'entity_test', 'field_ui'];
Chris@0 45
Chris@0 46 /**
Chris@0 47 * {@inheritdoc}
Chris@0 48 */
Chris@0 49 protected function setUp() {
Chris@0 50 parent::setUp();
Chris@0 51
Chris@0 52 $web_user = $this->drupalCreateUser([
Chris@0 53 'access content',
Chris@0 54 'view test entity',
Chris@0 55 'administer entity_test content',
Chris@0 56 'administer entity_test form display',
Chris@0 57 'administer content types',
Chris@0 58 'administer node fields',
Chris@0 59 ]);
Chris@0 60
Chris@0 61 $this->drupalLogin($web_user);
Chris@0 62 $field_name = 'field_timestamp';
Chris@0 63 $type = 'timestamp';
Chris@0 64 $widget_type = 'datetime_timestamp';
Chris@0 65 $formatter_type = 'timestamp';
Chris@0 66
Chris@0 67 $this->fieldStorage = FieldStorageConfig::create([
Chris@0 68 'field_name' => $field_name,
Chris@0 69 'entity_type' => 'entity_test',
Chris@0 70 'type' => $type,
Chris@0 71 ]);
Chris@0 72 $this->fieldStorage->save();
Chris@0 73 $this->field = FieldConfig::create([
Chris@0 74 'field_storage' => $this->fieldStorage,
Chris@0 75 'bundle' => 'entity_test',
Chris@0 76 'required' => TRUE,
Chris@0 77 ]);
Chris@0 78 $this->field->save();
Chris@0 79
Chris@0 80 EntityFormDisplay::load('entity_test.entity_test.default')
Chris@0 81 ->setComponent($field_name, ['type' => $widget_type])
Chris@0 82 ->save();
Chris@0 83
Chris@0 84 $this->displayOptions = [
Chris@0 85 'type' => $formatter_type,
Chris@0 86 'label' => 'hidden',
Chris@0 87 ];
Chris@0 88
Chris@0 89 EntityViewDisplay::create([
Chris@0 90 'targetEntityType' => $this->field->getTargetEntityTypeId(),
Chris@0 91 'bundle' => $this->field->getTargetBundle(),
Chris@0 92 'mode' => 'full',
Chris@0 93 'status' => TRUE,
Chris@0 94 ])->setComponent($field_name, $this->displayOptions)
Chris@0 95 ->save();
Chris@0 96 }
Chris@0 97
Chris@0 98 /**
Chris@0 99 * Tests the "datetime_timestamp" widget.
Chris@0 100 */
Chris@0 101 public function testWidget() {
Chris@0 102 // Build up a date in the UTC timezone.
Chris@0 103 $value = '2012-12-31 00:00:00';
Chris@0 104 $date = new DrupalDateTime($value, 'UTC');
Chris@0 105
Chris@0 106 // Update the timezone to the system default.
Chris@0 107 $date->setTimezone(timezone_open(drupal_get_user_timezone()));
Chris@0 108
Chris@0 109 // Display creation form.
Chris@0 110 $this->drupalGet('entity_test/add');
Chris@0 111
Chris@0 112 // Make sure the "datetime_timestamp" widget is on the page.
Chris@0 113 $fields = $this->xpath('//div[contains(@class, "field--widget-datetime-timestamp") and @id="edit-field-timestamp-wrapper"]');
Chris@0 114 $this->assertEquals(1, count($fields));
Chris@0 115
Chris@0 116 // Look for the widget elements and make sure they are empty.
Chris@0 117 $this->assertSession()->fieldExists('field_timestamp[0][value][date]');
Chris@0 118 $this->assertSession()->fieldValueEquals('field_timestamp[0][value][date]', '');
Chris@0 119 $this->assertSession()->fieldExists('field_timestamp[0][value][time]');
Chris@0 120 $this->assertSession()->fieldValueEquals('field_timestamp[0][value][time]', '');
Chris@0 121
Chris@0 122 // Submit the date.
Chris@0 123 $date_format = DateFormat::load('html_date')->getPattern();
Chris@0 124 $time_format = DateFormat::load('html_time')->getPattern();
Chris@0 125
Chris@0 126 $edit = [
Chris@0 127 'field_timestamp[0][value][date]' => $date->format($date_format),
Chris@0 128 'field_timestamp[0][value][time]' => $date->format($time_format),
Chris@0 129 ];
Chris@0 130 $this->drupalPostForm(NULL, $edit, 'Save');
Chris@0 131
Chris@0 132 // Make sure the submitted date is set as the default in the widget.
Chris@0 133 $this->assertSession()->fieldExists('field_timestamp[0][value][date]');
Chris@0 134 $this->assertSession()->fieldValueEquals('field_timestamp[0][value][date]', $date->format($date_format));
Chris@0 135 $this->assertSession()->fieldExists('field_timestamp[0][value][time]');
Chris@0 136 $this->assertSession()->fieldValueEquals('field_timestamp[0][value][time]', $date->format($time_format));
Chris@0 137
Chris@0 138 // Make sure the entity was saved.
Chris@0 139 preg_match('|entity_test/manage/(\d+)|', $this->getSession()->getCurrentUrl(), $match);
Chris@0 140 $id = $match[1];
Chris@0 141 $this->assertSession()->pageTextContains(sprintf('entity_test %s has been created.', $id));
Chris@0 142
Chris@0 143 // Make sure the timestamp is output properly with the default formatter.
Chris@0 144 $medium = DateFormat::load('medium')->getPattern();
Chris@0 145 $this->drupalGet('entity_test/' . $id);
Chris@0 146 $this->assertSession()->pageTextContains($date->format($medium));
Chris@0 147 }
Chris@0 148
Chris@0 149 }