16ORGANIZER;CN=Strunk:mailto:strunk@example.org
17ATTENDEE;CN=One:mailto:one@example.org
18DTSTART:20140716T120000Z
31ORGANIZER;CN=Strunk:mailto:strunk@example.org
32ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
33DTSTART:20140716T120000Z
44 'component' =>
'VEVENT',
45 'sender' =>
'mailto:one@example.org',
46 'senderName' =>
'One',
47 'recipient' =>
'mailto:strunk@example.org',
48 'recipientName' =>
'Strunk',
59DTSTART:20140716T120000Z
61ORGANIZER;CN=Strunk:mailto:strunk@example.org
62ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
71 $this->
parse($oldMessage, $newMessage, $expected);
83ORGANIZER;CN=Strunk:mailto:strunk@example.org
84ATTENDEE;CN=One:mailto:one@example.org
85DTSTART:20140724T120000Z
99ORGANIZER;CN=Strunk:mailto:strunk@example.org
100ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=One:mailto:one@example.org
101DTSTART:20140724T120000Z
107ORGANIZER;CN=Strunk:mailto:strunk@example.org
108ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
109DTSTART:20140726T120000Z
110RECURRENCE-ID:20140726T120000Z
115ORGANIZER;CN=Strunk:mailto:strunk@example.org
116ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
117DTSTART:20140724T120000Z
118RECURRENCE-ID:20140724T120000Z
123ORGANIZER;CN=Strunk:mailto:strunk@example.org
124ATTENDEE;PARTSTAT=TENTATIVE;CN=One:mailto:one@example.org
125DTSTART:20140728T120000Z
126RECURRENCE-ID:20140728T120000Z
131ORGANIZER;CN=Strunk:mailto:strunk@example.org
132ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
133DTSTART:20140729T120000Z
134RECURRENCE-ID:20140729T120000Z
139ORGANIZER;CN=Strunk:mailto:strunk@example.org
140ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
141DTSTART:20140725T120000Z
142RECURRENCE-ID:20140725T120000Z
153 'component' =>
'VEVENT',
154 'sender' =>
'mailto:one@example.org',
155 'senderName' =>
'One',
156 'recipient' =>
'mailto:strunk@example.org',
157 'recipientName' =>
'Strunk',
168DTSTART:20140726T120000Z
170RECURRENCE-ID:20140726T120000Z
171ORGANIZER;CN=Strunk:mailto:strunk@example.org
172ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
178DTSTART:20140724T120000Z
180RECURRENCE-ID:20140724T120000Z
181ORGANIZER;CN=Strunk:mailto:strunk@example.org
182ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
188DTSTART:20140728T120000Z
190RECURRENCE-ID:20140728T120000Z
191ORGANIZER;CN=Strunk:mailto:strunk@example.org
192ATTENDEE;PARTSTAT=TENTATIVE;CN=One:mailto:one@example.org
198DTSTART:20140729T120000Z
200RECURRENCE-ID:20140729T120000Z
201ORGANIZER;CN=Strunk:mailto:strunk@example.org
202ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
208DTSTART:20140725T120000Z
210RECURRENCE-ID:20140725T120000Z
211ORGANIZER;CN=Strunk:mailto:strunk@example.org
212ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
221 $this->
parse($oldMessage, $newMessage, $expected);
233ORGANIZER;CN=Strunk:mailto:strunk@example.org
234ATTENDEE;CN=One:mailto:one@example.org
235DTSTART;VALUE=DATE:20140724
248ORGANIZER;CN=Strunk:mailto:strunk@example.org
249ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=One:mailto:one@example.org
250DTSTART;VALUE=DATE:20140724
255ORGANIZER;CN=Strunk:mailto:strunk@example.org
256ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
257DTSTART;VALUE=DATE:20140726
258RECURRENCE-ID;VALUE=DATE:20140726
263ORGANIZER;CN=Strunk:mailto:strunk@example.org
264ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
265DTSTART;VALUE=DATE:20140724
266RECURRENCE-ID;VALUE=DATE:20140724
271ORGANIZER;CN=Strunk:mailto:strunk@example.org
272ATTENDEE;PARTSTAT=TENTATIVE;CN=One:mailto:one@example.org
273DTSTART;VALUE=DATE:20140728
274RECURRENCE-ID;VALUE=DATE:20140728
279ORGANIZER;CN=Strunk:mailto:strunk@example.org
280ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
281DTSTART;VALUE=DATE:20140729
282RECURRENCE-ID;VALUE=DATE:20140729
287ORGANIZER;CN=Strunk:mailto:strunk@example.org
288ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
289DTSTART;VALUE=DATE:20140725
290RECURRENCE-ID;VALUE=DATE:20140725
301 'component' =>
'VEVENT',
302 'sender' =>
'mailto:one@example.org',
303 'senderName' =>
'One',
304 'recipient' =>
'mailto:strunk@example.org',
305 'recipientName' =>
'Strunk',
316DTSTART;VALUE=DATE:20140726
317RECURRENCE-ID;VALUE=DATE:20140726
318ORGANIZER;CN=Strunk:mailto:strunk@example.org
319ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
325DTSTART;VALUE=DATE:20140724
326RECURRENCE-ID;VALUE=DATE:20140724
327ORGANIZER;CN=Strunk:mailto:strunk@example.org
328ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
334DTSTART;VALUE=DATE:20140728
335RECURRENCE-ID;VALUE=DATE:20140728
336ORGANIZER;CN=Strunk:mailto:strunk@example.org
337ATTENDEE;PARTSTAT=TENTATIVE;CN=One:mailto:one@example.org
343DTSTART;VALUE=DATE:20140729
344RECURRENCE-ID;VALUE=DATE:20140729
345ORGANIZER;CN=Strunk:mailto:strunk@example.org
346ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
352DTSTART;VALUE=DATE:20140725
353RECURRENCE-ID;VALUE=DATE:20140725
354ORGANIZER;CN=Strunk:mailto:strunk@example.org
355ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
364 $this->
parse($oldMessage, $newMessage, $expected);
376ORGANIZER;CN=Strunk:mailto:strunk@example.org
377ATTENDEE;CN=One:mailto:one@example.org
378DTSTART:20140716T120000Z
390ORGANIZER;CN=Strunk:mailto:strunk@example.org
391ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=One:mailto:one@example.org
392DTSTART:20140716T120000Z
399 $this->
parse($oldMessage, $newMessage, $expected);
411ORGANIZER;CN=Strunk:mailto:strunk@example.org
412ATTENDEE;CN=One:mailto:one@example.org
413DTSTART:20140716T120000Z
425ORGANIZER;SCHEDULE-FORCE-SEND=REPLY;CN=Strunk:mailto:strunk@example.org
426ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=One:mailto:one@example.org
427DTSTART:20140716T120000Z
437 'component' =>
'VEVENT',
438 'sender' =>
'mailto:one@example.org',
439 'senderName' =>
'One',
440 'recipient' =>
'mailto:strunk@example.org',
441 'recipientName' =>
'Strunk',
452DTSTART:20140716T120000Z
453ORGANIZER;CN=Strunk:mailto:strunk@example.org
454ATTENDEE;PARTSTAT=NEEDS-ACTION;CN=One:mailto:one@example.org
461 $this->
parse($oldMessage, $newMessage, $expected);
473ORGANIZER;CN=Strunk:mailto:strunk@example.org
474ATTENDEE;CN=Two:mailto:two@example.org
475DTSTART:20140716T120000Z
487ORGANIZER;CN=Strunk:mailto:strunk@example.org
488ATTENDEE;PARTSTAT=ACCEPTED;CN=Two:mailto:two@example.org
489DTSTART:20140716T120000Z
495 $this->
parse($oldMessage, $newMessage, $expected);
516DTSTART:20140811T200000Z
518ORGANIZER:mailto:organizer@example.org
519ATTENDEE:mailto:one@example.org
530DTSTART:20140811T200000Z
532ORGANIZER:mailto:organizer@example.org
533ATTENDEE:mailto:one@example.org
534EXDATE:20140818T200000Z
544 'component' =>
'VEVENT',
545 'sender' =>
'mailto:one@example.org',
546 'senderName' =>
null,
547 'recipient' =>
'mailto:organizer@example.org',
548 'recipientName' =>
null,
559DTSTART:20140818T200000Z
560RECURRENCE-ID:20140818T200000Z
561ORGANIZER:mailto:organizer@example.org
562ATTENDEE;PARTSTAT=DECLINED:mailto:one@example.org
569 $this->
parse($oldMessage, $newMessage, $expected);
588DTSTART;TZID=America/Toronto:20140811T200000
590ORGANIZER:mailto:organizer@example.org
591ATTENDEE:mailto:one@example.org
602DTSTART;TZID=America/Toronto:20140811T200000
604ORGANIZER:mailto:organizer@example.org
605ATTENDEE:mailto:one@example.org
606EXDATE;TZID=America/Toronto:20140818T200000
616 'component' =>
'VEVENT',
617 'sender' =>
'mailto:one@example.org',
618 'senderName' =>
null,
619 'recipient' =>
'mailto:organizer@example.org',
620 'recipientName' =>
null,
631DTSTART;TZID=America/Toronto:20140818T200000
632RECURRENCE-ID;TZID=America/Toronto:20140818T200000
633ORGANIZER:mailto:organizer@example.org
634ATTENDEE;PARTSTAT=DECLINED:mailto:one@example.org
641 $this->
parse($oldMessage, $newMessage, $expected);
655SUMMARY:Weekly meeting
658DTSTART;VALUE=DATE:20140811
660ORGANIZER:mailto:organizer@example.org
661ATTENDEE:mailto:one@example.org
670SUMMARY:Weekly meeting
673DTSTART;VALUE=DATE:20140811
675ORGANIZER:mailto:organizer@example.org
676ATTENDEE:mailto:one@example.org
677EXDATE;VALUE=DATE:20140818
687 'component' =>
'VEVENT',
688 'sender' =>
'mailto:one@example.org',
689 'senderName' =>
null,
690 'recipient' =>
'mailto:organizer@example.org',
691 'recipientName' =>
null,
702DTSTART;VALUE=DATE:20140818
703SUMMARY:Weekly meeting
704RECURRENCE-ID;VALUE=DATE:20140818
705ORGANIZER:mailto:organizer@example.org
706ATTENDEE;PARTSTAT=DECLINED:mailto:one@example.org
713 $this->
parse($oldMessage, $newMessage, $expected);
725ORGANIZER;CN=Strunk:mailto:strunk@example.org
726ATTENDEE;CN=One:mailto:one@example.org
727DTSTART:20140716T120000Z
739ORGANIZER;CN=Strunk:mailto:strunk@example.org
740ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
741DTSTART:20140716T120000Z
752 'component' =>
'VEVENT',
753 'sender' =>
'mailto:one@example.org',
754 'senderName' =>
'One',
755 'recipient' =>
'mailto:strunk@example.org',
756 'recipientName' =>
'Strunk',
767DTSTART:20140716T120000Z
768ORGANIZER;CN=Strunk:mailto:strunk@example.org
769ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
778 $this->
parse($oldMessage, $newMessage, $expected);
791ORGANIZER;CN=Strunk:mailto:strunk@example.org
792ATTENDEE;CN=One:mailto:one@example.org
793DTSTART:20140716T120000Z
806ORGANIZER;CN=Strunk:mailto:strunk@example.org
807ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
808DTSTART:20140716T120000Z
817 $this->
parse($oldMessage, $newMessage, $expected);
839DTSTART:20140811T200000Z
841ORGANIZER:mailto:organizer@example.org
842ATTENDEE:mailto:one@example.org
845RECURRENCE-ID:20140818T200000Z
848DTSTART:20140818T200000Z
850ORGANIZER:mailto:organizer@example.org
851ATTENDEE;PARTSTAT=DECLINED:mailto:one@example.org
862DTSTART:20140811T200000Z
864ORGANIZER:mailto:organizer@example.org
865ATTENDEE:mailto:one@example.org
866EXDATE:20140818T200000Z
873 $this->
parse($oldMessage, $newMessage, $expected);
885ORGANIZER;CN=Strunk:mailto:strunk@example.org
886ATTENDEE;CN=One:mailto:one@example.org
887DTSTART:20140716T120000Z
899ORGANIZER;SCHEDULE-AGENT=CLIENT;CN=Strunk:mailto:strunk@example.org
900ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
901DTSTART:20140716T120000Z
909 $this->
parse($oldMessage, $newMessage, $expected);
921ORGANIZER;CN=Strunk:mailto:strunk@example.org
922ATTENDEE;CN=One:mailto:one@example.org
923DTSTART;VALUE=DATE:20140716
935ORGANIZER;CN=Strunk:mailto:strunk@example.org
936ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
937DTSTART;VALUE=DATE:20140716
948 'component' =>
'VEVENT',
949 'sender' =>
'mailto:one@example.org',
950 'senderName' =>
'One',
951 'recipient' =>
'mailto:strunk@example.org',
952 'recipientName' =>
'Strunk',
963DTSTART;VALUE=DATE:20140716
964ORGANIZER;CN=Strunk:mailto:strunk@example.org
965ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
974 $this->
parse($oldMessage, $newMessage, $expected);
993ORGANIZER;CN=Strunk:mailto:strunk@example.org
994ATTENDEE;CN=One:mailto:one@example.org
995RECURRENCE-ID:20140724T120000Z
996DTSTART:20140724T120000Z
1003 $newMessage = <<<ICS
1009ORGANIZER;CN=Strunk:mailto:strunk@example.org
1010ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
1011RECURRENCE-ID:20140724T120000Z
1012DTSTART:20140724T120000Z
1023 'method' =>
'REPLY',
1024 'component' =>
'VEVENT',
1025 'sender' =>
'mailto:one@example.org',
1026 'senderName' =>
'One',
1027 'recipient' =>
'mailto:strunk@example.org',
1028 'recipientName' =>
'Strunk',
1038DTSTART:20140724T120000Z
1040RECURRENCE-ID:20140724T120000Z
1041ORGANIZER;CN=Strunk:mailto:strunk@example.org
1042ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
1051 $this->
parse($oldMessage, $newMessage, $expected);
1063 $oldMessage = <<<ICS
1070ORGANIZER;CN=Strunk:mailto:strunk@example.org
1071DTSTART:20140716T120000Z
1076RECURRENCE-ID:20140717T120000Z
1079ORGANIZER;CN=Strunk:mailto:strunk@example.org
1080DTSTART:20140717T120000Z
1087 $newMessage = <<<ICS
1094ORGANIZER;CN=Strunk:mailto:strunk@example.org
1095DTSTART:20140716T120000Z
1100RECURRENCE-ID:20140717T120000Z
1103ORGANIZER;CN=Strunk:mailto:strunk@example.org
1104ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
1105DTSTART:20140717T120000Z
1114 'method' =>
'REPLY',
1115 'component' =>
'VEVENT',
1116 'sender' =>
'mailto:one@example.org',
1117 'senderName' =>
'One',
1118 'recipient' =>
'mailto:strunk@example.org',
1119 'recipientName' =>
'Strunk',
1129DTSTART:20140717T120000Z
1131RECURRENCE-ID:20140717T120000Z
1132ORGANIZER;CN=Strunk:mailto:strunk@example.org
1133ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
1143 $this->
parse($oldMessage, $newMessage, $expected);
An exception for terminatinating execution or to throw for unit testing.
testCreateReplyByException()
In this test, an event exists in an attendees calendar.
testDontCreateReplyWhenEventWasDeclined()
In this test, a new exception is created by an attendee as well.
testCreateReplyByExceptionTz()
This test is identical to the last, but now we're working with timezones.
testCreateReplyByExceptionAllDay()
@depends testCreateReplyByException
testPartyCrasher()
A party crasher is an attendee that accepted an event, but was not in any original invite.
testReplyNoMasterEvent()
This function tests an attendee updating their status to an event where they don't have the master ev...
testScheduleAgentOnOrganizer()
testDeclinedCancelledEvent()
Utilities for testing the broker.
parse($oldMessage, $newMessage, $expected=[], $currentUser='mailto:one @example.org')
const VERSION
Full version number.