package jfxtras.scene.control.agenda.icalendar.editors.deletor; import static org.junit.Assert.assertEquals; import java.time.LocalDateTime; import java.time.temporal.Temporal; import java.util.List; import java.util.stream.Collectors; import org.junit.Test; import jfxtras.icalendarfx.VCalendar; import jfxtras.icalendarfx.components.VEvent; import jfxtras.icalendarfx.properties.calendar.Version; import jfxtras.icalendarfx.properties.component.recurrence.rrule.RecurrenceRuleValue; import jfxtras.scene.control.agenda.icalendar.ICalendarAgenda; import jfxtras.scene.control.agenda.icalendar.ICalendarStaticComponents; import jfxtras.scene.control.agenda.icalendar.editors.ChangeDialogOption; import jfxtras.scene.control.agenda.icalendar.editors.deleters.DeleterVEvent; import jfxtras.scene.control.agenda.icalendar.editors.deleters.SimpleDeleterFactory; public class DeleteOneTest { @Test // deletes one instance of a repeating event public void canDeleteOneInstance() { VCalendar mainVCalendar = new VCalendar(); VEvent vComponentOriginal = ICalendarStaticComponents.getDaily1(); mainVCalendar.addChild(vComponentOriginal); List<VCalendar> iTIPmessages = ((DeleterVEvent) SimpleDeleterFactory.newDeleter(vComponentOriginal)) .withDialogCallback((m) -> ChangeDialogOption.ONE) .withStartOriginalRecurrence(LocalDateTime.of(2016, 5, 16, 10, 0)) .delete(); String expectediTIPMessage = "BEGIN:VCALENDAR" + System.lineSeparator() + "METHOD:CANCEL" + System.lineSeparator() + "PRODID:" + ICalendarAgenda.DEFAULT_PRODUCT_IDENTIFIER + 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() + "RECURRENCE-ID:20160516T100000" + System.lineSeparator() + "END:VEVENT" + System.lineSeparator() + "END:VCALENDAR"; String iTIPMessage = iTIPmessages.stream() .map(v -> v.toString()) .collect(Collectors.joining(System.lineSeparator())); assertEquals(expectediTIPMessage, iTIPMessage); } @Test // Deletes VEvent with RECURRENCE-ID public void canDeleteRecurrence() { VCalendar mainVCalendar = new VCalendar(); VEvent vComponentOriginal = ICalendarStaticComponents.getDaily1(); mainVCalendar.addChild(vComponentOriginal); final List<VEvent> vComponents = mainVCalendar.getVEvents(); // 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); // make changes Temporal startOriginalRecurrence = LocalDateTime.of(2016, 5, 16, 10, 0); List<VCalendar> iTIPmessages = ((DeleterVEvent) SimpleDeleterFactory.newDeleter(vComponentRecurrence)) .withDialogCallback((m) -> null) // deletes recurrence - its an individual so no dialog needed .withStartOriginalRecurrence(startOriginalRecurrence) .delete(); String expectediTIPMessage = "BEGIN:VCALENDAR" + System.lineSeparator() + "METHOD:CANCEL" + System.lineSeparator() + "PRODID:" + ICalendarAgenda.DEFAULT_PRODUCT_IDENTIFIER + 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"; String iTIPMessage = iTIPmessages.stream() .map(v -> v.toString()) .collect(Collectors.joining(System.lineSeparator())); assertEquals(expectediTIPMessage, iTIPMessage); } }