Skip to content

Commit

Permalink
Merge pull request #2 from Fallman2/master
Browse files Browse the repository at this point in the history
Merging Master after UI updates
  • Loading branch information
Fallman2 authored Oct 28, 2023
2 parents d19b23f + cdd073c commit 2ba4298
Show file tree
Hide file tree
Showing 18 changed files with 249 additions and 39 deletions.
2 changes: 2 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ignore:
- "src/main/java/seedu/address/ui"
3 changes: 2 additions & 1 deletion src/main/java/seedu/address/model/calendar/Calendar.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Event> internalList = FXCollections.observableArrayList();
private final ObservableList<Event> internalListForCurrentWeek = FXCollections.observableArrayList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,25 @@ public boolean isEmpty() {
public ObservableList<Event> asUnmodifiableObservableList() {
List<Event> 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<Event> asUnmodifiableObservableList(LocalDate startDate, LocalDate endDate) {
List<Event> list = dayToEventListMap.values().stream()
.flatMap(singleDayEventList -> singleDayEventList.getDayEventList().stream())
.filter(event -> event.occursBetweenDates(startDate, endDate))
.collect(Collectors.toList());

return FXCollections.observableList(list);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/seedu/address/model/event/Event.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/**
Expand Down
19 changes: 14 additions & 5 deletions src/main/java/seedu/address/model/event/EventPeriod.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);

}

/**
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public boolean containsEvent(Event event) {
*/
public Optional<Event> eventAtTime(LocalDateTime dateTime) {
requireNonNull(dateTime);

for (Event event : eventTree.values()) {
Event parentEvent = event.getParentEvent();
if (parentEvent.isDuring(dateTime)) {
Expand Down
12 changes: 5 additions & 7 deletions src/main/java/seedu/address/ui/CalendarEventSpace.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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();
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/seedu/address/ui/EventSpaceBackground.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public class EventSpaceBackground extends UiPart<Region> {
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;
Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/view/CalendarContainer.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

<HBox xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" HBox.hgrow="ALWAYS">
<StackPane fx:id="calendarLabelPlaceholder" minWidth="50" HBox.hgrow="NEVER"/>
<ListView prefHeight="260" minHeight="260" maxHeight="260" prefWidth="400" VBox.vgrow="NEVER" HBox.hgrow="ALWAYS">
<StackPane minWidth="300" HBox.hgrow="NEVER">
<ListView prefHeight="270" minHeight="270" maxHeight="270" prefWidth="400" minWidth="250" VBox.vgrow="NEVER" HBox.hgrow="ALWAYS">
<StackPane minWidth="300" HBox.hgrow="ALWAYS">
<GridPane fx:id="eventSpaceBackground" HBox.hgrow="ALWAYS"/>
<GridPane fx:id="eventSpace" HBox.hgrow="ALWAYS"/>
</StackPane>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/view/CalendarEventSpace.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<GridPane fx:id="eventSpace" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" HBox.hgrow="SOMETIMES"/>
<GridPane fx:id="eventSpace" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" HBox.hgrow="SOMETIMES" VBox.vgrow="NEVER"/>
2 changes: 1 addition & 1 deletion src/main/resources/view/MainWindow.fxml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@

<center>
<StackPane fx:id="calendarPlaceholder" minWidth="340" prefWidth="340" styleClass="pane-without-border"
HBox.hgrow="ALWAYS" VBox.vgrow="ALWAYS" minHeight="240">
HBox.hgrow="ALWAYS" VBox.vgrow="NEVER" minHeight="240" prefHeight="240">
<padding>
<Insets bottom="10" left="10" right="10" top="10"/>
</padding>
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/seedu/address/logic/LogicManagerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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.
*/
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/seedu/address/logic/parser/UniMateParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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 + " "
Expand Down
57 changes: 37 additions & 20 deletions src/test/java/seedu/address/model/calendar/CalendarTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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());
}
}
Loading

0 comments on commit 2ba4298

Please sign in to comment.