54f805ffd33f41439aa69e6a2656d4aab1df5605
[yaffs-website] / web / core / modules / datetime_range / tests / src / Kernel / DateRangeItemTest.php
1 <?php
2
3 namespace Drupal\Tests\datetime_range\Kernel;
4
5 use Drupal\Component\Utility\Unicode;
6 use Drupal\Core\Entity\Entity\EntityViewDisplay;
7 use Drupal\datetime_range\Plugin\Field\FieldType\DateRangeItem;
8 use Drupal\entity_test\Entity\EntityTest;
9 use Drupal\field\Entity\FieldConfig;
10 use Drupal\field\Entity\FieldStorageConfig;
11 use Drupal\Tests\field\Kernel\FieldKernelTestBase;
12
13 /**
14  * Test datetime range field type via API.
15  *
16  * @group datetime
17  */
18 class DateRangeItemTest extends FieldKernelTestBase {
19
20   /**
21    * A field storage to use in this test class.
22    *
23    * @var \Drupal\field\Entity\FieldStorageConfig
24    */
25   protected $fieldStorage;
26
27   /**
28    * The field used in this test class.
29    *
30    * @var \Drupal\field\Entity\FieldConfig
31    */
32   protected $field;
33
34   /**
35    * {@inheritdoc}
36    */
37   public static $modules = [
38     'datetime',
39     'datetime_range',
40   ];
41
42   /**
43    * {@inheritdoc}
44    */
45   protected function setUp() {
46     parent::setUp();
47
48     // Add a datetime range field.
49     $this->fieldStorage = FieldStorageConfig::create([
50       'field_name' => Unicode::strtolower($this->randomMachineName()),
51       'entity_type' => 'entity_test',
52       'type' => 'daterange',
53       'settings' => ['datetime_type' => DateRangeItem::DATETIME_TYPE_DATE],
54     ]);
55     $this->fieldStorage->save();
56
57     $this->field = FieldConfig::create([
58       'field_storage' => $this->fieldStorage,
59       'bundle' => 'entity_test',
60       'required' => TRUE,
61     ]);
62     $this->field->save();
63
64     $display_options = [
65       'type' => 'daterange_default',
66       'label' => 'hidden',
67       'settings' => [
68         'format_type' => 'fallback',
69         'separator' => 'UNTRANSLATED',
70       ],
71     ];
72     EntityViewDisplay::create([
73       'targetEntityType' => $this->field->getTargetEntityTypeId(),
74       'bundle' => $this->field->getTargetBundle(),
75       'mode' => 'default',
76       'status' => TRUE,
77     ])->setComponent($this->fieldStorage->getName(), $display_options)
78       ->save();
79   }
80
81   /**
82    * Tests the field configured for date-only.
83    */
84   public function testDateOnly() {
85     $this->fieldStorage->setSetting('datetime_type', DateRangeItem::DATETIME_TYPE_DATE);
86     $field_name = $this->fieldStorage->getName();
87     // Create an entity.
88     $entity = EntityTest::create([
89       'name' => $this->randomString(),
90       $field_name => [
91         'value' => '2016-09-21',
92         'end_value' => '2016-09-21',
93       ],
94     ]);
95
96     // Dates are saved without a time value. When they are converted back into
97     // a \Drupal\datetime\DateTimeComputed object they should all have the same
98     // time.
99     $start_date = $entity->{$field_name}->start_date;
100     sleep(1);
101     $end_date = $entity->{$field_name}->end_date;
102     $this->assertEquals($start_date->getTimestamp(), $end_date->getTimestamp());
103     $this->assertEquals('12:00:00', $start_date->format('H:i:s'));
104     $this->assertEquals('12:00:00', $end_date->format('H:i:s'));
105   }
106
107 }