package jfxtras.icalendarfx.itip;
import static org.junit.Assert.assertEquals;
import java.time.DayOfWeek;
import java.time.LocalDate;
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.FrequencyType;
import jfxtras.icalendarfx.properties.component.recurrence.rrule.RecurrenceRuleValue;
import jfxtras.icalendarfx.properties.component.recurrence.rrule.byxxx.ByDay;
public class RequestTest
{
@Test
public void canShiftWeeklyAll() // shift day of weekly
{
VCalendar mainVCalendar = new VCalendar();
VEvent vComponentOriginal = ICalendarStaticComponents.getWeekly3();
final List<VEvent> vComponents = new ArrayList<>(Arrays.asList(vComponentOriginal));
mainVCalendar.setVEvents(vComponents);
String iTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:REQUEST" + System.lineSeparator() +
"PRODID:-//Example/ExampleCalendarClient//EN" + System.lineSeparator() +
"VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() +
"BEGIN:VEVENT" + System.lineSeparator() +
"DTSTART:20151110T090000" + System.lineSeparator() + // one day later
"DTEND:20151110T103000" + System.lineSeparator() + // one day later, half hour longer
"UID:20150110T080000-002@jfxtras.org" + System.lineSeparator() +
"DTSTAMP:20150110T080000Z" + System.lineSeparator() +
"ORGANIZER;CN=Issac Newton:mailto:isaac@greatscientists.org" + System.lineSeparator() +
"RRULE:FREQ=WEEKLY;BYDAY=TU" + System.lineSeparator() + // Changed Monday to Tuesday
"SUMMARY:Edited summary" + System.lineSeparator() +
"SEQUENCE:1" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR";
mainVCalendar.processITIPMessage(iTIPMessage);
assertEquals(1, vComponents.size());
VEvent myComponent = vComponents.get(0);
VEvent expectedVComponent = ICalendarStaticComponents.getWeekly3()
.withDateTimeStart(LocalDateTime.of(2015, 11, 10, 9, 0))
.withDateTimeEnd(LocalDateTime.of(2015, 11, 10, 10, 30))
.withRecurrenceRule(new RecurrenceRuleValue()
.withFrequency(FrequencyType.WEEKLY)
.withByRules(new ByDay(DayOfWeek.TUESDAY)))
.withSummary("Edited summary")
.withSequence(1);
assertEquals(expectedVComponent, myComponent);
}
@Test
public void canShiftMonthlyAll() // shift day of week with monthly ordinal
{
VCalendar mainVCalendar = new VCalendar();
VEvent vComponentOriginal = ICalendarStaticComponents.getMonthly7();
final List<VEvent> vComponents = new ArrayList<>(Arrays.asList(vComponentOriginal));
mainVCalendar.setVEvents(vComponents);
String iTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:REQUEST" + System.lineSeparator() +
"PRODID:-//Example/ExampleCalendarClient//EN" + System.lineSeparator() +
"VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() +
"BEGIN:VEVENT" + System.lineSeparator() +
"DTSTART:20151110T090000" + System.lineSeparator() + // one day later
"DTEND:20151110T103000" + System.lineSeparator() + // one day later, half hour longer
"UID:20150110T080000-002@jfxtras.org" + System.lineSeparator() +
"DTSTAMP:20150110T080000Z" + System.lineSeparator() +
"ORGANIZER;CN=Issac Newton:mailto:isaac@greatscientists.org" + System.lineSeparator() +
"RRULE:FREQ=MONTHLY;BYDAY=3TU" + System.lineSeparator() + // Changed Monday to Tuesday
"SUMMARY:Edited summary" + System.lineSeparator() +
"SEQUENCE:1" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR";
mainVCalendar.processITIPMessage(iTIPMessage);
assertEquals(1, vComponents.size());
VEvent myComponent = vComponents.get(0);
VEvent expectedVComponent = ICalendarStaticComponents.getWeekly3()
.withDateTimeStart(LocalDateTime.of(2015, 11, 10, 9, 0))
.withDateTimeEnd(LocalDateTime.of(2015, 11, 10, 10, 30))
.withRecurrenceRule(new RecurrenceRuleValue()
.withFrequency(FrequencyType.MONTHLY)
.withByRules(new ByDay(new ByDay.ByDayPair(DayOfWeek.TUESDAY, 3))))
.withSummary("Edited summary")
.withSequence(1);
assertEquals(expectedVComponent, myComponent);
}
@Test
public void canChangeToWholeDayAll()
{
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:REQUEST" + 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;VALUE=DATE:20151108" + System.lineSeparator() +
"DTEND;VALUE=DATE:20151109" + System.lineSeparator() +
"DESCRIPTION:Daily1 Description" + System.lineSeparator() +
"SUMMARY:Edited summary" + System.lineSeparator() +
"DTSTAMP:20150110T080000Z" + System.lineSeparator() +
"UID:20150110T080000-004@jfxtras.org" + System.lineSeparator() +
"RRULE:FREQ=DAILY" + System.lineSeparator() +
"ORGANIZER;CN=Papa Smurf:mailto:papa@smurf.org" + System.lineSeparator() +
"SEQUENCE:1" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR"
;
mainVCalendar.processITIPMessage(iTIPMessage);
assertEquals(1, vComponents.size());
VEvent vComponentExpected = ICalendarStaticComponents.getDaily1()
.withDateTimeStart(LocalDate.of(2015, 11, 8))
.withDateTimeEnd(LocalDate.of(2015, 11, 9))
.withSummary("Edited summary")
.withSequence(1);
assertEquals(vComponentExpected, vComponents.get(0));
}
@Test
public void canRemoveExceptionDate()
{
VCalendar mainVCalendar = new VCalendar();
VEvent vComponentOriginal = ICalendarStaticComponents.getDailyWithException1();
final List<VEvent> vComponents = new ArrayList<>(Arrays.asList(vComponentOriginal));
mainVCalendar.setVEvents(vComponents);
String iTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:REQUEST" + System.lineSeparator() +
"PRODID:-//Example/ExampleCalendarClient//EN" + System.lineSeparator() +
"VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() +
"BEGIN:VEVENT" + System.lineSeparator() +
"CATEGORIES:group03" + System.lineSeparator() +
"DTSTART:20151109T100000" + System.lineSeparator() +
"DTEND:20151109T113000" + System.lineSeparator() +
"DESCRIPTION:Daily2 Description" + System.lineSeparator() +
"SUMMARY:Daily2 Summary" + System.lineSeparator() +
"DTSTAMP:20150110T080000Z" + System.lineSeparator() +
"UID:20150110T080000-005@jfxtras.org" + System.lineSeparator() +
"RRULE:COUNT=6;FREQ=DAILY;INTERVAL=3" + System.lineSeparator() +
"ORGANIZER;CN=Issac Newton:mailto:isaac@greatscientists.org" + System.lineSeparator() +
"SEQUENCE:1" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR"
;
mainVCalendar.processITIPMessage(iTIPMessage);
assertEquals(1, vComponents.size());
VEvent vComponentExpected = ICalendarStaticComponents.getDaily2()
.withSequence(1);
assertEquals(vComponentExpected, vComponents.get(0));
}
}