1212
1313use DateInterval ;
1414use DateTimeImmutable ;
15- use DateTimeZone ;
16- use DomainException ;
1715use PHPUnit \Framework \TestCase ;
18- use Zee \DateRange \States \UndefinedRange ;
1916
2017/**
2118 * Class DateRangeTest.
@@ -25,247 +22,80 @@ class DateRangeTest extends TestCase
2522 /**
2623 * @test
2724 */
28- public function undefinedRange ()
25+ public function rangeIsCastingToString ()
2926 {
30- $ now = new DateTimeImmutable ();
31- $ actual = new DateRange ();
32-
33- self ::assertFalse ($ actual ->hasStartDate ());
34- self ::assertFalse ($ actual ->hasEndDate ());
35- self ::assertFalse ($ actual ->isStarted ());
36- self ::assertFalse ($ actual ->isEnded ());
37- self ::assertFalse ($ actual ->isStartedOn ($ now ));
38- self ::assertFalse ($ actual ->isEndedOn ($ now ));
39- self ::assertSame ('-/- ' , (string ) $ actual );
40- self ::assertSame (
41- json_encode (['startDate ' => null , 'endDate ' => null ]),
42- json_encode ($ actual )
43- );
44-
45- $ changed = $ actual ->setStartDate ($ now );
46-
47- self ::assertNotSame ($ actual , $ changed );
48- self ::assertSame ($ now , $ changed ->getStartDate ());
49-
50- $ changed = $ actual ->setEndDate ($ now );
51-
52- self ::assertNotSame ($ actual , $ changed );
53- self ::assertSame ($ now , $ changed ->getEndDate ());
54- }
55-
56- /**
57- * @test
58- */
59- public function undefinedRangeHasNostartDate ()
60- {
61- $ actual = new DateRange ();
62-
63- $ this ->expectException (DomainException::class);
64- $ this ->expectExceptionMessage ('Range start is undefined ' );
65-
66- $ actual ->getStartDate ();
67- }
68-
69- /**
70- * @test
71- */
72- public function undefinedRangeHasNoendDate ()
73- {
74- $ actual = new DateRange ();
75-
76- $ this ->expectException (DomainException::class);
77- $ this ->expectExceptionMessage ('Range end is undefined ' );
78-
79- $ actual ->getEndDate ();
80- }
81-
82- /**
83- * @test
84- */
85- public function cannotCompareUndefinedStart ()
86- {
87- $ actual = new UndefinedRange ();
88-
89- $ this ->expectException (DomainException::class);
90- $ this ->expectExceptionMessage ('Range start is undefined ' );
91-
92- $ actual ->compareStartDate (new DateTimeImmutable ());
93- }
94-
95- /**
96- * @test
97- */
98- public function cannotCompareUndefinedEnd ()
99- {
100- $ actual = new UndefinedRange ();
101-
102- $ this ->expectException (DomainException::class);
103- $ this ->expectExceptionMessage ('Range end is undefined ' );
27+ $ yesterday = new DateTimeImmutable ('-1 day ' );
28+ $ tomorrow = new DateTimeImmutable ('+1 day ' );
10429
105- $ actual ->compareEndDate (new DateTimeImmutable ());
30+ self ::assertSame ('-/- ' , (string ) new DateRange ());
31+ self ::assertSame ("{$ yesterday ->format ('c ' )}/- " , (string ) new DateRange ($ yesterday ));
32+ self ::assertSame ("-/ {$ tomorrow ->format ('c ' )}" , (string ) new DateRange (null , $ tomorrow ));
33+ self ::assertSame ("{$ yesterday ->format ('c ' )}/ {$ tomorrow ->format ('c ' )}" , (string ) new DateRange ($ yesterday , $ tomorrow ));
10634 }
10735
10836 /**
10937 * @test
11038 */
111- public function infiniteEndRange ()
39+ public function rangeIsJsonSerializable ()
11240 {
113- $ now = new DateTimeImmutable ();
41+ $ yesterday = new DateTimeImmutable (' -1 day ' );
11442 $ tomorrow = new DateTimeImmutable ('+1 day ' );
115- $ actual = new DateRange ($ now );
11643
117- self ::assertTrue ($ actual ->hasStartDate ());
118- self ::assertFalse ($ actual ->hasEndDate ());
119- self ::assertTrue ($ actual ->isStarted ());
120- self ::assertFalse ($ actual ->isEnded ());
121- self ::assertTrue ($ actual ->isStartedOn ($ now ));
122- self ::assertFalse ($ actual ->isStartedOn ($ tomorrow ));
123- self ::assertFalse ($ actual ->isEndedOn ($ now ));
124- self ::assertSame ("{$ now ->format ('c ' )}/- " , (string ) $ actual );
12544 self ::assertSame (
126- json_encode (['startDate ' => $ now -> format ( ' c ' ) , 'endDate ' => null ]),
127- json_encode ($ actual )
45+ json_encode (['startDate ' => null , 'endDate ' => null ]),
46+ json_encode (new DateRange () )
12847 );
129-
130- $ changed = $ actual ->setStartDate ($ tomorrow );
131-
132- self ::assertNotSame ($ actual , $ changed );
133- self ::assertSame ($ tomorrow , $ changed ->getStartDate ());
134-
135- $ changed = $ actual ->setEndDate ($ tomorrow );
136-
137- self ::assertNotSame ($ actual , $ changed );
138- self ::assertSame ($ now , $ changed ->getStartDate ());
139- self ::assertSame ($ tomorrow , $ changed ->getEndDate ());
140- }
141-
142- /**
143- * @test
144- */
145- public function infiniteEndRangeHasNoendDate ()
146- {
147- $ now = new DateTimeImmutable ();
148- $ actual = new DateRange ($ now );
149-
150- $ this ->expectException (DomainException::class);
151- $ this ->expectExceptionMessage ('Range end is undefined ' );
152-
153- $ actual ->getEndDate ();
154- }
155-
156- /**
157- * @test
158- */
159- public function infiniteStartRange ()
160- {
161- $ now = new DateTimeImmutable ();
162- $ yesterday = new DateTimeImmutable ('-1 day ' );
163- $ actual = new DateRange (null , $ now );
164-
165- self ::assertFalse ($ actual ->hasStartDate ());
166- self ::assertTrue ($ actual ->hasEndDate ());
167- self ::assertTrue ($ actual ->isStarted ());
168- self ::assertFalse ($ actual ->isEnded ());
169- self ::assertFalse ($ actual ->isStartedOn ($ now ));
170- self ::assertTrue ($ actual ->isEndedOn ($ now ));
171- self ::assertFalse ($ actual ->isEndedOn ($ yesterday ));
172- self ::assertSame ("-/ {$ now ->format ('c ' )}" , (string ) $ actual );
17348 self ::assertSame (
174- json_encode (['startDate ' => null , 'endDate ' => $ now ->format ('c ' )]),
175- json_encode ($ actual )
49+ json_encode (['startDate ' => $ yesterday ->format ('c ' ), 'endDate ' => null ]),
50+ json_encode (new DateRange ($ yesterday ))
51+ );
52+ self ::assertSame (
53+ json_encode (['startDate ' => null , 'endDate ' => $ tomorrow ->format ('c ' )]),
54+ json_encode (new DateRange (null , $ tomorrow ))
17655 );
177-
178- $ changed = $ actual ->setEndDate ($ yesterday );
179-
180- self ::assertNotSame ($ actual , $ changed );
181- self ::assertSame ($ yesterday , $ changed ->getEndDate ());
182- self ::assertTrue ($ changed ->isEnded ());
183-
184- $ changed = $ actual ->setStartDate ($ yesterday );
185-
186- self ::assertNotSame ($ actual , $ changed );
187- self ::assertSame ($ yesterday , $ changed ->getStartDate ());
188- self ::assertSame ($ now , $ changed ->getEndDate ());
189- }
190-
191- /**
192- * @test
193- */
194- public function infiniteStartRangeHasNostartDate ()
195- {
196- $ now = new DateTimeImmutable ();
197- $ actual = new DateRange (null , $ now );
198-
199- $ this ->expectException (DomainException::class);
200- $ this ->expectExceptionMessage ('Range start is undefined ' );
201-
202- $ actual ->getStartDate ();
203- }
204-
205- /**
206- * @test
207- */
208- public function finiteRange ()
209- {
210- $ now = new DateTimeImmutable ();
211- $ yesterday = new DateTimeImmutable ('-1 day ' );
212- $ tomorrow = new DateTimeImmutable ('+1 day ' );
213- $ actual = new DateRange ($ yesterday , $ tomorrow );
214-
215- self ::assertTrue ($ actual ->hasStartDate ());
216- self ::assertTrue ($ actual ->hasEndDate ());
217- self ::assertTrue ($ actual ->isStarted ());
218- self ::assertFalse ($ actual ->isEnded ());
219- self ::assertFalse ($ actual ->isStartedOn ($ now ));
220- self ::assertTrue ($ actual ->isStartedOn ($ yesterday ));
221- self ::assertFalse ($ actual ->isEndedOn ($ now ));
222- self ::assertTrue ($ actual ->isEndedOn ($ tomorrow ));
223- self ::assertSame ("{$ yesterday ->format ('c ' )}/ {$ tomorrow ->format ('c ' )}" , (string ) $ actual );
22456 self ::assertSame (
22557 json_encode (['startDate ' => $ yesterday ->format ('c ' ), 'endDate ' => $ tomorrow ->format ('c ' )]),
226- json_encode ($ actual )
58+ json_encode (new DateRange ( $ yesterday , $ tomorrow ) )
22759 );
228-
229- $ changed = $ actual ->setEndDate ($ now );
230-
231- self ::assertNotSame ($ actual , $ changed );
232- self ::assertSame ($ now , $ changed ->getEndDate ());
233- self ::assertSame ($ yesterday , $ changed ->getStartDate ());
234-
235- $ changed = $ actual ->setStartDate ($ now );
236-
237- self ::assertNotSame ($ actual , $ changed );
238- self ::assertSame ($ now , $ changed ->getStartDate ());
239- self ::assertSame ($ tomorrow , $ changed ->getEndDate ());
24060 }
24161
24262 /**
24363 * @test
24464 */
245- public function setEndOnStart ()
65+ public function checkRange ()
24666 {
247- $ cet = new DateTimeImmutable ('now ' , new DateTimeZone ('CET ' ));
248- $ est = new DateTimeImmutable ('now ' , new DateTimeZone ('EST ' ));
249-
250- self ::assertSame ($ cet ->getTimestamp (), $ est ->getTimestamp ());
251-
252- $ this ->expectExceptionMessage ('Invalid end date, must be after start ' );
253-
254- new DateRange ($ cet , $ cet );
67+ $ yesterday = new DateTimeImmutable ('-1 day ' );
68+ $ tomorrow = new DateTimeImmutable ('+1 day ' );
69+ $ range = new DateRange ($ yesterday , $ tomorrow );
70+
71+ self ::assertTrue ($ range ->hasStartDate ());
72+ self ::assertTrue ($ range ->hasEndDate ());
73+ self ::assertSame ($ yesterday , $ range ->getStartDate ());
74+ self ::assertSame ($ tomorrow , $ range ->getEndDate ());
75+ self ::assertNotSame ($ range , $ range ->setStartDate (new DateTimeImmutable ()));
76+ self ::assertNotSame ($ range , $ range ->setEndDate (new DateTimeImmutable ()));
77+ self ::assertTrue ($ range ->isFinite ());
78+ self ::assertTrue ($ range ->isStarted ());
79+ self ::assertFalse ($ range ->isEnded ());
80+ self ::assertTrue ($ range ->isStartedOn ($ yesterday ));
81+ self ::assertTrue ($ range ->isEndedOn ($ tomorrow ));
25582 }
25683
25784 /**
25885 * @test
25986 */
260- public function setEndBeforeStart ()
87+ public function startedTillEndOnInfiniteStart ()
26188 {
262- $ yesterday = new DateTimeImmutable ('-1 day ' );
26389 $ tomorrow = new DateTimeImmutable ('+1 day ' );
90+ $ yesterday = new DateTimeImmutable ('-1 day ' );
91+
92+ $ range = new DateRange (null , $ tomorrow );
93+
94+ self ::assertTrue ($ range ->isStarted ());
26495
265- $ this ->expectException (DomainException::class);
266- $ this ->expectExceptionMessage ('Invalid end date, must be after start ' );
96+ $ range = new DateRange (null , $ yesterday );
26797
268- new DateRange ( $ tomorrow , $ yesterday );
98+ self :: assertFalse ( $ range -> isStarted () );
26999 }
270100
271101 /**
0 commit comments