Skip to content

Commit

Permalink
Added JUnit Test for EventPeriod class
Browse files Browse the repository at this point in the history
Added 100% code coverage for EventPeriod class
  • Loading branch information
lihongguang00 committed Oct 13, 2023
1 parent dfbb32c commit c874bf0
Show file tree
Hide file tree
Showing 4 changed files with 180 additions and 27 deletions.
5 changes: 5 additions & 0 deletions src/main/java/seedu/address/model/event/EventPeriod.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package seedu.address.model.event;

import static java.util.Objects.requireNonNull;
import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;

import java.time.Duration;
import java.time.LocalDate;
Expand Down Expand Up @@ -59,6 +60,8 @@ public static EventPeriod createNonConflictingPeriod() {
* @return True if the period is valid, false otherwise.
*/
public static boolean isValidPeriod(String startString, String endString) {
requireAllNonNull(startString, endString);

LocalDateTime startDateTime;
LocalDateTime endDateTime;
try {
Expand Down Expand Up @@ -89,6 +92,7 @@ public boolean isOverlapping(EventPeriod other) {
* @return 1 if this EventPeriod is after the other, -1 if it's before, 0 if they are the same.
*/
public int compareTo(EventPeriod other) {
requireNonNull(other);
if (this.start.isBefore(other.start)) {
return -1;
} else if (this.start.isEqual(other.start)) {
Expand All @@ -115,6 +119,7 @@ public List<LocalDate> getDates() {

@Override
public boolean equals(Object other) {
requireNonNull(other);
if (other == this) {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ public class CommandTestUtil {
public static final String VALID_TAG_HUSBAND = "husband";
public static final String VALID_TAG_FRIEND = "friend";
public static final String VALID_DESCRIPTION = "sleep";
public static final String VALID_START_DATE = "2023-01-01 08:00";
public static final String VALID_END_DATE = "2023-01-01 09:00";
public static final String VALID_START_DATE_EARLIER = "2023-01-01 08:00";
public static final String VALID_END_DATE_EARLIER = "2023-01-01 09:00";
public static final String VALID_START_DATE_LATER = "2024-01-01 08:00";
public static final String VALID_END_DATE_LATER = "2024-01-01 09:00";
public static final String NAME_DESC_AMY = " " + PREFIX_NAME + VALID_NAME_AMY;
public static final String NAME_DESC_BOB = " " + PREFIX_NAME + VALID_NAME_BOB;
public static final String PHONE_DESC_AMY = " " + PREFIX_PHONE + VALID_PHONE_AMY;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import static seedu.address.logic.commands.CommandTestUtil.INVALID_DATE;
import static seedu.address.logic.commands.CommandTestUtil.INVALID_DESCRIPTION;
import static seedu.address.logic.commands.CommandTestUtil.VALID_DESCRIPTION;
import static seedu.address.logic.commands.CommandTestUtil.VALID_END_DATE;
import static seedu.address.logic.commands.CommandTestUtil.VALID_START_DATE;
import static seedu.address.logic.commands.CommandTestUtil.VALID_END_DATE_EARLIER;
import static seedu.address.logic.commands.CommandTestUtil.VALID_START_DATE_EARLIER;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EVENT_DESCRIPTION;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EVENT_END_DATE_TIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EVENT_START_DATE_TIME;
Expand All @@ -27,10 +27,10 @@ public class AddEventCommandParserTest {
@Test
public void parse_allFieldsPresent_success() {
Event expectedEvent = new EventBuilder().withDescription(VALID_DESCRIPTION)
.withStartEndDate(VALID_START_DATE, VALID_END_DATE).build();
.withStartEndDate(VALID_START_DATE_EARLIER, VALID_END_DATE_EARLIER).build();
String validUserInput = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseSuccess(parser, validUserInput, new AddEventCommand(expectedEvent));
}
Expand All @@ -39,34 +39,34 @@ public void parse_allFieldsPresent_success() {
public void parse_repeatedPrefix_failure() {
String userInputRepeatDescriptionPrefix = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, userInputRepeatDescriptionPrefix,
Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EVENT_DESCRIPTION));

String userInputRepeatEventStartDateTimePrefix = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, userInputRepeatEventStartDateTimePrefix,
Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EVENT_START_DATE_TIME));

String userInputRepeatEventEndDateTimePrefix = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, userInputRepeatEventEndDateTimePrefix,
Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EVENT_END_DATE_TIME));

String userInputRepeatMultiplePrefix = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, userInputRepeatMultiplePrefix,
Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EVENT_DESCRIPTION,
Expand All @@ -77,40 +77,40 @@ public void parse_repeatedPrefix_failure() {
public void parse_compulsoryFieldMissing_failure() {
String exepectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddEventCommand.MESSAGE_USAGE);

String missingDescription = " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
String missingDescription = " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, missingDescription, exepectedMessage);

String missingStartDate = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, missingStartDate, exepectedMessage);

String missingEndDate = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER;

assertParseFailure(parser, missingEndDate, exepectedMessage);
}

@Test
public void parse_invalidValue_failure() {
String userInputInvalidDescription = " " + PREFIX_EVENT_DESCRIPTION + INVALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, userInputInvalidDescription,
EventDescription.MESSAGE_CONSTRAINTS);

String userInputInvalidStartDateTime = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + INVALID_DATE
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE;
+ " " + PREFIX_EVENT_END_DATE_TIME + VALID_END_DATE_EARLIER;

assertParseFailure(parser, userInputInvalidStartDateTime,
EventPeriod.MESSAGE_CONSTRAINTS);

String userInputInvalidEndDateTime = " " + PREFIX_EVENT_DESCRIPTION + VALID_DESCRIPTION
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE
+ " " + PREFIX_EVENT_START_DATE_TIME + VALID_START_DATE_EARLIER
+ " " + PREFIX_EVENT_END_DATE_TIME + INVALID_DATE;

assertParseFailure(parser, userInputInvalidEndDateTime,
Expand Down
146 changes: 146 additions & 0 deletions src/test/java/seedu/address/model/event/EventPeriodTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
package seedu.address.model.event;

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.model.event.EventPeriod.isValidPeriod;
import static seedu.address.testutil.Assert.assertThrows;
import static seedu.address.logic.commands.CommandTestUtil.VALID_END_DATE_EARLIER;
import static seedu.address.logic.commands.CommandTestUtil.VALID_START_DATE_EARLIER;
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.logic.commands.CommandTestUtil.INVALID_DATE;

import java.time.format.DateTimeParseException;

import org.junit.jupiter.api.Test;

import seedu.address.testutil.EventPeriodBuilder;

public class EventPeriodTest {
@Test
public void constructorTest() {
assertThrows(DateTimeParseException.class, () ->
new EventPeriod(INVALID_DATE, VALID_END_DATE_EARLIER));

assertThrows(DateTimeParseException.class, () ->
new EventPeriod(VALID_START_DATE_EARLIER, INVALID_DATE));

assertThrows(DateTimeParseException.class, () ->
new EventPeriod(INVALID_DATE, INVALID_DATE));

assertThrows(NullPointerException.class, () ->
new EventPeriod(null, VALID_END_DATE_EARLIER));

assertThrows(NullPointerException.class, () ->
new EventPeriod(VALID_START_DATE_EARLIER, null));

assertThrows(NullPointerException.class, () ->
new EventPeriod(null, null));
}

@Test
public void createNonConflictingPeriodTest() {
EventPeriod nonConflictingPeriod = EventPeriod.createNonConflictingPeriod();
EventPeriod validPeriod = new EventPeriodBuilder().build();

assertFalse(validPeriod.isOverlapping(nonConflictingPeriod));
}

@Test
public void isValidPeriodTest() {
assertTrue(isValidPeriod(VALID_START_DATE_EARLIER, VALID_END_DATE_EARLIER));

assertFalse(isValidPeriod(VALID_END_DATE_EARLIER, VALID_START_DATE_EARLIER));

assertFalse(isValidPeriod(VALID_START_DATE_EARLIER, VALID_START_DATE_EARLIER));

assertFalse(isValidPeriod(INVALID_DATE, VALID_END_DATE_EARLIER));

assertFalse(isValidPeriod(VALID_START_DATE_EARLIER, INVALID_DATE));

assertFalse(isValidPeriod(INVALID_DATE, INVALID_DATE));
}

@Test
public void isOverlappingTest() {
EventPeriod earlierNoOverlapEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_EARLIER).build();
EventPeriod laterNoOverlapEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_LATER, VALID_END_DATE_LATER).build();
EventPeriod earlierOverlappingEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_LATER).build();
EventPeriod laterOverlappingEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_LATER, VALID_END_DATE_LATER).build();

assertThrows(NullPointerException.class, () -> earlierNoOverlapEventPeriod.isOverlapping(null));

assertTrue(earlierOverlappingEventPeriod.isOverlapping(laterOverlappingEventPeriod));

assertTrue(laterOverlappingEventPeriod.isOverlapping(earlierOverlappingEventPeriod));

assertFalse(earlierNoOverlapEventPeriod.isOverlapping(laterNoOverlapEventPeriod));

assertFalse(laterNoOverlapEventPeriod.isOverlapping(earlierNoOverlapEventPeriod));
}

@Test
public void compareToTest() {
EventPeriod earlierEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_EARLIER).build();
EventPeriod laterEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_LATER, VALID_END_DATE_LATER).build();

assertThrows(NullPointerException.class, () -> earlierEventPeriod.compareTo(null));

assertEquals(-1, earlierEventPeriod.compareTo(laterEventPeriod));

assertEquals(0, earlierEventPeriod.compareTo(earlierEventPeriod));

assertEquals(1, laterEventPeriod.compareTo(earlierEventPeriod));
}

@Test
public void getDatesTest() {
EventPeriod validEventPeriod = new EventPeriodBuilder().build();

assertFalse(validEventPeriod.getDates().isEmpty());
}

@Test
public void equalsTest() {
EventPeriod validEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_LATER).build();
EventPeriod equivalentEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_LATER).build();
EventPeriod laterStartEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_LATER, VALID_END_DATE_LATER).build();
EventPeriod earlierEndEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_EARLIER).build();
Object nonEventPeriodObject = new Object();

assertThrows(NullPointerException.class, () -> validEventPeriod.equals(null));

assertTrue(validEventPeriod.equals(validEventPeriod));

assertTrue(validEventPeriod.equals(equivalentEventPeriod));

assertFalse(validEventPeriod.equals(nonEventPeriodObject));

assertFalse(validEventPeriod.equals(laterStartEventPeriod));

assertFalse(validEventPeriod.equals(earlierEndEventPeriod));
}

@Test
public void toStringTest() {
EventPeriod validEventPeriod = new EventPeriodBuilder()
.changeStartAndEnd(VALID_START_DATE_EARLIER, VALID_END_DATE_EARLIER).build();
String expectedString = "start: "
+ VALID_START_DATE_EARLIER
+ "; end: "
+ VALID_END_DATE_EARLIER;

assertEquals(validEventPeriod.toString(), expectedString);
}
}

0 comments on commit c874bf0

Please sign in to comment.