Index: akonadi/calendar/scheduler_p.cpp =================================================================== --- akonadi/calendar/scheduler_p.cpp +++ akonadi/calendar/scheduler_p.cpp @@ -414,7 +414,7 @@ kDebug() << "removing existing incidence " << existingUid; if (incidence->hasRecurrenceId()) { - Incidence::Ptr existingInstance = calendar->incidence(incidence->instanceIdentifier()); + Incidence::Ptr existingInstance = calendar->incidence(existingUid, incidence->recurrenceId()); if (existingInstance) { existingInstance->setStatus(Incidence::StatusCanceled); Index: akonadi/calendar/tests/itip_data/expected_data/cancel1 =================================================================== --- akonadi/calendar/tests/itip_data/expected_data/cancel1 +++ akonadi/calendar/tests/itip_data/expected_data/cancel1 @@ -33,9 +33,9 @@ DESCRIPTION:Foo SUMMARY:Daily stuff STATUS:CANCELLED -RECURRENCE-ID:20131024T000000Z -DTSTART:20131024T000000Z -DTEND:20131024T010000Z +RECURRENCE-ID:20131023T090000Z +DTSTART:20131023T000000Z +DTEND:20131023T010000Z TRANSP:OPAQUE END:VEVENT END:VCALENDAR Index: akonadi/calendar/tests/itip_data/expected_data/cancel2 =================================================================== --- akonadi/calendar/tests/itip_data/expected_data/cancel2 +++ akonadi/calendar/tests/itip_data/expected_data/cancel2 @@ -20,22 +20,19 @@ TRANSP:OPAQUE END:VEVENT BEGIN:VEVENT -ORGANIZER:MAILTO:their-email@dev.nul -DTSTAMP:20131025T103442Z -ATTENDEE;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT; - X-UID=their-email@dev.nul:mailto:their-email@dev.nul -ATTENDEE;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT; - X-UID=unittests@dev.nul:mailto:unittests@dev.nul -CREATED:20131023T175039Z UID:uosj936i6arrtl9c2i5r2mfuvg -SEQUENCE:1 -LAST-MODIFIED:20131025T103442Z -DESCRIPTION:Foo -SUMMARY:Daily stuff -STATUS:CANCELLED -RECURRENCE-ID:20131024T000000Z +SUMMARY:exception +ATTENDEE;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT; + X-UID=140218344167648:mailto:their-email@dev.nul +ATTENDEE;RSVP=TRUE;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT;mailto:unittests@dev.nul +ORGANIZER;mailto:their-email@dev.nul DTSTART:20131024T000000Z DTEND:20131024T010000Z +STATUS:CANCELLED +CLASS:PUBLIC TRANSP:OPAQUE +RECURRENCE-ID:20131023T090000Z +DTSTAMP:20131026T004419Z +DESCRIPTION:some explanation END:VEVENT END:VCALENDAR Index: akonadi/calendar/tests/itip_data/invited_us_daily_cancel_recid01 =================================================================== --- akonadi/calendar/tests/itip_data/invited_us_daily_cancel_recid01 +++ akonadi/calendar/tests/itip_data/invited_us_daily_cancel_recid01 @@ -9,14 +9,14 @@ X-UID=140218344167648:mailto:their-email@dev.nul ATTENDEE;RSVP=TRUE:mailto:unittests@dev.nul ORGANIZER;mailto:their-email@dev.nul -DTSTART:20131024T000000Z -DTEND:20131024T010000Z +DTSTART:20131023T000000Z +DTEND:20131023T010000Z STATUS:CANCELLED CLASS:PUBLIC TRANSP:OPAQUE -RECURRENCE-ID:20131024T000000Z +RECURRENCE-ID:20131023T090000Z DTSTAMP:20131026T004419Z SEQUENCE:1 DESCRIPTION:Foo END:VEVENT END:VCALENDAR \ No newline at end of file Index: akonadi/calendar/tests/itiphandlertest.cpp =================================================================== --- akonadi/calendar/tests/itiphandlertest.cpp +++ akonadi/calendar/tests/itiphandlertest.cpp @@ -468,13 +468,21 @@ // We accept a recurring event, then we accept a CANCEL with recuring-id. // The result is that a exception with status CANCELLED should be created, and our main incidence // should not be touched + expected_filename = QLatin1String("expected_data/cancel1"); invitation_filenames.clear(); invitation_filenames << QLatin1String("invited_us_daily") << QLatin1String("invited_us_daily_cancel_recid01"); - expected_filename = QLatin1String("expected_data/cancel1"); - actions << QLatin1String("accepted") << QLatin1String("cancel"); + actions.clear(); + actions << QLatin1String("accepted") << QLatin1String("accepted"); QTest::newRow("accept recid cancel") << invitation_filenames << expected_filename << actions; //---------------------------------------------------------------------------------------------- + // We accept a recurrening event, get an exception accept that too and get a cancel for the exception afterwards + expected_filename = QLatin1String("expected_data/cancel2"); + invitation_filenames.clear(); + invitation_filenames << QLatin1String("invited_us_daily") << QLatin1String("invited_us_daily_recid01") << QLatin1String("invited_us_daily_cancel_recid01"); + actions.clear(); + actions << QLatin1String("accepted") << QLatin1String("accepted") << QLatin1String("accepted"); + QTest::newRow("accept recid update cancel") << invitation_filenames << expected_filename << actions; } void ITIPHandlerTest::testProcessITIPMessagesUpdate_data()