From 08bdf0dc3ff6583531a9c5d933bf52d9f1b20db1 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Fri, 27 Oct 2023 18:49:57 +0800 Subject: [PATCH 1/9] Add more JUnit testing Added more JUnit testing for various classes --- .../seedu/address/logic/LogicManagerTest.java | 10 +++ .../logic/commands/AddEventCommandTest.java | 21 +++++ .../logic/parser/UniMateParserTest.java | 19 ++++ .../address/model/calendar/CalendarTest.java | 57 +++++++----- .../address/model/event/EventPeriodTest.java | 2 + .../seedu/address/model/event/EventTest.java | 86 +++++++++++++++++++ .../address/storage/JsonAdaptedEventTest.java | 10 +++ .../seedu/address/testutil/EventBuilder.java | 10 +++ 8 files changed, 195 insertions(+), 20 deletions(-) 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 9d85e1101df..aa80afb8af4 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; @@ -53,6 +57,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 7391597a049..30992aadb8c 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) instanceof SortCommand); diff --git a/src/test/java/seedu/address/model/calendar/CalendarTest.java b/src/test/java/seedu/address/model/calendar/CalendarTest.java index 166ce1b9356..707d61a9b82 100644 --- a/src/test/java/seedu/address/model/calendar/CalendarTest.java +++ b/src/test/java/seedu/address/model/calendar/CalendarTest.java @@ -31,9 +31,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 @@ -60,10 +60,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 @@ -96,45 +96,62 @@ public void findEvent_nullEvent_throwsNullPointerException() { @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/EventPeriodTest.java b/src/test/java/seedu/address/model/event/EventPeriodTest.java index 5f7afba595b..6b5e8d88ae7 100644 --- a/src/test/java/seedu/address/model/event/EventPeriodTest.java +++ b/src/test/java/seedu/address/model/event/EventPeriodTest.java @@ -11,6 +11,8 @@ import static seedu.address.model.event.EventPeriod.isValidPeriod; import static seedu.address.testutil.Assert.assertThrows; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.time.format.DateTimeParseException; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/event/EventTest.java b/src/test/java/seedu/address/model/event/EventTest.java index 14af478c92a..97f54ce3390 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,7 @@ 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 +129,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..2fcc9c8e482 100644 --- a/src/test/java/seedu/address/testutil/EventBuilder.java +++ b/src/test/java/seedu/address/testutil/EventBuilder.java @@ -1,5 +1,6 @@ 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 +77,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(); + } } From 62f74b5e60ee5eb986c7bb496fb61936e8c5fcd4 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Fri, 27 Oct 2023 18:54:21 +0800 Subject: [PATCH 2/9] Fix Checkstyle Fixed Checkstyle --- src/test/java/seedu/address/model/event/EventPeriodTest.java | 2 -- src/test/java/seedu/address/model/event/EventTest.java | 1 + src/test/java/seedu/address/testutil/EventBuilder.java | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/seedu/address/model/event/EventPeriodTest.java b/src/test/java/seedu/address/model/event/EventPeriodTest.java index 6b5e8d88ae7..5f7afba595b 100644 --- a/src/test/java/seedu/address/model/event/EventPeriodTest.java +++ b/src/test/java/seedu/address/model/event/EventPeriodTest.java @@ -11,8 +11,6 @@ import static seedu.address.model.event.EventPeriod.isValidPeriod; import static seedu.address.testutil.Assert.assertThrows; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.format.DateTimeParseException; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/model/event/EventTest.java b/src/test/java/seedu/address/model/event/EventTest.java index 97f54ce3390..4b5d3c112a7 100644 --- a/src/test/java/seedu/address/model/event/EventTest.java +++ b/src/test/java/seedu/address/model/event/EventTest.java @@ -15,6 +15,7 @@ import static seedu.address.testutil.Assert.assertThrows; import java.time.LocalTime; + import org.junit.jupiter.api.Test; import seedu.address.testutil.EventBuilder; diff --git a/src/test/java/seedu/address/testutil/EventBuilder.java b/src/test/java/seedu/address/testutil/EventBuilder.java index 2fcc9c8e482..674b5192881 100644 --- a/src/test/java/seedu/address/testutil/EventBuilder.java +++ b/src/test/java/seedu/address/testutil/EventBuilder.java @@ -1,6 +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; From eb5e890c8c45a61579e4783a629811e3ee1734fd Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Fri, 27 Oct 2023 19:07:17 +0800 Subject: [PATCH 3/9] Update CodeCov yaml Add CodeCov yaml to ignore UI testing --- .codecov.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .codecov.yml diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 00000000000..4b4b6ad28b0 --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,2 @@ +ignore: + - "src/main/java/seedu/address/ui" \ No newline at end of file From 0687efafcb479d1b7c9caa69a3aac37533b73ef5 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Fri, 27 Oct 2023 19:09:05 +0800 Subject: [PATCH 4/9] Fix Checkstyle Fix Checkstyle for codecov yaml --- .codecov.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codecov.yml b/.codecov.yml index 4b4b6ad28b0..b518bd9ef4a 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,2 +1,2 @@ ignore: - - "src/main/java/seedu/address/ui" \ No newline at end of file + - "src/main/java/seedu/address/ui" From 724f60b746680e481258d7b82faf57295a6b3fc3 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Sat, 28 Oct 2023 09:13:38 +0800 Subject: [PATCH 5/9] Bug fixes Fix bug for multiple week events --- src/main/java/seedu/address/model/event/Event.java | 2 +- .../java/seedu/address/ui/EventSpaceBackground.java | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/model/event/Event.java b/src/main/java/seedu/address/model/event/Event.java index 0296906d3cf..d0ff698bb57 100644 --- a/src/main/java/seedu/address/model/event/Event.java +++ b/src/main/java/seedu/address/model/event/Event.java @@ -180,7 +180,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/ui/EventSpaceBackground.java b/src/main/java/seedu/address/ui/EventSpaceBackground.java index 954b0a99ef7..1f3514f37aa 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,15 @@ private void updateStartAndEnd() { .orElse(calendarStartTime); LocalTime newEndTime = calendar.getLatestEventEndTimeInCurrentWeek() .map(time -> { - return time.minusMinutes(time.getMinute()); + if (time.getMinute() == 0) { + return time; + } + + if (time.getHour() == MAXIMUM_DISPLAY_HOUR) { + return time; + } + + return time.plusMinutes(NUMBER_OF_MINUTES_IN_AN_HOUR - time.getMinute()); }) .orElse(calendarEndTime); From b99d494e33de10f14e71af3f5d0eea8f1e9e193d Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Sat, 28 Oct 2023 09:15:06 +0800 Subject: [PATCH 6/9] Remove print statement Removed print statements --- .../java/seedu/address/logic/commands/DeleteEventCommand.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/seedu/address/logic/commands/DeleteEventCommand.java b/src/main/java/seedu/address/logic/commands/DeleteEventCommand.java index 6491e54bcf2..7413c5dab66 100644 --- a/src/main/java/seedu/address/logic/commands/DeleteEventCommand.java +++ b/src/main/java/seedu/address/logic/commands/DeleteEventCommand.java @@ -44,7 +44,6 @@ public CommandResult execute(Model model) throws CommandException { Event toDelete; try { toDelete = model.findEventAt(eventTime); - System.out.println(toDelete); model.deleteEventAt(eventTime); } catch (EventNotFoundException e) { throw new CommandException(MESSAGE_NO_EVENT); From 928deea1de7fe2ed3aaa41b7114c4e01961e3b76 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Sat, 28 Oct 2023 15:21:38 +0800 Subject: [PATCH 7/9] Improve codestyle Improved codestyle with suggestions from @Fallman2 --- .../seedu/address/model/calendar/Calendar.java | 3 ++- .../seedu/address/model/event/EventPeriod.java | 18 +++++++++++++----- .../seedu/address/ui/EventSpaceBackground.java | 7 +------ 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/seedu/address/model/calendar/Calendar.java b/src/main/java/seedu/address/model/calendar/Calendar.java index 644b0cd2057..8c74aa08dad 100644 --- a/src/main/java/seedu/address/model/calendar/Calendar.java +++ b/src/main/java/seedu/address/model/calendar/Calendar.java @@ -17,10 +17,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/EventPeriod.java b/src/main/java/seedu/address/model/event/EventPeriod.java index e7f29a5f0cf..9720b36c761 100644 --- a/src/main/java/seedu/address/model/event/EventPeriod.java +++ b/src/main/java/seedu/address/model/event/EventPeriod.java @@ -101,7 +101,9 @@ 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); } /** @@ -180,13 +182,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/ui/EventSpaceBackground.java b/src/main/java/seedu/address/ui/EventSpaceBackground.java index 1f3514f37aa..3d868e98eb0 100644 --- a/src/main/java/seedu/address/ui/EventSpaceBackground.java +++ b/src/main/java/seedu/address/ui/EventSpaceBackground.java @@ -83,14 +83,9 @@ private void updateStartAndEnd() { .orElse(calendarStartTime); LocalTime newEndTime = calendar.getLatestEventEndTimeInCurrentWeek() .map(time -> { - if (time.getMinute() == 0) { + if (time.getMinute() == 0 || time.getHour() == MAXIMUM_DISPLAY_HOUR) { return time; } - - if (time.getHour() == MAXIMUM_DISPLAY_HOUR) { - return time; - } - return time.plusMinutes(NUMBER_OF_MINUTES_IN_AN_HOUR - time.getMinute()); }) .orElse(calendarEndTime); From 82974e2b48a46eabec99d3959744241ef6bffda8 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Sat, 28 Oct 2023 16:32:13 +0800 Subject: [PATCH 8/9] Fix resizing bug for Calendar GUI Fixed resizing bug for Calendar GUI --- .../java/seedu/address/ui/CalendarEventSpace.java | 11 ++++------- src/main/resources/view/CalendarContainer.fxml | 4 ++-- src/main/resources/view/CalendarEventSpace.fxml | 2 +- src/main/resources/view/MainWindow.fxml | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/address/ui/CalendarEventSpace.java b/src/main/java/seedu/address/ui/CalendarEventSpace.java index 76fc334f1b7..2fda0ec150c 100644 --- a/src/main/java/seedu/address/ui/CalendarEventSpace.java +++ b/src/main/java/seedu/address/ui/CalendarEventSpace.java @@ -17,6 +17,7 @@ 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 +119,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 +159,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/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"> From ba340ff895209f1f86b73768a559ef09577d8487 Mon Sep 17 00:00:00 2001 From: lihongguang00 Date: Sat, 28 Oct 2023 16:47:56 +0800 Subject: [PATCH 9/9] Change UI EventList display Changed the way events are displayed on EventList display --- .../java/seedu/address/model/event/AllDaysEventListManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/seedu/address/model/event/AllDaysEventListManager.java b/src/main/java/seedu/address/model/event/AllDaysEventListManager.java index 9cee9c244fc..f7f4081879a 100644 --- a/src/main/java/seedu/address/model/event/AllDaysEventListManager.java +++ b/src/main/java/seedu/address/model/event/AllDaysEventListManager.java @@ -137,6 +137,7 @@ 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);