package jfxtras.icalendarfx.itip;
import static org.junit.Assert.assertEquals;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import jfxtras.icalendarfx.ICalendarStaticComponents;
import jfxtras.icalendarfx.VCalendar;
import jfxtras.icalendarfx.components.VEvent;
import jfxtras.icalendarfx.properties.calendar.Version;
import jfxtras.icalendarfx.properties.component.recurrence.rrule.RecurrenceRuleValue;
public class CancelRecurrenceTest
{
@Test // makes sure when recurrence deleted the parent gets an EXDATE
public void canDeleteRecurrence()
{
VCalendar mainVCalendar = new VCalendar();
VEvent vComponentOriginal = ICalendarStaticComponents.getDaily1();
final List<VEvent> vComponents = new ArrayList<>(Arrays.asList(vComponentOriginal));
mainVCalendar.setVEvents(vComponents);
String iTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:CANCEL" + System.lineSeparator() +
"PRODID:-//Example/ExampleCalendarClient//EN" + System.lineSeparator() +
"VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() +
"BEGIN:VEVENT" + System.lineSeparator() +
"CATEGORIES:group05" + System.lineSeparator() +
"DTSTART:20160517T083000" + System.lineSeparator() +
"DTEND:20160517T093000" + System.lineSeparator() +
"DESCRIPTION:Daily1 Description" + System.lineSeparator() +
"SUMMARY:recurrence summary" + System.lineSeparator() +
"DTSTAMP:20150110T080000Z" + System.lineSeparator() +
"UID:20150110T080000-004@jfxtras.org" + System.lineSeparator() +
"ORGANIZER;CN=Papa Smurf:mailto:papa@smurf.org" + System.lineSeparator() +
"RECURRENCE-ID:20160517T100000" + System.lineSeparator() +
"STATUS:CANCELLED" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR";
mainVCalendar.processITIPMessage(iTIPMessage);
assertEquals(1, vComponents.size());
VEvent vComponentExpected = ICalendarStaticComponents.getDaily1()
.withExceptionDates("20160517T100000")
.withSequence(1);
assertEquals(vComponentExpected, vComponents.get(0));
}
@Test // delete parent with recurrence children (children become orphans and should be removed)
public void canDeleteAllWithRecurrence()
{
VCalendar mainVCalendar = new VCalendar();
VEvent vComponentOriginal = ICalendarStaticComponents.getDaily1();
final List<VEvent> vComponents = new ArrayList<>(Arrays.asList(vComponentOriginal));
mainVCalendar.setVEvents(vComponents);
// make recurrence
VEvent vComponentRecurrence = ICalendarStaticComponents.getDaily1()
.withRecurrenceRule((RecurrenceRuleValue) null)
.withRecurrenceId(LocalDateTime.of(2016, 5, 17, 10, 0))
.withSummary("recurrence summary")
.withDateTimeStart(LocalDateTime.of(2016, 5, 17, 8, 30))
.withDateTimeEnd(LocalDateTime.of(2016, 5, 17, 9, 30));
vComponents.add(vComponentRecurrence);
assertEquals(2, vComponents.size());
String iTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:CANCEL" + System.lineSeparator() +
"PRODID:-//Example/ExampleCalendarClient//EN" + System.lineSeparator() +
"VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() +
"BEGIN:VEVENT" + System.lineSeparator() +
"CATEGORIES:group05" + System.lineSeparator() +
"DESCRIPTION:Daily1 Description" + System.lineSeparator() +
"SUMMARY:Daily1 Summary" + System.lineSeparator() +
"DTSTAMP:20150110T080000Z" + System.lineSeparator() +
"UID:20150110T080000-004@jfxtras.org" + System.lineSeparator() +
"ORGANIZER;CN=Papa Smurf:mailto:papa@smurf.org" + System.lineSeparator() +
"STATUS:CANCELLED" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR";
mainVCalendar.processITIPMessage(iTIPMessage);
assertEquals(0, vComponents.size());
}
}