7
|
1 <?php
|
|
2
|
|
3 namespace Sabre\VObject\ITip;
|
|
4
|
|
5 class BrokerNewEventTest extends \PHPUnit_Framework_TestCase {
|
|
6
|
|
7 function testNoAttendee() {
|
|
8
|
|
9 $message = <<<ICS
|
|
10 BEGIN:VCALENDAR
|
|
11 BEGIN:VEVENT
|
|
12 UID:foobar
|
|
13 DTSTART:20140811T220000Z
|
|
14 END:VEVENT
|
|
15 END:VCALENDAR
|
|
16 ICS;
|
|
17
|
|
18 $result = $this->parse($message);
|
|
19
|
|
20 }
|
|
21
|
|
22 function testVTODO() {
|
|
23
|
|
24 $message = <<<ICS
|
|
25 BEGIN:VCALENDAR
|
|
26 BEGIN:VTODO
|
|
27 UID:foobar
|
|
28 END:VTODO
|
|
29 END:VCALENDAR
|
|
30 ICS;
|
|
31
|
|
32 $result = $this->parse($message);
|
|
33
|
|
34 }
|
|
35
|
|
36 function testSimpleInvite() {
|
|
37
|
|
38 $message = <<<ICS
|
|
39 BEGIN:VCALENDAR
|
|
40 VERSION:2.0
|
|
41 BEGIN:VEVENT
|
|
42 UID:foobar
|
|
43 DTSTART:20140811T220000Z
|
|
44 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
45 ATTENDEE;CN=White:mailto:white@example.org
|
|
46 END:VEVENT
|
|
47 END:VCALENDAR
|
|
48 ICS;
|
|
49
|
|
50 $version = \Sabre\VObject\Version::VERSION;
|
|
51 $expectedMessage = <<<ICS
|
|
52 BEGIN:VCALENDAR
|
|
53 VERSION:2.0
|
|
54 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
55 CALSCALE:GREGORIAN
|
|
56 METHOD:REQUEST
|
|
57 BEGIN:VEVENT
|
|
58 UID:foobar
|
|
59 DTSTART:20140811T220000Z
|
|
60 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
61 ATTENDEE;CN=White;PARTSTAT=NEEDS-ACTION:mailto:white@example.org
|
|
62 END:VEVENT
|
|
63 END:VCALENDAR
|
|
64 ICS;
|
|
65
|
|
66 $expected = array(
|
|
67 array(
|
|
68 'uid' => 'foobar',
|
|
69 'method' => 'REQUEST',
|
|
70 'component' => 'VEVENT',
|
|
71 'sender' => 'mailto:strunk@example.org',
|
|
72 'senderName' => 'Strunk',
|
|
73 'recipient' => 'mailto:white@example.org',
|
|
74 'recipientName' => 'White',
|
|
75 'message' => $expectedMessage,
|
|
76 ),
|
|
77 );
|
|
78
|
|
79 $result = $this->parse($message, $expected);
|
|
80
|
|
81 }
|
|
82
|
|
83 /**
|
|
84 * @expectedException \Sabre\VObject\ITip\ITipException
|
|
85 */
|
|
86 function testBrokenEventUIDMisMatch() {
|
|
87
|
|
88 $message = <<<ICS
|
|
89 BEGIN:VCALENDAR
|
|
90 VERSION:2.0
|
|
91 BEGIN:VEVENT
|
|
92 UID:foobar
|
|
93 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
94 ATTENDEE;CN=White:mailto:white@example.org
|
|
95 END:VEVENT
|
|
96 BEGIN:VEVENT
|
|
97 UID:foobar2
|
|
98 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
99 ATTENDEE;CN=White:mailto:white@example.org
|
|
100 END:VEVENT
|
|
101 END:VCALENDAR
|
|
102 ICS;
|
|
103
|
|
104 $expected = array();
|
|
105 $this->parse($message, array());
|
|
106
|
|
107 }
|
|
108 /**
|
|
109 * @expectedException \Sabre\VObject\ITip\ITipException
|
|
110 */
|
|
111 function testBrokenEventOrganizerMisMatch() {
|
|
112
|
|
113 $message = <<<ICS
|
|
114 BEGIN:VCALENDAR
|
|
115 VERSION:2.0
|
|
116 BEGIN:VEVENT
|
|
117 UID:foobar
|
|
118 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
119 ATTENDEE;CN=White:mailto:white@example.org
|
|
120 END:VEVENT
|
|
121 BEGIN:VEVENT
|
|
122 UID:foobar
|
|
123 ORGANIZER:mailto:foo@example.org
|
|
124 ATTENDEE;CN=White:mailto:white@example.org
|
|
125 END:VEVENT
|
|
126 END:VCALENDAR
|
|
127 ICS;
|
|
128
|
|
129 $expected = array();
|
|
130 $this->parse($message, array());
|
|
131
|
|
132 }
|
|
133
|
|
134 function testRecurrenceInvite() {
|
|
135
|
|
136 $message = <<<ICS
|
|
137 BEGIN:VCALENDAR
|
|
138 VERSION:2.0
|
|
139 BEGIN:VEVENT
|
|
140 UID:foobar
|
|
141 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
142 ATTENDEE;CN=One:mailto:one@example.org
|
|
143 ATTENDEE;CN=Two:mailto:two@example.org
|
|
144 DTSTART:20140716T120000Z
|
|
145 RRULE:FREQ=DAILY
|
|
146 EXDATE:20140717T120000Z
|
|
147 END:VEVENT
|
|
148 BEGIN:VEVENT
|
|
149 UID:foobar
|
|
150 RECURRENCE-ID:20140718T120000Z
|
|
151 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
152 ATTENDEE;CN=Two:mailto:two@example.org
|
|
153 ATTENDEE;CN=Three:mailto:three@example.org
|
|
154 DTSTART:20140718T120000Z
|
|
155 END:VEVENT
|
|
156 END:VCALENDAR
|
|
157 ICS;
|
|
158
|
|
159 $version = \Sabre\VObject\Version::VERSION;
|
|
160
|
|
161 $expected = array(
|
|
162 array(
|
|
163 'uid' => 'foobar',
|
|
164 'method' => 'REQUEST',
|
|
165 'component' => 'VEVENT',
|
|
166 'sender' => 'mailto:strunk@example.org',
|
|
167 'senderName' => 'Strunk',
|
|
168 'recipient' => 'mailto:one@example.org',
|
|
169 'recipientName' => 'One',
|
|
170 'message' => <<<ICS
|
|
171 BEGIN:VCALENDAR
|
|
172 VERSION:2.0
|
|
173 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
174 CALSCALE:GREGORIAN
|
|
175 METHOD:REQUEST
|
|
176 BEGIN:VEVENT
|
|
177 UID:foobar
|
|
178 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
179 ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
|
180 ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
|
181 DTSTART:20140716T120000Z
|
|
182 RRULE:FREQ=DAILY
|
|
183 EXDATE:20140717T120000Z,20140718T120000Z
|
|
184 END:VEVENT
|
|
185 END:VCALENDAR
|
|
186 ICS
|
|
187
|
|
188 ),
|
|
189 array(
|
|
190 'uid' => 'foobar',
|
|
191 'method' => 'REQUEST',
|
|
192 'component' => 'VEVENT',
|
|
193 'sender' => 'mailto:strunk@example.org',
|
|
194 'senderName' => 'Strunk',
|
|
195 'recipient' => 'mailto:two@example.org',
|
|
196 'recipientName' => 'Two',
|
|
197 'message' => <<<ICS
|
|
198 BEGIN:VCALENDAR
|
|
199 VERSION:2.0
|
|
200 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
201 CALSCALE:GREGORIAN
|
|
202 METHOD:REQUEST
|
|
203 BEGIN:VEVENT
|
|
204 UID:foobar
|
|
205 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
206 ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
|
207 ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
|
208 DTSTART:20140716T120000Z
|
|
209 RRULE:FREQ=DAILY
|
|
210 EXDATE:20140717T120000Z
|
|
211 END:VEVENT
|
|
212 BEGIN:VEVENT
|
|
213 UID:foobar
|
|
214 RECURRENCE-ID:20140718T120000Z
|
|
215 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
216 ATTENDEE;CN=Two:mailto:two@example.org
|
|
217 ATTENDEE;CN=Three:mailto:three@example.org
|
|
218 DTSTART:20140718T120000Z
|
|
219 END:VEVENT
|
|
220 END:VCALENDAR
|
|
221 ICS
|
|
222
|
|
223 ),
|
|
224 array(
|
|
225 'uid' => 'foobar',
|
|
226 'method' => 'REQUEST',
|
|
227 'component' => 'VEVENT',
|
|
228 'sender' => 'mailto:strunk@example.org',
|
|
229 'senderName' => 'Strunk',
|
|
230 'recipient' => 'mailto:three@example.org',
|
|
231 'recipientName' => 'Three',
|
|
232 'message' => <<<ICS
|
|
233 BEGIN:VCALENDAR
|
|
234 VERSION:2.0
|
|
235 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
236 CALSCALE:GREGORIAN
|
|
237 METHOD:REQUEST
|
|
238 BEGIN:VEVENT
|
|
239 UID:foobar
|
|
240 RECURRENCE-ID:20140718T120000Z
|
|
241 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
242 ATTENDEE;CN=Two:mailto:two@example.org
|
|
243 ATTENDEE;CN=Three:mailto:three@example.org
|
|
244 DTSTART:20140718T120000Z
|
|
245 END:VEVENT
|
|
246 END:VCALENDAR
|
|
247 ICS
|
|
248
|
|
249 ),
|
|
250 );
|
|
251
|
|
252 $result = $this->parse($message, $expected);
|
|
253
|
|
254 }
|
|
255
|
|
256 function testRecurrenceInvite2() {
|
|
257
|
|
258 // This method tests a nearly identical path, but in this case the
|
|
259 // master event does not have an EXDATE.
|
|
260 $message = <<<ICS
|
|
261 BEGIN:VCALENDAR
|
|
262 VERSION:2.0
|
|
263 BEGIN:VEVENT
|
|
264 UID:foobar
|
|
265 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
266 ATTENDEE;CN=One:mailto:one@example.org
|
|
267 ATTENDEE;CN=Two:mailto:two@example.org
|
|
268 DTSTART:20140716T120000Z
|
|
269 RRULE:FREQ=DAILY
|
|
270 END:VEVENT
|
|
271 BEGIN:VEVENT
|
|
272 UID:foobar
|
|
273 RECURRENCE-ID:20140718T120000Z
|
|
274 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
275 ATTENDEE;CN=Two:mailto:two@example.org
|
|
276 ATTENDEE;CN=Three:mailto:three@example.org
|
|
277 DTSTART:20140718T120000Z
|
|
278 END:VEVENT
|
|
279 END:VCALENDAR
|
|
280 ICS;
|
|
281
|
|
282 $version = \Sabre\VObject\Version::VERSION;
|
|
283
|
|
284 $expected = array(
|
|
285 array(
|
|
286 'uid' => 'foobar',
|
|
287 'method' => 'REQUEST',
|
|
288 'component' => 'VEVENT',
|
|
289 'sender' => 'mailto:strunk@example.org',
|
|
290 'senderName' => 'Strunk',
|
|
291 'recipient' => 'mailto:one@example.org',
|
|
292 'recipientName' => 'One',
|
|
293 'message' => <<<ICS
|
|
294 BEGIN:VCALENDAR
|
|
295 VERSION:2.0
|
|
296 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
297 CALSCALE:GREGORIAN
|
|
298 METHOD:REQUEST
|
|
299 BEGIN:VEVENT
|
|
300 UID:foobar
|
|
301 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
302 ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
|
303 ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
|
304 DTSTART:20140716T120000Z
|
|
305 RRULE:FREQ=DAILY
|
|
306 EXDATE:20140718T120000Z
|
|
307 END:VEVENT
|
|
308 END:VCALENDAR
|
|
309 ICS
|
|
310
|
|
311 ),
|
|
312 array(
|
|
313 'uid' => 'foobar',
|
|
314 'method' => 'REQUEST',
|
|
315 'component' => 'VEVENT',
|
|
316 'sender' => 'mailto:strunk@example.org',
|
|
317 'senderName' => 'Strunk',
|
|
318 'recipient' => 'mailto:two@example.org',
|
|
319 'recipientName' => 'Two',
|
|
320 'message' => <<<ICS
|
|
321 BEGIN:VCALENDAR
|
|
322 VERSION:2.0
|
|
323 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
324 CALSCALE:GREGORIAN
|
|
325 METHOD:REQUEST
|
|
326 BEGIN:VEVENT
|
|
327 UID:foobar
|
|
328 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
329 ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
|
330 ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
|
331 DTSTART:20140716T120000Z
|
|
332 RRULE:FREQ=DAILY
|
|
333 END:VEVENT
|
|
334 BEGIN:VEVENT
|
|
335 UID:foobar
|
|
336 RECURRENCE-ID:20140718T120000Z
|
|
337 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
338 ATTENDEE;CN=Two:mailto:two@example.org
|
|
339 ATTENDEE;CN=Three:mailto:three@example.org
|
|
340 DTSTART:20140718T120000Z
|
|
341 END:VEVENT
|
|
342 END:VCALENDAR
|
|
343 ICS
|
|
344
|
|
345 ),
|
|
346 array(
|
|
347 'uid' => 'foobar',
|
|
348 'method' => 'REQUEST',
|
|
349 'component' => 'VEVENT',
|
|
350 'sender' => 'mailto:strunk@example.org',
|
|
351 'senderName' => 'Strunk',
|
|
352 'recipient' => 'mailto:three@example.org',
|
|
353 'recipientName' => 'Three',
|
|
354 'message' => <<<ICS
|
|
355 BEGIN:VCALENDAR
|
|
356 VERSION:2.0
|
|
357 PRODID:-//Sabre//Sabre VObject $version//EN
|
|
358 CALSCALE:GREGORIAN
|
|
359 METHOD:REQUEST
|
|
360 BEGIN:VEVENT
|
|
361 UID:foobar
|
|
362 RECURRENCE-ID:20140718T120000Z
|
|
363 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
364 ATTENDEE;CN=Two:mailto:two@example.org
|
|
365 ATTENDEE;CN=Three:mailto:three@example.org
|
|
366 DTSTART:20140718T120000Z
|
|
367 END:VEVENT
|
|
368 END:VCALENDAR
|
|
369 ICS
|
|
370
|
|
371 ),
|
|
372 );
|
|
373
|
|
374 $result = $this->parse($message, $expected);
|
|
375
|
|
376 }
|
|
377
|
|
378 function testScheduleAgentClient() {
|
|
379
|
|
380 $message = <<<ICS
|
|
381 BEGIN:VCALENDAR
|
|
382 VERSION:2.0
|
|
383 BEGIN:VEVENT
|
|
384 UID:foobar
|
|
385 DTSTART:20140811T220000Z
|
|
386 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
387 ATTENDEE;CN=White;SCHEDULE-AGENT=CLIENT:mailto:white@example.org
|
|
388 END:VEVENT
|
|
389 END:VCALENDAR
|
|
390 ICS;
|
|
391
|
|
392 $version = \Sabre\VObject\Version::VERSION;
|
|
393
|
|
394 $expected = array();
|
|
395 $result = $this->parse($message, $expected);
|
|
396
|
|
397 }
|
|
398
|
|
399 /**
|
|
400 * @expectedException Sabre\VObject\ITip\ITipException
|
|
401 */
|
|
402 function testMultipleUID() {
|
|
403
|
|
404 $message = <<<ICS
|
|
405 BEGIN:VCALENDAR
|
|
406 VERSION:2.0
|
|
407 BEGIN:VEVENT
|
|
408 UID:foobar
|
|
409 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
410 ATTENDEE;CN=One:mailto:one@example.org
|
|
411 ATTENDEE;CN=Two:mailto:two@example.org
|
|
412 DTSTART:20140716T120000Z
|
|
413 RRULE:FREQ=DAILY
|
|
414 END:VEVENT
|
|
415 BEGIN:VEVENT
|
|
416 UID:foobar2
|
|
417 RECURRENCE-ID:20140718T120000Z
|
|
418 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
419 ATTENDEE;CN=Two:mailto:two@example.org
|
|
420 ATTENDEE;CN=Three:mailto:three@example.org
|
|
421 DTSTART:20140718T120000Z
|
|
422 END:VEVENT
|
|
423 END:VCALENDAR
|
|
424 ICS;
|
|
425
|
|
426 $version = \Sabre\VObject\Version::VERSION;
|
|
427 $result = $this->parse($message, array());
|
|
428
|
|
429 }
|
|
430
|
|
431 /**
|
|
432 * @expectedException Sabre\VObject\ITip\SameOrganizerForAllComponentsException
|
|
433 *
|
|
434 */
|
|
435 function testChangingOrganizers() {
|
|
436
|
|
437 $message = <<<ICS
|
|
438 BEGIN:VCALENDAR
|
|
439 VERSION:2.0
|
|
440 BEGIN:VEVENT
|
|
441 UID:foobar
|
|
442 ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
443 ATTENDEE;CN=One:mailto:one@example.org
|
|
444 ATTENDEE;CN=Two:mailto:two@example.org
|
|
445 DTSTART:20140716T120000Z
|
|
446 RRULE:FREQ=DAILY
|
|
447 END:VEVENT
|
|
448 BEGIN:VEVENT
|
|
449 UID:foobar
|
|
450 RECURRENCE-ID:20140718T120000Z
|
|
451 ORGANIZER;CN=Strunk:mailto:ew@example.org
|
|
452 ATTENDEE;CN=Two:mailto:two@example.org
|
|
453 ATTENDEE;CN=Three:mailto:three@example.org
|
|
454 DTSTART:20140718T120000Z
|
|
455 END:VEVENT
|
|
456 END:VCALENDAR
|
|
457 ICS;
|
|
458
|
|
459 $version = \Sabre\VObject\Version::VERSION;
|
|
460 $result = $this->parse($message, array());
|
|
461
|
|
462 }
|
|
463 function testNoOrganizerHasAttendee() {
|
|
464
|
|
465 $message = <<<ICS
|
|
466 BEGIN:VCALENDAR
|
|
467 BEGIN:VEVENT
|
|
468 UID:foobar
|
|
469 DTSTART:20140811T220000Z
|
|
470 ATTENDEE;CN=Two:mailto:two@example.org
|
|
471 END:VEVENT
|
|
472 END:VCALENDAR
|
|
473 ICS;
|
|
474
|
|
475 $this->parse($message, array());
|
|
476
|
|
477 }
|
|
478
|
|
479 function parse($message, $expected = array()) {
|
|
480
|
|
481 $broker = new Broker();
|
|
482 $result = $broker->parseEvent($message, 'mailto:strunk@example.org');
|
|
483
|
|
484 $this->assertEquals(count($expected), count($result));
|
|
485
|
|
486 foreach($expected as $index=>$ex) {
|
|
487
|
|
488 $message = $result[$index];
|
|
489
|
|
490 foreach($ex as $key=>$val) {
|
|
491
|
|
492 if ($key==='message') {
|
|
493 $this->assertEquals(
|
|
494 str_replace("\n", "\r\n", $val),
|
|
495 rtrim($message->message->serialize(), "\r\n")
|
|
496 );
|
|
497 } else {
|
|
498 $this->assertEquals($val, $message->$key);
|
|
499 }
|
|
500
|
|
501 }
|
|
502
|
|
503 }
|
|
504
|
|
505 }
|
|
506
|
|
507 }
|