diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 00000000000..b518bd9ef4a --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,2 @@ +ignore: + - "src/main/java/seedu/address/ui" diff --git a/src/main/java/seedu/address/model/calendar/Calendar.java b/src/main/java/seedu/address/model/calendar/Calendar.java index 2035c0a139b..29ae44ed12f 100644 --- a/src/main/java/seedu/address/model/calendar/Calendar.java +++ b/src/main/java/seedu/address/model/calendar/Calendar.java @@ -18,10 +18,11 @@ * Represents a calendar that stores and manages events. */ public class Calendar implements ReadOnlyCalendar { + private static final int DAYS_IN_WEEK = 7; private static final LocalDate DATE_OF_START_OF_CURRENT_WEEK = LocalDate.now().minusDays( LocalDate.now().getDayOfWeek().getValue() - 1); private static final LocalDate DATE_OF_END_OF_CURRENT_WEEK = LocalDate.now().plusDays( - 7 - LocalDate.now().getDayOfWeek().getValue()); + DAYS_IN_WEEK - LocalDate.now().getDayOfWeek().getValue()); private final AllDaysEventListManager eventManager; private final ObservableList internalList = FXCollections.observableArrayList(); private final ObservableList internalListForCurrentWeek = FXCollections.observableArrayList(); diff --git a/src/main/java/seedu/address/model/event/AllDaysEventListManager.java b/src/main/java/seedu/address/model/event/AllDaysEventListManager.java index 8758d48be3f..49d54c06b16 100644 --- a/src/main/java/seedu/address/model/event/AllDaysEventListManager.java +++ b/src/main/java/seedu/address/model/event/AllDaysEventListManager.java @@ -156,6 +156,25 @@ public boolean isEmpty() { public ObservableList asUnmodifiableObservableList() { List list = dayToEventListMap.values().stream() .flatMap(singleDayEventList -> singleDayEventList.getDayEventList().stream()) + .map(Event::getParentEvent).distinct() + .collect(Collectors.toList()); + + return FXCollections.observableList(list); + } + + /** + * Returns the event list storing events that occur between the start and end dates as an unmodifiable + * ObservableList. + * + * @param startDate start date. + * @param endDate end date. + * @return the event list storing events that occur between the start and end dates as an unmodifiable + * ObservableList. + */ + public ObservableList asUnmodifiableObservableList(LocalDate startDate, LocalDate endDate) { + List list = dayToEventListMap.values().stream() + .flatMap(singleDayEventList -> singleDayEventList.getDayEventList().stream()) + .filter(event -> event.occursBetweenDates(startDate, endDate)) .collect(Collectors.toList()); return FXCollections.observableList(list); diff --git a/src/main/java/seedu/address/model/event/Event.java b/src/main/java/seedu/address/model/event/Event.java index b735dc316b8..f50dc1a76d2 100644 --- a/src/main/java/seedu/address/model/event/Event.java +++ b/src/main/java/seedu/address/model/event/Event.java @@ -199,7 +199,7 @@ private boolean isEventDurationSingleDay() { */ public boolean occursBetweenDates(LocalDate start, LocalDate end) { requireAllNonNull(start, end); - return getParentEvent().eventPeriod.isOverlapping(start, end); + return eventPeriod.isOverlapping(start, end); } /** diff --git a/src/main/java/seedu/address/model/event/EventPeriod.java b/src/main/java/seedu/address/model/event/EventPeriod.java index df5397a89b0..d1ae46526e7 100644 --- a/src/main/java/seedu/address/model/event/EventPeriod.java +++ b/src/main/java/seedu/address/model/event/EventPeriod.java @@ -106,7 +106,10 @@ public boolean isOverlapping(EventPeriod other) { public boolean isOverlapping(LocalDate start, LocalDate end) { requireAllNonNull(start, end); - return !(this.start.toLocalDate().isAfter(end) || this.end.toLocalDate().isBefore(start)); + boolean isThisEventStartingAfterOtherEventEnds = this.start.toLocalDate().isAfter(end); + boolean isThisEventEndedBeforeOtherEventStarts = this.end.toLocalDate().isBefore(start); + return !(isThisEventStartingAfterOtherEventEnds || isThisEventEndedBeforeOtherEventStarts); + } /** @@ -203,13 +206,19 @@ public boolean isContinuous(EventPeriod other) { public EventPeriod boundPeriodByDate(LocalDate date) { requireNonNull(date); - if (date.isEqual(start.toLocalDate()) && date.isEqual(end.toLocalDate())) { + boolean isDateOnStartDate = date.isEqual(start.toLocalDate()); + boolean isDateOnEndDate = date.isEqual(end.toLocalDate()); + boolean isDateAfterStartDate = date.isAfter(start.toLocalDate()); + boolean isDateBeforeEndDate = date.isBefore(end.toLocalDate()); + + + if (isDateOnStartDate && isDateOnEndDate) { return this; - } else if (date.isEqual(start.toLocalDate())) { + } else if (isDateOnStartDate) { return new EventPeriod(start, LocalDateTime.of(date, MAX_TIME_OF_DAY)); - } else if (date.isEqual(end.toLocalDate())) { + } else if (isDateOnEndDate) { return new EventPeriod(LocalDateTime.of(date, LocalTime.MIDNIGHT), end); - } else if (date.isAfter(start.toLocalDate()) && date.isBefore(end.toLocalDate())) { + } else if (isDateAfterStartDate && isDateBeforeEndDate) { return new EventPeriod(LocalDateTime.of(date, LocalTime.MIDNIGHT), LocalDateTime.of(date, MAX_TIME_OF_DAY)); } else { diff --git a/src/main/java/seedu/address/model/event/SingleDayEventList.java b/src/main/java/seedu/address/model/event/SingleDayEventList.java index d9637800466..0b4ab6a9ed7 100644 --- a/src/main/java/seedu/address/model/event/SingleDayEventList.java +++ b/src/main/java/seedu/address/model/event/SingleDayEventList.java @@ -88,6 +88,7 @@ public boolean containsEvent(Event event) { */ public Optional eventAtTime(LocalDateTime dateTime) { requireNonNull(dateTime); + for (Event event : eventTree.values()) { Event parentEvent = event.getParentEvent(); if (parentEvent.isDuring(dateTime)) { diff --git a/src/main/java/seedu/address/ui/CalendarEventSpace.java b/src/main/java/seedu/address/ui/CalendarEventSpace.java index 76fc334f1b7..8ec832c181b 100644 --- a/src/main/java/seedu/address/ui/CalendarEventSpace.java +++ b/src/main/java/seedu/address/ui/CalendarEventSpace.java @@ -17,6 +17,8 @@ import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; +import javafx.scene.shape.StrokeType; + import seedu.address.model.calendar.ReadOnlyCalendar; import seedu.address.model.event.Event; @@ -118,15 +120,10 @@ private void updateStartAndEnd() { .orElse(calendarStartTime); LocalTime newEndTime = calendar.getLatestEventEndTimeInCurrentWeek() .map(time -> { - if (time.getMinute() == 0) { + if (time.getMinute() == 0 || time.getHour() == MAXIMUM_DISPLAY_HOUR_OF_DAY) { return time; } - - if (time.getHour() == MAXIMUM_DISPLAY_HOUR_OF_DAY) { - return time; - } - - return LocalTime.of(time.getHour() + 1, 0); + return time.plusMinutes(NUMBER_OF_MINUTES_IN_AN_HOUR - time.getMinute()); }) .orElse(calendarEndTime); @@ -163,6 +160,7 @@ private StackPane generateEventCard(Event event) { cardRectangle.setWidth(widthMultiplier * NODE_WIDTH_PER_HALF_HOUR * NUMBER_OF_HALF_HOURS_IN_HOUR); cardRectangle.setFill(Color.CRIMSON); cardRectangle.setStroke(Color.BLACK); + cardRectangle.setStrokeType(StrokeType.INSIDE); Label description = new Label(); diff --git a/src/main/java/seedu/address/ui/EventSpaceBackground.java b/src/main/java/seedu/address/ui/EventSpaceBackground.java index 954b0a99ef7..3d868e98eb0 100644 --- a/src/main/java/seedu/address/ui/EventSpaceBackground.java +++ b/src/main/java/seedu/address/ui/EventSpaceBackground.java @@ -20,6 +20,8 @@ public class EventSpaceBackground extends UiPart { private static final LocalTime DEFAULT_CALENDAR_START_TIME = LocalTime.of(8, 0); private static final LocalTime DEFAULT_CALENDAR_END_TIME = LocalTime.of(18, 0); private static final int NUMBER_OF_HOURS_IN_ONE_DAY = 24; + private static final int MAXIMUM_DISPLAY_HOUR = 23; + private static final int NUMBER_OF_MINUTES_IN_AN_HOUR = 60; private LocalTime calendarStartTime = DEFAULT_CALENDAR_START_TIME; private LocalTime calendarEndTime = DEFAULT_CALENDAR_END_TIME; @@ -81,7 +83,10 @@ private void updateStartAndEnd() { .orElse(calendarStartTime); LocalTime newEndTime = calendar.getLatestEventEndTimeInCurrentWeek() .map(time -> { - return time.minusMinutes(time.getMinute()); + if (time.getMinute() == 0 || time.getHour() == MAXIMUM_DISPLAY_HOUR) { + return time; + } + return time.plusMinutes(NUMBER_OF_MINUTES_IN_AN_HOUR - time.getMinute()); }) .orElse(calendarEndTime); diff --git a/src/main/resources/view/CalendarContainer.fxml b/src/main/resources/view/CalendarContainer.fxml index 689f5e00ec1..1725d2f8c13 100644 --- a/src/main/resources/view/CalendarContainer.fxml +++ b/src/main/resources/view/CalendarContainer.fxml @@ -8,8 +8,8 @@ - - + + diff --git a/src/main/resources/view/CalendarEventSpace.fxml b/src/main/resources/view/CalendarEventSpace.fxml index cb55d646b00..39797785a6f 100644 --- a/src/main/resources/view/CalendarEventSpace.fxml +++ b/src/main/resources/view/CalendarEventSpace.fxml @@ -6,4 +6,4 @@ - + diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 932af6bdbb6..2ae53880997 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -59,7 +59,7 @@
+ HBox.hgrow="ALWAYS" VBox.vgrow="NEVER" minHeight="240" prefHeight="240"> diff --git a/src/test/java/seedu/address/logic/LogicManagerTest.java b/src/test/java/seedu/address/logic/LogicManagerTest.java index 206863c5b3b..67031cf84b7 100644 --- a/src/test/java/seedu/address/logic/LogicManagerTest.java +++ b/src/test/java/seedu/address/logic/LogicManagerTest.java @@ -30,6 +30,7 @@ import seedu.address.model.ModelManager; import seedu.address.model.ReadOnlyAddressBook; import seedu.address.model.UserPrefs; +import seedu.address.model.calendar.Calendar; import seedu.address.model.person.Person; import seedu.address.storage.JsonAddressBookStorage; import seedu.address.storage.JsonCalendarStorage; @@ -79,6 +80,15 @@ public void getAddressBook() { assertEquals(logic.getAddressBook(), new AddressBook()); } @Test + public void getCalendar() { + assertEquals(logic.getCalendar(), new Calendar()); + } + + @Test + public void getCurrentWeekEventList() { + assertEquals(logic.getCurrentWeekEventList(), FXCollections.observableArrayList()); + } + @Test public void getAddressBookFilePath() { assertNotNull(logic.getAddressBookFilePath()); } diff --git a/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java b/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java index f2c5ec81b7a..3093db7e14c 100644 --- a/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java @@ -2,6 +2,10 @@ import static java.util.Objects.requireNonNull; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.commands.CommandTestUtil.VALID_END_DATE_LATER; +import static seedu.address.logic.commands.CommandTestUtil.VALID_START_DATE_LATER; import static seedu.address.testutil.Assert.assertThrows; import java.nio.file.Path; @@ -55,6 +59,23 @@ public void execute_conflictingEvent_throwsCommandException() { .execute(modelStub)); } + @Test + public void equalsTest() { + Event validEvent = new EventBuilder().build(); + EventBuilder otherValidEventBuilder = new EventBuilder(); + otherValidEventBuilder.withStartEndDate(VALID_START_DATE_LATER, VALID_END_DATE_LATER); + Event otherEvent = otherValidEventBuilder.build(); + AddEventCommand addEventCommand = new AddEventCommand(validEvent); + AddEventCommand notEqualAddEventCommand = new AddEventCommand(otherEvent); + Object nonAddEventCommandObject = new Object(); + + assertTrue(addEventCommand.equals(addEventCommand)); + + assertFalse(addEventCommand.equals(notEqualAddEventCommand)); + + assertFalse(addEventCommand.equals(nonAddEventCommandObject)); + } + /** * A default model stub that have all the methods failing. */ diff --git a/src/test/java/seedu/address/logic/parser/UniMateParserTest.java b/src/test/java/seedu/address/logic/parser/UniMateParserTest.java index 8addc11e488..f6a0bedd2da 100644 --- a/src/test/java/seedu/address/logic/parser/UniMateParserTest.java +++ b/src/test/java/seedu/address/logic/parser/UniMateParserTest.java @@ -14,6 +14,7 @@ import org.junit.jupiter.api.Test; import seedu.address.logic.commands.AddCommand; +import seedu.address.logic.commands.AddEventCommand; import seedu.address.logic.commands.ClearCommand; import seedu.address.logic.commands.DeleteCommand; import seedu.address.logic.commands.EditCommand; @@ -27,6 +28,7 @@ import seedu.address.model.person.NameContainsKeywordsPredicate; import seedu.address.model.person.Person; import seedu.address.testutil.EditPersonDescriptorBuilder; +import seedu.address.testutil.EventBuilder; import seedu.address.testutil.PersonBuilder; import seedu.address.testutil.PersonUtil; @@ -89,6 +91,23 @@ public void parseCommand_list() throws Exception { assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + " 3") instanceof ListCommand); } + @Test + public void parseCommand_addEvent() throws Exception { + String description = "sleep"; + String startDateTime = "2023-10-10 10:00"; + String endDateTime = "2023-10-10 12:00"; + String validArg = "d/" + description + + " ts/" + startDateTime + + " te/" + endDateTime; + validArg = AddEventCommand.COMMAND_WORD + " " + validArg; + EventBuilder eventBuilder = new EventBuilder(); + eventBuilder.withDescription(description); + eventBuilder.withStartEndDate(startDateTime, endDateTime); + + AddEventCommand addEventCommand = (AddEventCommand) parser.parseCommand(validArg); + assertEquals(addEventCommand, new AddEventCommand(eventBuilder.build())); + } + @Test public void parseCommand_sort() throws Exception { assertTrue(parser.parseCommand(SortCommand.COMMAND_WORD + " " diff --git a/src/test/java/seedu/address/model/calendar/CalendarTest.java b/src/test/java/seedu/address/model/calendar/CalendarTest.java index a2d7e939f3f..2d6fd9b8723 100644 --- a/src/test/java/seedu/address/model/calendar/CalendarTest.java +++ b/src/test/java/seedu/address/model/calendar/CalendarTest.java @@ -37,9 +37,9 @@ public void isEmptyValid_emptyCalendar_returnsTrue() { @Test public void isEmptyValid_nonEmptyCalendar_returnsFalse() { - this.calendar.clear(); - this.calendar.addEvent(new EventBuilder().build()); - assertFalse(this.calendar.isEmpty()); + calendar.clear(); + calendar.addEvent(new EventBuilder().build()); + assertFalse(calendar.isEmpty()); } @Test @@ -66,10 +66,10 @@ public void addEvent_nullEvent_throwsNullPointerException() { @Test public void addEvent_validEvent_successful() { - this.calendar.clear(); + calendar.clear(); Event validEvent = new EventBuilder().build(); - this.calendar.addEvent(validEvent); - assertTrue(this.calendar.contains(validEvent)); + calendar.addEvent(validEvent); + assertTrue(calendar.contains(validEvent)); } @Test @@ -141,45 +141,62 @@ public void deleteEventsInRange_twoEvents_successful() { @Test public void isEqualsValid_nullValue_returnsFalse() { - this.calendar.clear(); - assertFalse(this.calendar.equals(null)); + calendar.clear(); + assertFalse(calendar.equals(null)); } @Test public void isEqualsValid_nonCalendarObject_returnFalse() { - this.calendar.clear(); - assertFalse(this.calendar.equals(new Object())); + calendar.clear(); + assertFalse(calendar.equals(new Object())); } @Test public void isEqualsValid_equalCalendarDeclaredObject_returnTrue() { - this.calendar.clear(); + calendar.clear(); Object equalCalendar = new Calendar(); - assertTrue(this.calendar.equals(equalCalendar)); + assertTrue(calendar.equals(equalCalendar)); } @Test public void isEqualsValid_notEqualCalendarDeclaredObject_returnFalse() { - this.calendar.clear(); - this.calendar.addEvent(new EventBuilder().build()); + calendar.clear(); + calendar.addEvent(new EventBuilder().build()); Object nonEqualCalendar = new Calendar(); - assertFalse(this.calendar.equals(nonEqualCalendar)); + assertFalse(calendar.equals(nonEqualCalendar)); } @Test public void isEqualsValid_equalCalendarDeclaredCalendar_returnTrue() { - this.calendar.clear(); + calendar.clear(); Calendar equalCalendar = new Calendar(); - assertTrue(this.calendar.equals(equalCalendar)); + assertTrue(calendar.equals(equalCalendar)); } @Test public void isEqualsValid_notEqualCalendarDeclaredCalendar_returnFalse() { - this.calendar.clear(); - this.calendar.addEvent(new EventBuilder().build()); + calendar.clear(); + calendar.addEvent(new EventBuilder().build()); Calendar nonEqualCalendar = new Calendar(); - assertFalse(this.calendar.equals(nonEqualCalendar)); + assertFalse(calendar.equals(nonEqualCalendar)); } + @Test + public void isEqualsValid_thisCalendar_returnTrue() { + assertTrue(calendar.equals(calendar)); + } + @Test + public void getEarliestEventStartTimeInCurrentWeekTest() { + calendar.clear(); + + assertTrue(calendar.getEarliestEventStartTimeInCurrentWeek().isEmpty()); + } + + @Test + public void getLatestEventEndTimeInCurrentWeek() { + calendar.clear(); + + assertTrue(calendar.getLatestEventEndTimeInCurrentWeek().isEmpty()); + } } diff --git a/src/test/java/seedu/address/model/event/EventTest.java b/src/test/java/seedu/address/model/event/EventTest.java index 14af478c92a..4b5d3c112a7 100644 --- a/src/test/java/seedu/address/model/event/EventTest.java +++ b/src/test/java/seedu/address/model/event/EventTest.java @@ -1,8 +1,10 @@ package seedu.address.model.event; +import static java.time.temporal.ChronoUnit.MINUTES; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.commands.CommandTestUtil.VALID_DESCRIPTION; import static seedu.address.logic.commands.CommandTestUtil.VALID_END_DATE_EARLIER; @@ -12,6 +14,8 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_UNUSED_DESCRIPTION; import static seedu.address.testutil.Assert.assertThrows; +import java.time.LocalTime; + import org.junit.jupiter.api.Test; import seedu.address.testutil.EventBuilder; @@ -126,4 +130,87 @@ public void equalsTest() { assertFalse(validEvent.equals(differentPeriodEvent)); } + + @Test + public void compareStartTimeTest() { + EventBuilder earlierEventBuilder = new EventBuilder(); + earlierEventBuilder.withStartEndDate(VALID_START_DATE_EARLIER, VALID_START_DATE_LATER); + EventBuilder laterEventBuilder = new EventBuilder(); + laterEventBuilder.withStartEndDate(VALID_END_DATE_EARLIER, VALID_END_DATE_LATER); + Event earlierEvent = earlierEventBuilder.build(); + Event laterEvent = laterEventBuilder.build(); + + assertThrows(NullPointerException.class, () -> earlierEvent.compareStartTime(null)); + + assertTrue(earlierEvent.compareStartTime(laterEvent) < 0); + + assertTrue(laterEvent.compareStartTime(earlierEvent) > 0); + + assertEquals(0, earlierEvent.compareStartTime(earlierEvent)); + } + + @Test + public void compareEndTimeTest() { + EventBuilder earlierEventBuilder = new EventBuilder(); + earlierEventBuilder.withStartEndDate(VALID_START_DATE_EARLIER, VALID_START_DATE_LATER); + EventBuilder laterEventBuilder = new EventBuilder(); + laterEventBuilder.withStartEndDate(VALID_END_DATE_EARLIER, VALID_END_DATE_LATER); + Event earlierEvent = earlierEventBuilder.build(); + Event laterEvent = laterEventBuilder.build(); + + assertThrows(NullPointerException.class, () -> earlierEvent.compareEndTime(null)); + + assertTrue(earlierEvent.compareEndTime(laterEvent) < 0); + + assertTrue(laterEvent.compareEndTime(earlierEvent) > 0); + + assertEquals(0, earlierEvent.compareEndTime(earlierEvent)); + } + + @Test + public void getStartTimeTest() { + Event event = new EventBuilder().build(); + assertNotNull(event.getStartTime()); + } + + @Test + public void getEndTimeTest() { + Event event = new EventBuilder().build(); + assertNotNull(event.getEndTime()); + } + + @Test + public void getDurationOfEventTest() { + Event event = new EventBuilder().build(); + assertNotNull(event.getDurationOfEvent()); + } + + @Test + public void getDescriptionStringTest() { + Event event = new EventBuilder().build(); + assertNotNull(event.getDescriptionString()); + } + + @Test + public void getDayOfWeekTest() { + EventBuilder nonSingleDayEventBuilder = new EventBuilder(); + nonSingleDayEventBuilder.withStartEndDate(VALID_START_DATE_EARLIER, VALID_END_DATE_LATER); + Event nonSingleDayEvent = nonSingleDayEventBuilder.build(); + Event singleDayEvent = new EventBuilder().build(); + + assertThrows(AssertionError.class, nonSingleDayEvent::getDayOfWeek); + + assertNotNull(singleDayEvent.getDayOfWeek()); + } + + @Test + public void getMinutesFromTimeToStartTimeTest() { + EventBuilder eventBuilder = new EventBuilder(); + Event event = eventBuilder.build(); + + assertThrows(NullPointerException.class, () -> event.getMinutesFromTimeToStartTime(null)); + + assertEquals(event.getMinutesFromTimeToStartTime(LocalTime.MIDNIGHT), + MINUTES.between(LocalTime.MIDNIGHT, eventBuilder.getStartTime())); + } } diff --git a/src/test/java/seedu/address/storage/JsonAdaptedEventTest.java b/src/test/java/seedu/address/storage/JsonAdaptedEventTest.java index d72faddee7f..cd595197bc1 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedEventTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedEventTest.java @@ -10,10 +10,12 @@ import seedu.address.commons.exceptions.IllegalValueException; import seedu.address.model.event.EventDescription; import seedu.address.model.event.EventPeriod; +import seedu.address.testutil.EventPeriodBuilder; public class JsonAdaptedEventTest { private static final String INVALID_DESCRIPTION = ""; private static final String INVALID_EVENT_PERIOD = "2010-10-10 10:00-2010-10-10 12:00"; + private static final String INVALID_EVENT_PERIOD_DATE = "2010-10-10 12:00 - 2010-10-10 10:00"; private static final String VALID_DESCRIPTION = CONFERENCE.getDescription().getDescription(); private static final String VALID_EVENT_PERIOD = CONFERENCE.getEventPeriod().getFormattedPeriod(); @@ -54,4 +56,12 @@ public void toModelType_nullEventPeriod_throwsIllegalValueException() { assertThrows(IllegalValueException.class, expectedMessage, event::toModelType); } + @Test + public void toModelType_isInvalidEventPeriod_throwsIllegalValueException() { + EventPeriodBuilder eventPeriodBuilder = new EventPeriodBuilder(); + JsonAdaptedEvent event = new JsonAdaptedEvent(VALID_DESCRIPTION, INVALID_EVENT_PERIOD_DATE); + String expectedMessage = EventPeriod.MESSAGE_CONSTRAINTS; + assertThrows(IllegalValueException.class, expectedMessage, event::toModelType); + } + } diff --git a/src/test/java/seedu/address/testutil/EventBuilder.java b/src/test/java/seedu/address/testutil/EventBuilder.java index 85a9c43f01c..674b5192881 100644 --- a/src/test/java/seedu/address/testutil/EventBuilder.java +++ b/src/test/java/seedu/address/testutil/EventBuilder.java @@ -1,5 +1,7 @@ package seedu.address.testutil; +import java.time.LocalTime; + import seedu.address.model.event.Event; import seedu.address.model.event.EventDescription; import seedu.address.model.event.EventPeriod; @@ -76,4 +78,13 @@ public EventBuilder withStartEndDate(String start, String end) { this.eventPeriod = new EventPeriod(start, end); return this; } + + /** + * Get the start time of the EventBuilder, regardless of date. + * + * @return start time of the EventBuilder, regardless of date. + */ + public LocalTime getStartTime() { + return eventPeriod.getStartTime(); + } }