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