-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathMultiDayEventsTest.php
More file actions
executable file
·119 lines (102 loc) · 4.27 KB
/
MultiDayEventsTest.php
File metadata and controls
executable file
·119 lines (102 loc) · 4.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
namespace TransformStudios\Events\Tests\Types;
use Carbon\Carbon;
use Statamic\Facades\Entry;
use TransformStudios\Events\EventFactory;
use TransformStudios\Events\Types\MultiDayEvent;
beforeEach(function () {
Carbon::setTestNowAndTimezone(now(), 'America/Vancouver');
$entry = Entry::make()
->slug('multi-day-event')
->collection('events')
->data([
'recurrence' => 'multi_day',
'days' => [
[
'date' => '2019-11-24',
'start_time' => '11:00',
'end_time' => '15:00',
],
[
'date' => '2019-11-25',
'start_time' => '11:00',
'end_time' => '15:00',
],
[
'date' => '2019-11-23',
'start_time' => '19:00',
'end_time' => '21:00',
],
],
'timezone' => 'America/Vancouver',
]);
$this->event = EventFactory::createFromEntry($entry);
$noEndTimeEntry = Entry::make()
->collection('events')
->slug('no-end-time')
->data([
'recurrence' => 'multi_day',
'days' => [
[
'date' => '2019-11-23',
'start_time' => '19:00',
],
[
'date' => '2019-11-24',
'start_time' => '15:00',
],
],
'timezone' => 'America/Vancouver',
]);
$this->noEndTimeEvent = EventFactory::createFromEntry($noEndTimeEntry);
$allDayEntry = Entry::make()
->collection('events')
->data([
'recurrence' => 'multi_day',
'days' => [
[
'date' => '2019-11-20',
],
[
'date' => '2019-11-21',
],
],
'timezone' => 'America/Vancouver',
]);
$this->allDayEvent = EventFactory::createFromEntry($allDayEntry);
});
test('can create multi day event', function () {
expect($this->event instanceof MultiDayEvent)->toBeTrue();
expect($this->allDayEvent instanceof MultiDayEvent)->toBeTrue();
expect($this->noEndTimeEvent instanceof MultiDayEvent)->toBeTrue();
expect($this->event->isMultiDay())->toBeTrue();
expect($this->allDayEvent->isMultiDay())->toBeTrue();
expect($this->noEndTimeEvent->isMultiDay())->toBeTrue();
});
test('can get start', function () {
expect($this->event->start())->toEqual(Carbon::parse('2019-11-23 19:00')->shiftTimezone('America/Vancouver'));
expect($this->allDayEvent->start())->toEqual(Carbon::parse('2019-11-20 0:00')->shiftTimezone('America/Vancouver'));
expect($this->event->start()->timezone)->toEqual(Carbon::parse('2019-11-20 0:00')->shiftTimezone('America/Vancouver')->timezone);
});
test('can get end', function () {
expect($this->event->end())->toEqual(Carbon::parse('2019-11-25 15:00')->shiftTimezone('America/Vancouver'));
expect($this->allDayEvent->end())->toEqual(Carbon::parse('2019-11-21 23:59:59.999999')->shiftTimezone('America/Vancouver'));
expect($this->event->end()->timezone)->toEqual(Carbon::parse('2019-11-21 23:59:00')->shiftTimezone('America/Vancouver')->timezone);
});
test('no occurrences if now after end date', function () {
Carbon::setTestNow('2019-11-26');
expect($this->event->nextOccurrences(1))->toBeEmpty();
});
test('can generate next occurrence if before', function () {
Carbon::setTestNowAndTimezone('2019-11-22', 'America/Vancouver');
expect($this->event->nextOccurrences()[0]->start)->toEqual(Carbon::parse('2019-11-23')->setTimeFromTimeString('19:00:00'));
expect($this->event->nextOccurrences()[0]->end)->toEqual(Carbon::parse('2019-11-23')->setTimeFromTimeString('21:00'));
});
test('can generate next occurrence if during', function () {
Carbon::setTestNowAndTimezone('2019-11-24 10:00', 'America/Vancouver');
expect($this->event->nextOccurrences()[0]->start)->toEqual(Carbon::parse('2019-11-24')->setTimeFromTimeString('11:00:00'));
});
test('day is all day when no start and end time', function () {
$days = $this->allDayEvent->days();
expect($days[0]->isAllDay())->toBeTrue();
});