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 }
|