7
|
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 }
|