comparison vendor/sabre/vobject/tests/VObject/FreeBusyGeneratorTest.php @ 7:430dbd5346f7

vendor sabre as distributed
author Charlie Root
date Sat, 13 Jan 2018 09:06:10 -0500
parents
children
comparison
equal deleted inserted replaced
6:cec75ba50afc 7:430dbd5346f7
1 <?php
2
3 namespace Sabre\VObject;
4
5 class FreeBusyGeneratorTest extends \PHPUnit_Framework_TestCase {
6
7 function getInput() {
8
9 $tests = array();
10
11 $blob = <<<ICS
12 BEGIN:VCALENDAR
13 BEGIN:VEVENT
14 UID:foobar
15 DTSTART:20110101T120000Z
16 DTEND:20110101T130000Z
17 END:VEVENT
18 END:VCALENDAR
19 ICS;
20
21 $tests[] = array(
22 $blob,
23 "20110101T120000Z/20110101T130000Z"
24 );
25
26 // opaque, shows up
27 $blob = <<<ICS
28 BEGIN:VCALENDAR
29 BEGIN:VEVENT
30 UID:foobar2
31 TRANSP:OPAQUE
32 DTSTART:20110101T130000Z
33 DTEND:20110101T140000Z
34 END:VEVENT
35 END:VCALENDAR
36 ICS;
37
38 $tests[] = array(
39 $blob,
40 "20110101T130000Z/20110101T140000Z"
41 );
42
43 // transparent, hidden
44 $blob = <<<ICS
45 BEGIN:VCALENDAR
46 BEGIN:VEVENT
47 UID:foobar3
48 TRANSP:TRANSPARENT
49 DTSTART:20110101T140000Z
50 DTEND:20110101T150000Z
51 END:VEVENT
52 END:VCALENDAR
53 ICS;
54
55 $tests[] = array(
56 $blob,
57 null,
58 );
59
60 // cancelled, hidden
61 $blob = <<<ICS
62 BEGIN:VCALENDAR
63 BEGIN:VEVENT
64 UID:foobar4
65 STATUS:CANCELLED
66 DTSTART:20110101T160000Z
67 DTEND:20110101T170000Z
68 END:VEVENT
69 END:VCALENDAR
70 ICS;
71
72 $tests[] = array(
73 $blob,
74 null,
75 );
76
77 // tentative, shows up
78 $blob = <<<ICS
79 BEGIN:VCALENDAR
80 BEGIN:VEVENT
81 UID:foobar5
82 STATUS:TENTATIVE
83 DTSTART:20110101T180000Z
84 DTEND:20110101T190000Z
85 END:VEVENT
86 END:VCALENDAR
87 ICS;
88
89 $tests[] = array(
90 $blob,
91 '20110101T180000Z/20110101T190000Z',
92 );
93
94 // outside of time-range, hidden
95 $blob = <<<ICS
96 BEGIN:VCALENDAR
97 BEGIN:VEVENT
98 UID:foobar6
99 DTSTART:20110101T090000Z
100 DTEND:20110101T100000Z
101 END:VEVENT
102 END:VCALENDAR
103 ICS;
104
105 $tests[] = array(
106 $blob,
107 null,
108 );
109
110 // outside of time-range, hidden
111 $blob = <<<ICS
112 BEGIN:VCALENDAR
113 BEGIN:VEVENT
114 UID:foobar7
115 DTSTART:20110104T090000Z
116 DTEND:20110104T100000Z
117 END:VEVENT
118 END:VCALENDAR
119 ICS;
120
121 $tests[] = array(
122 $blob,
123 null,
124 );
125
126 // using duration, shows up
127 $blob = <<<ICS
128 BEGIN:VCALENDAR
129 BEGIN:VEVENT
130 UID:foobar8
131 DTSTART:20110101T190000Z
132 DURATION:PT1H
133 END:VEVENT
134 END:VCALENDAR
135 ICS;
136
137 $tests[] = array(
138 $blob,
139 '20110101T190000Z/20110101T200000Z',
140 );
141
142 // Day-long event, shows up
143 $blob = <<<ICS
144 BEGIN:VCALENDAR
145 BEGIN:VEVENT
146 UID:foobar9
147 DTSTART;VALUE=DATE:20110102
148 END:VEVENT
149 END:VCALENDAR
150 ICS;
151
152 $tests[] = array(
153 $blob,
154 '20110102T000000Z/20110103T000000Z',
155 );
156
157
158 // No duration, does not show up
159 $blob = <<<ICS
160 BEGIN:VCALENDAR
161 BEGIN:VEVENT
162 UID:foobar10
163 DTSTART:20110101T200000Z
164 END:VEVENT
165 END:VCALENDAR
166 ICS;
167
168 $tests[] = array(
169 $blob,
170 null,
171 );
172
173 // encoded as object, shows up
174 $blob = <<<ICS
175 BEGIN:VCALENDAR
176 BEGIN:VEVENT
177 UID:foobar11
178 DTSTART:20110101T210000Z
179 DURATION:PT1H
180 END:VEVENT
181 END:VCALENDAR
182 ICS;
183
184 $tests[] = array(
185 Reader::read($blob),
186 '20110101T210000Z/20110101T220000Z',
187 );
188
189 // Freebusy. Some parts show up
190 $blob = <<<ICS
191 BEGIN:VCALENDAR
192 BEGIN:VFREEBUSY
193 FREEBUSY:20110103T010000Z/20110103T020000Z
194 FREEBUSY;FBTYPE=FREE:20110103T020000Z/20110103T030000Z
195 FREEBUSY:20110103T030000Z/20110103T040000Z,20110103T040000Z/20110103T050000Z
196 FREEBUSY:20120101T000000Z/20120101T010000Z
197 FREEBUSY:20110103T050000Z/PT1H
198 END:VFREEBUSY
199 END:VCALENDAR
200 ICS;
201
202 $tests[] = array(
203 Reader::read($blob),
204 array(
205 '20110103T010000Z/20110103T020000Z',
206 '20110103T030000Z/20110103T040000Z',
207 '20110103T040000Z/20110103T050000Z',
208 '20110103T050000Z/20110103T060000Z',
209 )
210 );
211
212
213 // Yearly recurrence rule, shows up
214 $blob = <<<ICS
215 BEGIN:VCALENDAR
216 BEGIN:VEVENT
217 UID:foobar13
218 DTSTART:20100101T220000Z
219 DTEND:20100101T230000Z
220 RRULE:FREQ=YEARLY
221 END:VEVENT
222 END:VCALENDAR
223 ICS;
224
225 $tests[] = array(
226 Reader::read($blob),
227 '20110101T220000Z/20110101T230000Z',
228 );
229
230
231 // Yearly recurrence rule + duration, shows up
232 $blob = <<<ICS
233 BEGIN:VCALENDAR
234 BEGIN:VEVENT
235 UID:foobar14
236 DTSTART:20100101T230000Z
237 DURATION:PT1H
238 RRULE:FREQ=YEARLY
239 END:VEVENT
240 END:VCALENDAR
241 ICS;
242
243 $tests[] = array(
244 Reader::read($blob),
245 '20110101T230000Z/20110102T000000Z',
246 );
247
248 // Floating time, no timezone
249 $blob = <<<ICS
250 BEGIN:VCALENDAR
251 BEGIN:VEVENT
252 UID:foobar
253 DTSTART:20110101T120000
254 DTEND:20110101T130000
255 END:VEVENT
256 END:VCALENDAR
257 ICS;
258
259 $tests[] = array(
260 $blob,
261 "20110101T120000Z/20110101T130000Z"
262 );
263
264 // Floating time + reference timezone
265 $blob = <<<ICS
266 BEGIN:VCALENDAR
267 BEGIN:VEVENT
268 UID:foobar
269 DTSTART:20110101T120000
270 DTEND:20110101T130000
271 END:VEVENT
272 END:VCALENDAR
273 ICS;
274
275 $tests[] = array(
276 $blob,
277 "20110101T170000Z/20110101T180000Z",
278 new \DateTimeZone('America/Toronto')
279 );
280
281 // All-day event
282 $blob = <<<ICS
283 BEGIN:VCALENDAR
284 BEGIN:VEVENT
285 UID:foobar
286 DTSTART;VALUE=DATE:20110101
287 END:VEVENT
288 END:VCALENDAR
289 ICS;
290
291 $tests[] = array(
292 $blob,
293 "20110101T000000Z/20110102T000000Z"
294 );
295
296 // All-day event + reference timezone
297 $blob = <<<ICS
298 BEGIN:VCALENDAR
299 BEGIN:VEVENT
300 UID:foobar
301 DTSTART;VALUE=DATE:20110101
302 END:VEVENT
303 END:VCALENDAR
304 ICS;
305
306 $tests[] = array(
307 $blob,
308 "20110101T050000Z/20110102T050000Z",
309 new \DateTimeZone('America/Toronto')
310 );
311 return $tests;
312
313 }
314
315 /**
316 * @dataProvider getInput
317 */
318 function testGenerator($input, $expected, $timeZone = null) {
319
320 $gen = new FreeBusyGenerator(
321 new \DateTime('20110101T110000Z', new \DateTimeZone('UTC')),
322 new \DateTime('20110103T110000Z', new \DateTimeZone('UTC')),
323 $input,
324 $timeZone
325 );
326
327 $result = $gen->getResult();
328
329 $expected = (array)$expected;
330
331 $freebusy = $result->VFREEBUSY->select('FREEBUSY');
332
333 foreach($freebusy as $fb) {
334
335 $this->assertContains((string)$fb, $expected, "$fb did not appear in our list of expected freebusy strings. This is concerning!");
336
337 $k = array_search((string)$fb, $expected);
338 unset($expected[$k]);
339
340 }
341 $this->assertTrue(
342 count($expected) === 0,
343 'There were elements in the expected array that were not found in the output: ' . "\n" . print_r($expected,true) . "\n" . $result->serialize()
344 );
345
346 }
347
348 function testGeneratorBaseObject() {
349
350 $obj = new Component\VCalendar();
351 $obj->METHOD = 'PUBLISH';
352
353 $gen = new FreeBusyGenerator();
354 $gen->setObjects(array());
355 $gen->setBaseObject($obj);
356
357 $result = $gen->getResult();
358
359 $this->assertEquals('PUBLISH', $result->METHOD->getValue());
360
361 }
362
363 /**
364 * @expectedException InvalidArgumentException
365 */
366 function testInvalidArg() {
367
368 $gen = new FreeBusyGenerator(
369 new \DateTime('2012-01-01'),
370 new \DateTime('2012-12-31'),
371 new \StdClass()
372 );
373
374 }
375
376 }