# Scheduling invalid actions # Event has no scheduling information > put x@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect NoSchedulingInfo > reset # X is not the organizer > put x@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect NotOrganizerNorAttendee > reset # No attendees > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect NothingToSend > reset # Organizer with client scheduling agent > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER;SCHEDULE-AGENT=CLIENT:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect OtherSchedulingAgent > reset # Single participant with client scheduling agent > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;SCHEDULE-AGENT=CLIENT;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect NothingToSend > reset # Only send updates to clients with server scheduling agent > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:d@example.com ATTENDEE;SCHEDULE-AGENT=CLIENT;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: a@example.com to: d@example.com summary: invite summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "b@example.com", name: Some("B"), is_organizer: false }, ItipParticipant { email: "d@example.com", name: Some("B"), is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 }) summary.summary: Text("Conference") BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T2100000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=NEEDS-ACTION:mailto:b@ex ample.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B;PARTSTAT=NEEDS-ACTION:mailto:d@ex ample.com ORGANIZER:mailto:a@example.com UID:calsrv.example.com-873970198738777@example.com DTSTAMP:0 SEQUENCE:0 END:VEVENT END:VCALENDAR # Writing the same event again should not send a new request > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:d@example.com ATTENDEE;SCHEDULE-AGENT=CLIENT;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect NothingToSend # Adding a comment and a custom property should not send a new request > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:d@example.com ATTENDEE;SCHEDULE-AGENT=CLIENT;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference COMMENT:This is a comment X-EXAMPLE:This is an example UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect NothingToSend > reset # Multiple object types should be rejected > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT BEGIN:VTODO ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VTODO END:VCALENDAR > expect MultipleObjectTypes > reset # Multiple organizers should be rejected > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT ORGANIZER:mailto:d@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=D:mailto:d@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect MultipleOrganizer > reset # Different UIDs should be rejected > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:other-uid@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect MultipleUid > reset # Multiple object instances should be rejected > put a@example.com calsrv.example.com-873970198738777@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z RECURRENCE-ID:19970701T200000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:mailto:b@example.com DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T2100000Z RECURRENCE-ID:19970701T200000Z SUMMARY:Conference UID:calsrv.example.com-873970198738777@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect MultipleObjectInstances > reset # Attendee whose mailto URI percent-encodes a display name is invited at the enclosed addr-spec > put a@example.com percent-encoded-attendee@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="John Doe";EMAIL="John Doe ":mailto:john%20doe%20%3Cjohn.doe@example.net%3E DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T210000Z SUMMARY:Conference UID:percent-encoded-attendee@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: a@example.com to: john.doe@example.net summary: invite summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "john.doe@example.net", name: Some("John Doe"), is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 }) summary.summary: Text("Conference") BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T210000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="John Doe";EMAIL="John Doe ";PARTSTAT=NEEDS-ACTION:mailto:john%20doe%20%3Cjohn.doe@exam ple.net%3E ORGANIZER:mailto:a@example.com UID:percent-encoded-attendee@example.com DTSTAMP:0 SEQUENCE:0 END:VEVENT END:VCALENDAR > reset # Attendee whose mailto URI percent-encodes the addr-spec is decoded > put a@example.com percent-encoded-addrspec@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="Jane Doe":mailto:jane%2Edoe@example.net?subject=Conference DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T210000Z SUMMARY:Conference UID:percent-encoded-addrspec@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > expect from: a@example.com to: jane.doe@example.net summary: invite summary.attendee: Participants([ItipParticipant { email: "a@example.com", name: None, is_organizer: true }, ItipParticipant { email: "jane.doe@example.net", name: Some("Jane Doe"), is_organizer: false }]) summary.dtstart: Time(ItipTime { start: 867787200, tz_id: 32768 }) summary.summary: Text("Conference") BEGIN:VCALENDAR METHOD:REQUEST PRODID:-//INBUXA//INBUXA Server//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T210000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="Jane Doe";PARTSTAT=NEEDS-ACTION:ma ilto:jane%2Edoe@example.net?subject=Conference ORGANIZER:mailto:a@example.com UID:percent-encoded-addrspec@example.com DTSTAMP:0 SEQUENCE:0 END:VEVENT END:VCALENDAR > reset # Attendee whose address cannot be parsed is flagged with SCHEDULE-STATUS 3.7 > put a@example.com unreachable-attendee@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT ORGANIZER:mailto:a@example.com ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="Jane Doe":mailto:jane.doe@example.net ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="Mike Douglass":mailto:not-a-calendar-user DTSTAMP:19970611T190000Z DTSTART:19970701T200000Z DTEND:19970701T210000Z SUMMARY:Conference UID:unreachable-attendee@example.com SEQUENCE:0 STATUS:CONFIRMED END:VEVENT END:VCALENDAR > get a@example.com unreachable-attendee@example.com BEGIN:VCALENDAR PRODID:-//Example/ExampleCalendarClient//EN VERSION:2.0 BEGIN:VEVENT STATUS:CONFIRMED SUMMARY:Conference DTEND:19970701T210000Z DTSTART:19970701T200000Z ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=A:mailto:a@example.com ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="Jane Doe":mailto:jane.doe@example. net ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN="Mike Douglass";SCHEDULE-STATUS=3.7 :mailto:not-a-calendar-user ORGANIZER:mailto:a@example.com UID:unreachable-attendee@example.com DTSTAMP:0 SEQUENCE:0 END:VEVENT END:VCALENDAR