From 7d44843347701da40a1a88e471602870404c73ef Mon Sep 17 00:00:00 2001 From: Andre Sim Jing Xiang Date: Thu, 2 Nov 2023 12:41:15 +0800 Subject: [PATCH 1/4] Add SortTasksCommand and parser --- .../logic/commands/SortTasksCommand.java | 64 +++++++++++++++++++ .../logic/parser/SortTasksCommandParser.java | 27 ++++++++ .../address/logic/parser/UniMateParser.java | 4 ++ src/main/java/seedu/address/model/Model.java | 5 ++ .../seedu/address/model/ModelManager.java | 5 ++ .../seedu/address/model/task/TaskManager.java | 18 ++++++ .../InvalidSortingOrderException.java | 7 ++ 7 files changed, 130 insertions(+) create mode 100644 src/main/java/seedu/address/logic/commands/SortTasksCommand.java create mode 100644 src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java create mode 100644 src/main/java/seedu/address/model/task/exceptions/InvalidSortingOrderException.java diff --git a/src/main/java/seedu/address/logic/commands/SortTasksCommand.java b/src/main/java/seedu/address/logic/commands/SortTasksCommand.java new file mode 100644 index 00000000000..376d5abe117 --- /dev/null +++ b/src/main/java/seedu/address/logic/commands/SortTasksCommand.java @@ -0,0 +1,64 @@ +package seedu.address.logic.commands; + +import seedu.address.commons.util.ToStringBuilder; +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.task.exceptions.InvalidSortingOrderException; + +import static java.util.Objects.requireNonNull; + +/** + * Changes the sorting order of tasks in the task manager. + */ +public class SortTasksCommand extends Command { + public static final String COMMAND_WORD = "sortTasks"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + ": Changes the way tasks in the task list are sorted." + + "Parameters: Description OR Deadline\n" + + "Example: " + COMMAND_WORD + " Description"; + + public static final String MESSAGE_SUCCESS = "Sorting order changed to %s."; + + public static final String MESSAGE_INVALID_TYPE = "Sorting order provided is invalid!\n" + + "Sorting orders available: DESCRIPTION/DEADLINE."; + + private final String comparatorType; + + public SortTasksCommand(String comparatorType) { + this.comparatorType = comparatorType; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + + try { + model.sortTasksBy(comparatorType); + } catch (InvalidSortingOrderException e) { + throw new CommandException(MESSAGE_INVALID_TYPE); + } + return new CommandResult(String.format(MESSAGE_SUCCESS, comparatorType)); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof SortTasksCommand)) { + return false; + } + + SortTasksCommand otherSortTasksCommand = (SortTasksCommand) other; + return comparatorType.equals((otherSortTasksCommand).comparatorType); + } + + @Override + public String toString() { + return new ToStringBuilder(this) + .add("comparatorType", comparatorType) + .toString(); + } +} diff --git a/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java b/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java new file mode 100644 index 00000000000..21f1454c51b --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java @@ -0,0 +1,27 @@ +package seedu.address.logic.parser; + + +import seedu.address.logic.commands.SortTasksCommand; +import seedu.address.logic.parser.exceptions.ParseException; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +/** + * Parses input arguments and creates a new SortTasksCommand object. + */ +public class SortTasksCommandParser implements Parser { + + /** + * Parses the given {@code String} of arguments in the context of the SortTasksCommand + * and returns a SortTasksCommand object for execution + * @throws ParseException if no parameters are provided. + */ + public SortTasksCommand parse(String args) throws ParseException { + String trimmedArgs = args.trim(); + if (trimmedArgs.isEmpty()) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, SortTasksCommand.MESSAGE_USAGE)); + } + return new SortTasksCommand(trimmedArgs); + } +} diff --git a/src/main/java/seedu/address/logic/parser/UniMateParser.java b/src/main/java/seedu/address/logic/parser/UniMateParser.java index 012f201afb0..04c790b2c06 100644 --- a/src/main/java/seedu/address/logic/parser/UniMateParser.java +++ b/src/main/java/seedu/address/logic/parser/UniMateParser.java @@ -24,6 +24,7 @@ import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListCommand; import seedu.address.logic.commands.SortCommand; +import seedu.address.logic.commands.SortTasksCommand; import seedu.address.logic.commands.SwitchListCommand; import seedu.address.logic.parser.exceptions.ParseException; @@ -109,6 +110,9 @@ public Command parseCommand(String userInput) throws ParseException { case SwitchListCommand.COMMAND_WORD: return new SwitchListCommand(); + case SortTasksCommand.COMMAND_WORD: + return new SortTasksCommandParser().parse(arguments); + default: logger.finer("This user input caused a ParseException: " + userInput); throw new ParseException(MESSAGE_UNKNOWN_COMMAND); diff --git a/src/main/java/seedu/address/model/Model.java b/src/main/java/seedu/address/model/Model.java index 600986b8382..9e7d2214b54 100644 --- a/src/main/java/seedu/address/model/Model.java +++ b/src/main/java/seedu/address/model/Model.java @@ -182,6 +182,11 @@ public interface Model { */ TaskManager getTaskManager(); + /** + * Sorts the task list by the preset comparator type listed. + */ + void sortTasksBy(String comparatorType); + /** * Updates the filter of the filtered person list to filter by the given {@code predicate}. * @throws NullPointerException if {@code predicate} is null. diff --git a/src/main/java/seedu/address/model/ModelManager.java b/src/main/java/seedu/address/model/ModelManager.java index da51c95721e..fedb04bedf7 100644 --- a/src/main/java/seedu/address/model/ModelManager.java +++ b/src/main/java/seedu/address/model/ModelManager.java @@ -236,6 +236,11 @@ public ObservableList getTaskList() { return taskManager.getTaskList(); } + @Override + public void sortTasksBy(String comparatorType) { + taskManager.sortTasksBy(comparatorType); + } + //=========== Filtered Person List Accessors ============================================================= /** diff --git a/src/main/java/seedu/address/model/task/TaskManager.java b/src/main/java/seedu/address/model/task/TaskManager.java index 41dfcf7ec1d..1c8939ec4e2 100644 --- a/src/main/java/seedu/address/model/task/TaskManager.java +++ b/src/main/java/seedu/address/model/task/TaskManager.java @@ -6,11 +6,14 @@ import java.util.List; import javafx.collections.ObservableList; +import seedu.address.model.task.exceptions.InvalidSortingOrderException; /** * Represents a task manager that stores and manages tasks */ public class TaskManager implements ReadOnlyTaskManager { + private static final String COMPARATOR_TYPE_DESCRIPTION = "Description"; + private static final String COMPARATOR_TYPE_DEADLINE = "Deadline"; private final TaskList tasks; private Comparator sortingOrder; @@ -74,6 +77,7 @@ public Task deleteTask(int index) { */ public void setSortDeadline() { sortingOrder = new Task.TaskDeadlineComparator(); + sort(); } /** @@ -81,6 +85,20 @@ public void setSortDeadline() { */ public void setSortDescription() { sortingOrder = new Task.TaskDescriptorComparator(); + sort(); + } + + /** + * Sets the sorting order of the task list to the specified comparator type. + */ + public void sortTasksBy(String comparatorType) { + if (comparatorType.equalsIgnoreCase(COMPARATOR_TYPE_DESCRIPTION)) { + setSortDescription(); + } else if (comparatorType.equalsIgnoreCase(COMPARATOR_TYPE_DEADLINE)) { + setSortDeadline();; + } else { + throw new InvalidSortingOrderException(); + } } /** diff --git a/src/main/java/seedu/address/model/task/exceptions/InvalidSortingOrderException.java b/src/main/java/seedu/address/model/task/exceptions/InvalidSortingOrderException.java new file mode 100644 index 00000000000..60909f8973f --- /dev/null +++ b/src/main/java/seedu/address/model/task/exceptions/InvalidSortingOrderException.java @@ -0,0 +1,7 @@ +package seedu.address.model.task.exceptions; + +/** + * An exception thrown when a sorting order provided is invalid. + */ +public class InvalidSortingOrderException extends RuntimeException { +} From 93d2199683ee38fe7d67b7b3763957f3887cf3fb Mon Sep 17 00:00:00 2001 From: Andre Sim Jing Xiang Date: Thu, 2 Nov 2023 12:45:11 +0800 Subject: [PATCH 2/4] Fix testing errors caused by changing Model interface --- .../java/seedu/address/logic/commands/SortTasksCommand.java | 6 +++--- .../seedu/address/logic/parser/SortTasksCommandParser.java | 3 +-- .../java/seedu/address/logic/commands/AddCommandTest.java | 5 +++++ .../seedu/address/logic/commands/AddEventCommandTest.java | 5 +++++ .../seedu/address/logic/commands/AddTaskCommandTest.java | 5 +++++ .../address/logic/commands/ClearEventsCommandTest.java | 5 +++++ .../address/logic/commands/DeleteEventCommandTest.java | 5 +++++ 7 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/SortTasksCommand.java b/src/main/java/seedu/address/logic/commands/SortTasksCommand.java index 376d5abe117..f75012a9f7b 100644 --- a/src/main/java/seedu/address/logic/commands/SortTasksCommand.java +++ b/src/main/java/seedu/address/logic/commands/SortTasksCommand.java @@ -1,16 +1,16 @@ package seedu.address.logic.commands; +import static java.util.Objects.requireNonNull; + import seedu.address.commons.util.ToStringBuilder; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.model.Model; import seedu.address.model.task.exceptions.InvalidSortingOrderException; -import static java.util.Objects.requireNonNull; - /** * Changes the sorting order of tasks in the task manager. */ -public class SortTasksCommand extends Command { +public class SortTasksCommand extends Command { public static final String COMMAND_WORD = "sortTasks"; public static final String MESSAGE_USAGE = COMMAND_WORD + ": Changes the way tasks in the task list are sorted." diff --git a/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java b/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java index 21f1454c51b..d0b188f53a3 100644 --- a/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java +++ b/src/main/java/seedu/address/logic/parser/SortTasksCommandParser.java @@ -1,11 +1,10 @@ package seedu.address.logic.parser; +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import seedu.address.logic.commands.SortTasksCommand; import seedu.address.logic.parser.exceptions.ParseException; -import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; - /** * Parses input arguments and creates a new SortTasksCommand object. */ diff --git a/src/test/java/seedu/address/logic/commands/AddCommandTest.java b/src/test/java/seedu/address/logic/commands/AddCommandTest.java index 84b778c40c7..06e62625143 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddCommandTest.java @@ -242,6 +242,11 @@ public TaskManager getTaskManager() { throw new AssertionError("This method should not be called."); } + @Override + public void sortTasksBy(String comparatorType) { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java b/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java index e870a4267ce..e5e185d2c62 100644 --- a/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddEventCommandTest.java @@ -227,6 +227,11 @@ public TaskManager getTaskManager() { throw new AssertionError("This method should not be called."); } + @Override + public void sortTasksBy(String comparatorType) { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/AddTaskCommandTest.java b/src/test/java/seedu/address/logic/commands/AddTaskCommandTest.java index 921f8561fab..d34a70e7b1f 100644 --- a/src/test/java/seedu/address/logic/commands/AddTaskCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/AddTaskCommandTest.java @@ -234,6 +234,11 @@ public TaskManager getTaskManager() { throw new AssertionError("This method should not be called."); } + @Override + public void sortTasksBy(String comparatorType) { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/ClearEventsCommandTest.java b/src/test/java/seedu/address/logic/commands/ClearEventsCommandTest.java index 51a1fbfa8ce..6ed9de8cae4 100644 --- a/src/test/java/seedu/address/logic/commands/ClearEventsCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/ClearEventsCommandTest.java @@ -259,6 +259,11 @@ public TaskManager getTaskManager() { throw new AssertionError("This method should not be called."); } + @Override + public void sortTasksBy(String comparatorType) { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); diff --git a/src/test/java/seedu/address/logic/commands/DeleteEventCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteEventCommandTest.java index a695dc08d70..c755a92aaec 100644 --- a/src/test/java/seedu/address/logic/commands/DeleteEventCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/DeleteEventCommandTest.java @@ -238,6 +238,11 @@ public TaskManager getTaskManager() { throw new AssertionError("This method should not be called."); } + @Override + public void sortTasksBy(String comparatorType) { + throw new AssertionError("This method should not be called."); + } + @Override public void updateFilteredPersonList(Predicate predicate) { throw new AssertionError("This method should not be called."); From 66d4871f138987c6c36522c763e991e2c882a91f Mon Sep 17 00:00:00 2001 From: Andre Sim Jing Xiang Date: Thu, 2 Nov 2023 13:48:12 +0800 Subject: [PATCH 3/4] Implement JUnit tests for SortTasksCommand and parser --- .../seedu/address/model/task/TaskManager.java | 7 ++ .../logic/commands/SortTasksCommandTest.java | 70 +++++++++++++++++++ .../parser/SortTasksCommandParserTest.java | 29 ++++++++ .../logic/parser/UniMateParserTest.java | 70 +++++++++++++++++++ .../address/model/task/TaskManagerTest.java | 25 +++++++ 5 files changed, 201 insertions(+) create mode 100644 src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java create mode 100644 src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java diff --git a/src/main/java/seedu/address/model/task/TaskManager.java b/src/main/java/seedu/address/model/task/TaskManager.java index 1c8939ec4e2..d0b1ffc7718 100644 --- a/src/main/java/seedu/address/model/task/TaskManager.java +++ b/src/main/java/seedu/address/model/task/TaskManager.java @@ -88,6 +88,13 @@ public void setSortDescription() { sort(); } + /** + * Returns the sorting order. + */ + public Comparator getSortingOrder() { + return sortingOrder; + } + /** * Sets the sorting order of the task list to the specified comparator type. */ diff --git a/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java b/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java new file mode 100644 index 00000000000..e8018ed8c27 --- /dev/null +++ b/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java @@ -0,0 +1,70 @@ +package seedu.address.logic.commands; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.testutil.TypicalEvents.getTypicalCalendar; +import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; +import static seedu.address.testutil.TypicalTasks.getTypicalTaskManager; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.exceptions.CommandException; +import seedu.address.model.Model; +import seedu.address.model.ModelManager; +import seedu.address.model.UserPrefs; +import seedu.address.model.task.Task; + + +class SortTasksCommandTest { + private Model model = new ModelManager(getTypicalAddressBook(), getTypicalCalendar(), getTypicalTaskManager(), + new UserPrefs()); + private final static String COMPARATOR_TYPE_DESCRIPTION = "Description"; + private final static String COMPARATOR_TYPE_DEADLINE = "Deadline"; + private final static String COMPARATOR_TYPE_INVALID = "Invalid"; + + @Test + public void equals() { + SortTasksCommand sortTasksByDescriptionCommand = new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION); + SortTasksCommand sortTasksByDeadlineCommand = new SortTasksCommand(COMPARATOR_TYPE_DEADLINE); + SortTasksCommand invalidSortTasksCommand = new SortTasksCommand(COMPARATOR_TYPE_INVALID); + Object notSortTasksCommand = new Object(); + + assertTrue(sortTasksByDescriptionCommand.equals(sortTasksByDescriptionCommand)); + + assertFalse(sortTasksByDeadlineCommand.equals(sortTasksByDescriptionCommand)); + + assertFalse(invalidSortTasksCommand.equals(sortTasksByDeadlineCommand)); + + assertFalse(sortTasksByDescriptionCommand.equals(notSortTasksCommand)); + + assertFalse(sortTasksByDescriptionCommand.equals(null)); + } + + @Test + public void execute_nullInput_throwsNullPointerException() { + assertThrows(NullPointerException.class, + () -> new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION).execute(null)); + } + + @Test + public void execute_invalidType_throwsCommandException() { + assertThrows(CommandException.class, + () -> new SortTasksCommand(COMPARATOR_TYPE_INVALID).execute(model)); + } + + @Test + public void execute_validType_success() throws CommandException { + new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION).execute(model); + assertTrue(model.getTaskManager().getSortingOrder().equals(new Task.TaskDescriptorComparator())); + } + + @Test + public void toStringMethod() { + SortTasksCommand sortTasksCommand = new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION); + String expected = SortTasksCommand.class.getCanonicalName() + "{comparatorType=" + COMPARATOR_TYPE_DESCRIPTION + + "}"; + assertEquals(expected, sortTasksCommand.toString()); + } +} diff --git a/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java b/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java new file mode 100644 index 00000000000..8980f20eea9 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java @@ -0,0 +1,29 @@ +package seedu.address.logic.parser; + + +import org.junit.jupiter.api.Test; +import seedu.address.logic.commands.SortTasksCommand; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; + +class SortTasksCommandParserTest { + private final static String COMPARATOR_TYPE_DESCRIPTION = "Description"; + private SortTasksCommandParser parser = new SortTasksCommandParser(); + + @Test + public void parse_emptyArg_throwsParseException() { + assertParseFailure(parser, " ", + String.format(MESSAGE_INVALID_COMMAND_FORMAT, SortTasksCommand.MESSAGE_USAGE)); + } + + @Test + public void parse_validArgs_returnsSortTasksCommand() { + SortTasksCommand expectedSortTasksCommand = new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION); + assertParseSuccess(parser, "Description", expectedSortTasksCommand); + + assertParseSuccess(parser, " \n \t Description", expectedSortTasksCommand); + } + +} \ No newline at end of file diff --git a/src/test/java/seedu/address/logic/parser/UniMateParserTest.java b/src/test/java/seedu/address/logic/parser/UniMateParserTest.java index bb21b6e4855..45d580815d0 100644 --- a/src/test/java/seedu/address/logic/parser/UniMateParserTest.java +++ b/src/test/java/seedu/address/logic/parser/UniMateParserTest.java @@ -4,9 +4,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; +import static seedu.address.logic.parser.ParserUtil.DATE_TIME_STRING_FORMATTER; import static seedu.address.testutil.Assert.assertThrows; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -16,8 +18,11 @@ import seedu.address.logic.commands.AddCommand; import seedu.address.logic.commands.AddContactEventCommand; import seedu.address.logic.commands.AddEventCommand; +import seedu.address.logic.commands.AddTaskCommand; import seedu.address.logic.commands.ClearCommand; +import seedu.address.logic.commands.ClearEventsCommand; import seedu.address.logic.commands.DeleteCommand; +import seedu.address.logic.commands.DeleteEventCommand; import seedu.address.logic.commands.EditCommand; import seedu.address.logic.commands.EditCommand.EditPersonDescriptor; import seedu.address.logic.commands.ExitCommand; @@ -25,11 +30,16 @@ import seedu.address.logic.commands.HelpCommand; import seedu.address.logic.commands.ListCommand; import seedu.address.logic.commands.SortCommand; +import seedu.address.logic.commands.SortTasksCommand; +import seedu.address.logic.commands.SwitchListCommand; import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.event.EventPeriod; import seedu.address.model.person.NameContainsKeywordsPredicate; import seedu.address.model.person.Person; +import seedu.address.model.task.Task; import seedu.address.testutil.EditPersonDescriptorBuilder; import seedu.address.testutil.EventBuilder; +import seedu.address.testutil.EventPeriodBuilder; import seedu.address.testutil.PersonBuilder; import seedu.address.testutil.PersonUtil; @@ -139,6 +149,66 @@ public void parserCommand_addContactEvent() throws Exception { assertEquals(command, new AddContactEventCommand(INDEX_FIRST_PERSON, eventBuilder.build())); } + @Test + public void parserCommand_deleteEvent() throws Exception { + String targetDateTime = "2023-10-10 10:00"; + String validArg = " " + targetDateTime; + DeleteEventCommand deleteEventCommand = + new DeleteEventCommand(LocalDateTime.parse("2023-10-10 10:00", DATE_TIME_STRING_FORMATTER)); + + assertEquals(deleteEventCommand, + (DeleteEventCommand) parser.parseCommand(DeleteEventCommand.COMMAND_WORD + validArg)); + } + + @Test + public void parserCommand_clearEvents() throws Exception { + String startDateTime = "2023-10-10 10:00"; + String endDateTime = "2023-10-10 12:00"; + String validArg = " ts/" + startDateTime + + " te/" + endDateTime + + " c/CONFIRMED"; + + EventPeriod period = new EventPeriodBuilder().changeStartAndEnd(startDateTime, endDateTime).build(); + + ClearEventsCommand clearEventsCommand = + new ClearEventsCommand(period, true); + + assertEquals(clearEventsCommand, + (ClearEventsCommand) parser.parseCommand(ClearEventsCommand.COMMAND_WORD + validArg)); + } + + @Test + public void parserCommand_addTask() throws Exception { + String description = "A"; + String validArg = " d/" + description; + + AddTaskCommand addTaskCommand = new AddTaskCommand(new Task(description, null)); + + assertEquals(addTaskCommand, + (AddTaskCommand) parser.parseCommand(AddTaskCommand.COMMAND_WORD + validArg)); + } + + @Test + public void parserCommand_switchList() throws Exception { + String validArg = " 1231231"; + + SwitchListCommand switchListCommand = new SwitchListCommand(); + + assertTrue(parser.parseCommand(SwitchListCommand.COMMAND_WORD + validArg) + instanceof SwitchListCommand); + } + + @Test + public void parserCommand_sortTasks() throws Exception { + String comparatorType = "Description"; + String validArg = " " + comparatorType; + + SortTasksCommand sortTasksCommand = new SortTasksCommand(comparatorType); + + assertEquals(sortTasksCommand, + (SortTasksCommand) parser.parseCommand(SortTasksCommand.COMMAND_WORD + validArg)); + } + @Test public void parseCommand_unrecognisedInput_throwsParseException() { assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () diff --git a/src/test/java/seedu/address/model/task/TaskManagerTest.java b/src/test/java/seedu/address/model/task/TaskManagerTest.java index 277b0e2a8a1..4b45fe4a0e8 100644 --- a/src/test/java/seedu/address/model/task/TaskManagerTest.java +++ b/src/test/java/seedu/address/model/task/TaskManagerTest.java @@ -6,6 +6,7 @@ import static seedu.address.testutil.Assert.assertThrows; import static seedu.address.testutil.TypicalTasks.ASSIGNMENT; import static seedu.address.testutil.TypicalTasks.HYDRATION; +import static seedu.address.testutil.TypicalTasks.MEAL; import org.junit.jupiter.api.Test; @@ -42,6 +43,30 @@ public void deleteTask_taskFound_success() { assertEquals(ASSIGNMENT, taskManager.deleteTask(1)); } + @Test + public void sortDescription_success() { + taskManager.addTask(ASSIGNMENT); + taskManager.addTask(MEAL); + + taskManager.sortTasksBy("Deadline"); + taskManager.sortTasksBy("Description"); + + assertTrue(taskManager.deleteTask(1).equals(MEAL)); + assertTrue(taskManager.deleteTask(1).equals(ASSIGNMENT)); + } + + @Test + public void sortDeadline_success() { + taskManager.addTask(ASSIGNMENT); + taskManager.addTask(MEAL); + + taskManager.sortTasksBy("Description"); + taskManager.sortTasksBy("Deadline"); + + assertTrue(taskManager.deleteTask(1).equals(ASSIGNMENT)); + assertTrue(taskManager.deleteTask(1).equals(MEAL)); + } + @Test public void equalsMethod() { taskManager.addTask(ASSIGNMENT); From d3d3e0735cddc9305888aada1e8647b19fcb05cd Mon Sep 17 00:00:00 2001 From: Andre Sim Jing Xiang Date: Thu, 2 Nov 2023 13:58:27 +0800 Subject: [PATCH 4/4] Fix checkstyle violations --- .../logic/commands/SortTasksCommandTest.java | 14 +++++++------- .../logic/parser/SortTasksCommandParserTest.java | 13 ++++++------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java b/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java index e8018ed8c27..135434b60f8 100644 --- a/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/SortTasksCommandTest.java @@ -18,11 +18,11 @@ class SortTasksCommandTest { + private static final String COMPARATOR_TYPE_DESCRIPTION = "Description"; + private static final String COMPARATOR_TYPE_DEADLINE = "Deadline"; + private static final String COMPARATOR_TYPE_INVALID = "Invalid"; private Model model = new ModelManager(getTypicalAddressBook(), getTypicalCalendar(), getTypicalTaskManager(), new UserPrefs()); - private final static String COMPARATOR_TYPE_DESCRIPTION = "Description"; - private final static String COMPARATOR_TYPE_DEADLINE = "Deadline"; - private final static String COMPARATOR_TYPE_INVALID = "Invalid"; @Test public void equals() { @@ -44,14 +44,14 @@ public void equals() { @Test public void execute_nullInput_throwsNullPointerException() { - assertThrows(NullPointerException.class, - () -> new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION).execute(null)); + assertThrows(NullPointerException.class, () -> + new SortTasksCommand(COMPARATOR_TYPE_DESCRIPTION).execute(null)); } @Test public void execute_invalidType_throwsCommandException() { - assertThrows(CommandException.class, - () -> new SortTasksCommand(COMPARATOR_TYPE_INVALID).execute(model)); + assertThrows(CommandException.class, () -> + new SortTasksCommand(COMPARATOR_TYPE_INVALID).execute(model)); } @Test diff --git a/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java b/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java index 8980f20eea9..d40fa4e24d0 100644 --- a/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/SortTasksCommandParserTest.java @@ -1,15 +1,15 @@ package seedu.address.logic.parser; - -import org.junit.jupiter.api.Test; -import seedu.address.logic.commands.SortTasksCommand; - import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.SortTasksCommand; + class SortTasksCommandParserTest { - private final static String COMPARATOR_TYPE_DESCRIPTION = "Description"; + private static final String COMPARATOR_TYPE_DESCRIPTION = "Description"; private SortTasksCommandParser parser = new SortTasksCommandParser(); @Test @@ -25,5 +25,4 @@ public void parse_validArgs_returnsSortTasksCommand() { assertParseSuccess(parser, " \n \t Description", expectedSortTasksCommand); } - -} \ No newline at end of file +}