package jfxtras.internal.scene.control.skin.agenda.icalendar.base24hour.popup;
import static org.junit.Assert.assertEquals;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.stream.Collectors;
import org.junit.Test;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import jfxtras.icalendarfx.components.VEvent;
import jfxtras.icalendarfx.properties.calendar.Version;
import jfxtras.icalendarfx.properties.component.change.DateTimeStamp;
import jfxtras.internal.scene.control.skin.agenda.icalendar.base24hour.CategorySelectionGridPane;
import jfxtras.scene.control.LocalDateTimeTextField;
import jfxtras.scene.control.agenda.icalendar.ICalendarAgenda;
import jfxtras.scene.control.agenda.icalendar.ICalendarStaticComponents;
import jfxtras.scene.control.agenda.icalendar.agenda.AgendaTestAbstract;
import jfxtras.scene.control.agenda.icalendar.editors.ChangeDialogOption;
import jfxtras.test.TestUtil;
public class PopupReviseOneTest extends VEventPopupTestBase
{
@Test
public void canEditOne()
{
VEvent vevent = ICalendarStaticComponents.getDaily1();
TestUtil.runThenWaitForPaintPulse( () ->
{
getEditComponentPopup().setupData(
vevent,
LocalDateTime.of(2015, 11, 11, 10, 0), // start selected instance
LocalDateTime.of(2015, 11, 11, 11, 0), // end selected instance
AgendaTestAbstract.CATEGORIES);
});
// edit property
TextField summaryTextField = find("#summaryTextField");
summaryTextField.setText("new summary");
// save changes to THIS AND FUTURE
clickOn("#saveComponentButton");
ComboBox<ChangeDialogOption> c = find("#changeDialogComboBox");
TestUtil.runThenWaitForPaintPulse( () -> c.getSelectionModel().select(ChangeDialogOption.ONE));
clickOn("#changeDialogOkButton");
String iTIPMessage = getEditComponentPopup().iTIPMessagesProperty().get().stream()
.map(v -> v.toString())
.collect(Collectors.joining(System.lineSeparator()));
String dtstamp = iTIPMessage.split(System.lineSeparator())[10];
String expectedDTStamp = new DateTimeStamp(ZonedDateTime.now().withZoneSameInstant(ZoneId.of("Z"))).toString();
assertEquals(expectedDTStamp.substring(0, 16), dtstamp.substring(0, 16)); // check date, month and time
String expectediTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:PUBLISH" + 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:20151111T100000" + System.lineSeparator() +
"DTEND:20151111T110000" + System.lineSeparator() +
"DESCRIPTION:Daily1 Description" + System.lineSeparator() +
"SUMMARY:new summary" + System.lineSeparator() +
dtstamp + System.lineSeparator() +
"UID:20150110T080000-004@jfxtras.org" + System.lineSeparator() +
"ORGANIZER;CN=Papa Smurf:mailto:papa@smurf.org" + System.lineSeparator() +
"RECURRENCE-ID:20151111T100000" + System.lineSeparator() +
"SEQUENCE:1" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR";
assertEquals(expectediTIPMessage, iTIPMessage);
}
// edit descriptive properties of a repeating event to make a special recurrence instance
@Test
public void canEditDescribableProperties2()
{
VEvent vevent = ICalendarStaticComponents.getDaily1();
TestUtil.runThenWaitForPaintPulse( () ->
{
getEditComponentPopup().setupData(
vevent,
LocalDateTime.of(2016, 5, 15, 10, 0), // start selected instance
LocalDateTime.of(2016, 5, 15, 11, 0), // end selected instance
categories());
});
// Get properties
LocalDateTimeTextField startDateTimeTextField = find("#startDateTimeTextField");
TextField summaryTextField = find("#summaryTextField");
TextArea descriptionTextArea = find("#descriptionTextArea");
TextField locationTextField = find("#locationTextField");
TextField categoryTextField = find("#categoryTextField");
CategorySelectionGridPane categorySelectionGridPane = find("#categorySelectionGridPane");
// Edit properties
startDateTimeTextField.setLocalDateTime(LocalDateTime.of(2016, 5, 15, 8, 0));
summaryTextField.setText("new summary");
descriptionTextArea.setText("new description");
locationTextField.setText("new location");
TestUtil.runThenWaitForPaintPulse(() -> categorySelectionGridPane.setCategorySelected(11));
categoryTextField.setText("new group name"); // TODO - FIX THIS - CATEGORY NOT WORKING
// Save changes
clickOn("#saveComponentButton");
ComboBox<ChangeDialogOption> c = find("#changeDialogComboBox");
TestUtil.runThenWaitForPaintPulse( () -> c.getSelectionModel().select(ChangeDialogOption.ONE));
clickOn("#changeDialogOkButton");
String iTIPMessage = getEditComponentPopup().iTIPMessagesProperty().get().stream()
.map(v -> v.toString())
.collect(Collectors.joining(System.lineSeparator()));
String dtstamp = iTIPMessage.split(System.lineSeparator())[10];
String expectedDTStamp = new DateTimeStamp(ZonedDateTime.now().withZoneSameInstant(ZoneId.of("Z"))).toString();
assertEquals(expectedDTStamp.substring(0, 16), dtstamp.substring(0, 16)); // check date, month and time
String expectediTIPMessage =
"BEGIN:VCALENDAR" + System.lineSeparator() +
"METHOD:PUBLISH" + System.lineSeparator() +
"PRODID:" + ICalendarAgenda.DEFAULT_PRODUCT_IDENTIFIER + System.lineSeparator() +
"VERSION:" + Version.DEFAULT_ICALENDAR_SPECIFICATION_VERSION + System.lineSeparator() +
"BEGIN:VEVENT" + System.lineSeparator() +
"CATEGORIES:new group name" + System.lineSeparator() +
"DTSTART:20160515T080000" + System.lineSeparator() +
"DTEND:20160515T090000" + System.lineSeparator() +
"DESCRIPTION:new description" + System.lineSeparator() +
"SUMMARY:new summary" + System.lineSeparator() +
dtstamp + System.lineSeparator() + // need to match time exactly
"UID:20150110T080000-004@jfxtras.org" + System.lineSeparator() +
"ORGANIZER;CN=Papa Smurf:mailto:papa@smurf.org" + System.lineSeparator() +
"LOCATION:new location" + System.lineSeparator() +
"RECURRENCE-ID:20160515T100000" + System.lineSeparator() +
"SEQUENCE:1" + System.lineSeparator() +
"END:VEVENT" + System.lineSeparator() +
"END:VCALENDAR";
assertEquals(expectediTIPMessage, iTIPMessage);
}
}