From 8875a3e1be78c4e5973e72bbe3abce1337a6151f Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Fri, 21 Oct 2022 18:50:23 +0800 Subject: [PATCH 01/24] Feat: add get filtered task list logic interface --- src/main/java/seedu/address/logic/Logic.java | 3 ++ .../seedu/address/logic/LogicManager.java | 29 ++++++++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/seedu/address/logic/Logic.java b/src/main/java/seedu/address/logic/Logic.java index 92cd8fa605a..ef806233b5c 100644 --- a/src/main/java/seedu/address/logic/Logic.java +++ b/src/main/java/seedu/address/logic/Logic.java @@ -33,6 +33,9 @@ public interface Logic { /** Returns an unmodifiable view of the filtered list of persons */ ObservableList getFilteredPersonList(); + /** Returns an unmodifiable view of the filtered list of tasks */ + ObservableList getFilteredTaskList(); + /** * Returns the user prefs' address book file path. */ diff --git a/src/main/java/seedu/address/logic/LogicManager.java b/src/main/java/seedu/address/logic/LogicManager.java index 9d9c6d15bdc..51058141b98 100644 --- a/src/main/java/seedu/address/logic/LogicManager.java +++ b/src/main/java/seedu/address/logic/LogicManager.java @@ -5,17 +5,19 @@ import java.util.logging.Logger; import javafx.collections.ObservableList; -import seedu.address.commons.core.GuiSettings; -import seedu.address.commons.core.LogsCenter; -import seedu.address.logic.commands.Command; -import seedu.address.logic.commands.CommandResult; -import seedu.address.logic.commands.exceptions.CommandException; -import seedu.address.logic.parser.AddressBookParser; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.Model; -import seedu.address.model.ReadOnlyAddressBook; -import seedu.address.model.person.Person; -import seedu.address.storage.Storage; +import swift.commons.core.GuiSettings; +import swift.commons.core.LogsCenter; +import swift.logic.commands.Command; +import swift.logic.commands.CommandResult; +import swift.logic.commands.exceptions.CommandException; +import swift.logic.parser.AddressBookParser; +import swift.logic.parser.exceptions.ParseException; +import swift.model.Model; +import swift.model.ReadOnlyAddressBook; +import swift.model.person.Person; +import swift.model.task.Task; +import swift.storage.Storage; + /** * The main LogicManager of the app. @@ -64,6 +66,11 @@ public ObservableList getFilteredPersonList() { return model.getFilteredPersonList(); } + @Override + public ObservableList getFilteredTaskList() { + return model.getFilteredTaskList(); + } + @Override public Path getAddressBookFilePath() { return model.getAddressBookFilePath(); From 696793d5ce57863c3c87954889b0296d99519357 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Fri, 21 Oct 2022 18:54:16 +0800 Subject: [PATCH 02/24] Fix: add missing Task import --- src/main/java/swift/logic/Logic.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/swift/logic/Logic.java b/src/main/java/swift/logic/Logic.java index 71148ca4f34..40173805bf4 100644 --- a/src/main/java/swift/logic/Logic.java +++ b/src/main/java/swift/logic/Logic.java @@ -9,6 +9,7 @@ import swift.logic.parser.exceptions.ParseException; import swift.model.ReadOnlyAddressBook; import swift.model.person.Person; +import swift.model.task.Task; /** * API of the Logic component From 88961c3dff3b7ce829acabf23e1681b5a7a71b48 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Fri, 21 Oct 2022 18:54:29 +0800 Subject: [PATCH 03/24] Fix: fix lint errors --- src/main/java/swift/logic/LogicManager.java | 123 ++++++++++---------- 1 file changed, 61 insertions(+), 62 deletions(-) diff --git a/src/main/java/swift/logic/LogicManager.java b/src/main/java/swift/logic/LogicManager.java index 30a1ad6541d..37cffc4b18a 100644 --- a/src/main/java/swift/logic/LogicManager.java +++ b/src/main/java/swift/logic/LogicManager.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.nio.file.Path; import java.util.logging.Logger; + import javafx.collections.ObservableList; import swift.commons.core.GuiSettings; import swift.commons.core.LogsCenter; @@ -22,68 +23,66 @@ */ public class LogicManager implements Logic { - public static final String FILE_OPS_ERROR_MESSAGE = - "Could not save data to file: "; - private final Logger logger = LogsCenter.getLogger(LogicManager.class); - - private final Model model; - private final Storage storage; - private final AddressBookParser addressBookParser; - - /** - * Constructs a {@code LogicManager} with the given {@code Model} and {@code Storage}. - */ - public LogicManager(Model model, Storage storage) { - this.model = model; - this.storage = storage; - addressBookParser = new AddressBookParser(); - } - - @Override - public CommandResult execute(String commandText) - throws CommandException, ParseException { - logger.info("----------------[USER COMMAND][" + commandText + "]"); - - CommandResult commandResult; - Command command = addressBookParser.parseCommand(commandText); - commandResult = command.execute(model); - - try { - storage.saveAddressBook(model.getAddressBook()); - } catch (IOException ioe) { - throw new CommandException(FILE_OPS_ERROR_MESSAGE + ioe, ioe); + public static final String FILE_OPS_ERROR_MESSAGE = "Could not save data to file: "; + private final Logger logger = LogsCenter.getLogger(LogicManager.class); + + private final Model model; + private final Storage storage; + private final AddressBookParser addressBookParser; + + /** + * Constructs a {@code LogicManager} with the given {@code Model} and {@code Storage}. + */ + public LogicManager(Model model, Storage storage) { + this.model = model; + this.storage = storage; + addressBookParser = new AddressBookParser(); + } + + @Override + public CommandResult execute(String commandText) throws CommandException, ParseException { + logger.info("----------------[USER COMMAND][" + commandText + "]"); + + CommandResult commandResult; + Command command = addressBookParser.parseCommand(commandText); + commandResult = command.execute(model); + + try { + storage.saveAddressBook(model.getAddressBook()); + } catch (IOException ioe) { + throw new CommandException(FILE_OPS_ERROR_MESSAGE + ioe, ioe); + } + + return commandResult; + } + + @Override + public ReadOnlyAddressBook getAddressBook() { + return model.getAddressBook(); } - return commandResult; - } - - @Override - public ReadOnlyAddressBook getAddressBook() { - return model.getAddressBook(); - } - - @Override - public ObservableList getFilteredPersonList() { - return model.getFilteredPersonList(); - } - - @Override - public ObservableList getFilteredTaskList() { - return model.getFilteredTaskList(); - } - - @Override - public Path getAddressBookFilePath() { - return model.getAddressBookFilePath(); - } - - @Override - public GuiSettings getGuiSettings() { - return model.getGuiSettings(); - } - - @Override - public void setGuiSettings(GuiSettings guiSettings) { - model.setGuiSettings(guiSettings); - } + @Override + public ObservableList getFilteredPersonList() { + return model.getFilteredPersonList(); + } + + @Override + public ObservableList getFilteredTaskList() { + return model.getFilteredTaskList(); + } + + @Override + public Path getAddressBookFilePath() { + return model.getAddressBookFilePath(); + } + + @Override + public GuiSettings getGuiSettings() { + return model.getGuiSettings(); + } + + @Override + public void setGuiSettings(GuiSettings guiSettings) { + model.setGuiSettings(guiSettings); + } } From 57e3549a087aae950860171bd10dc89bd1ad2197 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 02:54:15 +0800 Subject: [PATCH 04/24] Feat: add PersonTaskCard and PersonTaskCardList fxml --- src/main/resources/view/PersonTaskCard.fxml | 43 +++++++++++++++++++ .../resources/view/PersonTaskListPanel.fxml | 15 +++++++ 2 files changed, 58 insertions(+) create mode 100644 src/main/resources/view/PersonTaskCard.fxml create mode 100644 src/main/resources/view/PersonTaskListPanel.fxml diff --git a/src/main/resources/view/PersonTaskCard.fxml b/src/main/resources/view/PersonTaskCard.fxml new file mode 100644 index 00000000000..ead33b36e62 --- /dev/null +++ b/src/main/resources/view/PersonTaskCard.fxml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/view/PersonTaskListPanel.fxml b/src/main/resources/view/PersonTaskListPanel.fxml new file mode 100644 index 00000000000..f3deb6d96c7 --- /dev/null +++ b/src/main/resources/view/PersonTaskListPanel.fxml @@ -0,0 +1,15 @@ + + + + + + + + + + + From 84b925598de12ce495b0fe274848fd9b5296d9a7 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 02:54:53 +0800 Subject: [PATCH 05/24] Feat: add PersonTaskCard and PersonTaskList java --- src/main/java/swift/ui/PersonTaskCard.java | 60 +++++++++++++++++++ .../java/swift/ui/PersonTaskListPanel.java | 49 +++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/main/java/swift/ui/PersonTaskCard.java create mode 100644 src/main/java/swift/ui/PersonTaskListPanel.java diff --git a/src/main/java/swift/ui/PersonTaskCard.java b/src/main/java/swift/ui/PersonTaskCard.java new file mode 100644 index 00000000000..7bdbebdc5f5 --- /dev/null +++ b/src/main/java/swift/ui/PersonTaskCard.java @@ -0,0 +1,60 @@ +package swift.ui; + +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.layout.HBox; +import javafx.scene.layout.Region; +import swift.model.task.Task; + +/** + * An UI component that displays information of a {@code Person}. + */ +public class PersonTaskCard extends UiPart { + + private static final String FXML = "PersonTaskCard.fxml"; + + /** + * Note: Certain keywords such as "location" and "resources" are reserved keywords in JavaFX. + * As a consequence, UI elements' variable names cannot be set to such keywords + * or an exception will be thrown by JavaFX during runtime. + * + * @see The issue on AddressBook level 4 + */ + + public final Task task; + + @FXML + private HBox cardPane; + @FXML + private Label name; + @FXML + private Label id; + + /** + * Creates a {@code PersonCode} with the given {@code Person} and index to display. + */ + public PersonTaskCard(Task task, int displayedIndex) { + super(FXML); + this.task = task; + id.setText(displayedIndex + ". "); + this.name.setText(task.getTaskName().toString()); + } + + @Override + public boolean equals(Object other) { + // short circuit if same object + if (other == this) { + return true; + } + + // instanceof handles nulls + if (!(other instanceof PersonTaskCard)) { + return false; + } + + // state check + PersonTaskCard card = (PersonTaskCard) other; + return id.getText().equals(card.id.getText()) + && task.equals(card.task); + } +} diff --git a/src/main/java/swift/ui/PersonTaskListPanel.java b/src/main/java/swift/ui/PersonTaskListPanel.java new file mode 100644 index 00000000000..7102d391f1a --- /dev/null +++ b/src/main/java/swift/ui/PersonTaskListPanel.java @@ -0,0 +1,49 @@ +package swift.ui; + +import java.util.logging.Logger; + +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.layout.Region; +import swift.commons.core.LogsCenter; +import swift.model.task.Task; + +/** + * Panel containing the list of persons. + */ +public class PersonTaskListPanel extends UiPart { + private static final String FXML = "PersonTaskListPanel.fxml"; + private final Logger logger = LogsCenter.getLogger(PersonListPanel.class); + + @FXML + private ListView personTaskListView; + + /** + * Creates a {@code PersonListPanel} with the given {@code ObservableList}. + */ + public PersonTaskListPanel(ObservableList taskList) { + super(FXML); + personTaskListView.setItems(taskList); + personTaskListView.setCellFactory(listView -> new PersonTaskListViewCell()); + } + + /** + * Custom {@code ListCell} that displays the graphics of a {@code Person} using a {@code PersonCard}. + */ + class PersonTaskListViewCell extends ListCell { + @Override + protected void updateItem(Task task, boolean empty) { + super.updateItem(task, empty); + + if (empty || task == null) { + setGraphic(null); + setText(null); + } else { + setGraphic(new PersonTaskCard(task, getIndex() + 1).getRoot()); + } + } + } + +} From ffab5c6ebfc3a0e177dd79e6b9f8885a6e84c78e Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 02:55:10 +0800 Subject: [PATCH 06/24] Feat: edit MainWindow to contain personTaskListPanel --- src/main/resources/view/MainWindow.fxml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/view/MainWindow.fxml b/src/main/resources/view/MainWindow.fxml index 5342fc3e40b..1915f4da018 100644 --- a/src/main/resources/view/MainWindow.fxml +++ b/src/main/resources/view/MainWindow.fxml @@ -61,6 +61,12 @@ + + + + + + From 2fdb0774ef96d9791c81c52a9059cb82c6b66fad Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 02:55:33 +0800 Subject: [PATCH 07/24] Feat: init personTaskList to Main Window --- src/main/java/swift/ui/MainWindow.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/swift/ui/MainWindow.java b/src/main/java/swift/ui/MainWindow.java index 3ca11a5e098..ce323c18e8d 100644 --- a/src/main/java/swift/ui/MainWindow.java +++ b/src/main/java/swift/ui/MainWindow.java @@ -32,6 +32,7 @@ public class MainWindow extends UiPart { // Independent Ui parts residing in this Ui container private PersonListPanel personListPanel; + private PersonTaskListPanel personTaskListPanel; private ResultDisplay resultDisplay; private HelpWindow helpWindow; @@ -47,6 +48,9 @@ public class MainWindow extends UiPart { @FXML private StackPane resultDisplayPlaceholder; + @FXML + private StackPane personTaskListPanelPlaceholder; + @FXML private StackPane statusbarPlaceholder; @@ -113,6 +117,9 @@ void fillInnerParts() { personListPanel = new PersonListPanel(logic.getFilteredPersonList()); personListPanelPlaceholder.getChildren().add(personListPanel.getRoot()); + personTaskListPanel = new PersonTaskListPanel(logic.getFilteredTaskList()); + personTaskListPanelPlaceholder.getChildren().add(personTaskListPanel.getRoot()); + resultDisplay = new ResultDisplay(); resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot()); From f0b94c31a384e1fa67818321dee16d71cadbf8c1 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 18:04:18 +0800 Subject: [PATCH 08/24] Feat: init bridgelist to Model --- src/main/java/swift/model/Model.java | 10 ++++++++++ src/main/java/swift/model/ModelManager.java | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/swift/model/Model.java b/src/main/java/swift/model/Model.java index 706e15666dc..95a63d7f99b 100644 --- a/src/main/java/swift/model/Model.java +++ b/src/main/java/swift/model/Model.java @@ -16,6 +16,7 @@ public interface Model { /** {@code Predicate} that always evaluate to true */ Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; Predicate PREDICATE_SHOW_ALL_TASKS = unused -> true; + Predicate PREDICATE_SHOW_ALL_BRIDGE = unused -> true; /** * Replaces user prefs data with the data in {@code userPrefs}. @@ -91,6 +92,15 @@ public interface Model { /** Returns an unmodifiable view of the filtered task list */ ObservableList getFilteredTaskList(); + /** + * Updates the filter of the filtered person list to filter by the given {@code predicate}. + * @throws NullPointerException if {@code predicate} is null. + */ + void updateFilteredBridgeList(Predicate predicate); + + /** Returns an unmodifiable view of the filtered task list */ + ObservableList getFilteredBridgeList(); + /** * Updates the filter of the filtered task list to filter by the given {@code predicate}. * @throws NullPointerException if {@code predicate} is null. diff --git a/src/main/java/swift/model/ModelManager.java b/src/main/java/swift/model/ModelManager.java index 5db21f7ef17..fa3b8969def 100644 --- a/src/main/java/swift/model/ModelManager.java +++ b/src/main/java/swift/model/ModelManager.java @@ -25,6 +25,7 @@ public class ModelManager implements Model { private final UserPrefs userPrefs; private final FilteredList filteredPersons; private final FilteredList filteredTasks; + private final FilteredList filteredBridges; /** * Initializes a ModelManager with the given addressBook and userPrefs. @@ -38,6 +39,7 @@ public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs this.userPrefs = new UserPrefs(userPrefs); filteredPersons = new FilteredList<>(this.addressBook.getPersonList()); filteredTasks = new FilteredList<>(this.addressBook.getTaskList()); + filteredBridges = new FilteredList<>(this.addressBook.getBridgeList()); } public ModelManager() { @@ -172,6 +174,22 @@ public void updateFilteredTaskList(Predicate predicate) { filteredTasks.setPredicate(predicate); } + //=========== Filtered Bridge List Accessors ============================================================= + /** + * Returns an unmodifiable view of the list of {@code Task} backed by the internal list of + * {@code versionedAddressBook} + */ + @Override + public ObservableList getFilteredBridgeList() { + return filteredBridges; + } + + @Override + public void updateFilteredBridgeList(Predicate predicate) { + requireNonNull(predicate); + filteredBridges.setPredicate(predicate); + } + //=========== Filtered Person List Accessors ============================================================= /** From c9beb8cdefaf11e06ed4587c3e59320593754b42 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 18:13:44 +0800 Subject: [PATCH 09/24] Feat: add custom select person message --- src/main/java/swift/commons/core/Messages.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/swift/commons/core/Messages.java b/src/main/java/swift/commons/core/Messages.java index b97d3dcc053..52d0fc5c486 100644 --- a/src/main/java/swift/commons/core/Messages.java +++ b/src/main/java/swift/commons/core/Messages.java @@ -11,4 +11,5 @@ public class Messages { public static final String MESSAGE_INVALID_TASK_DISPLAYED_INDEX = "The task index provided is invalid"; public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!"; public static final String MESSAGE_TASKS_LISTED_OVERVIEW = "%1$d tasks listed!"; + public static final String MESSAGE_PERSONS_SELECTED_OVERVIEW = "Person Selected!"; } From 875fb72c25399f04b8032bbad42437f4ad86e75e Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 18:14:30 +0800 Subject: [PATCH 10/24] Feat: add Select Contact Command --- .../logic/commands/SelectContactCommand.java | 77 +++++++++++++++++++ .../parser/SelectContactCommandParser.java | 29 +++++++ 2 files changed, 106 insertions(+) create mode 100644 src/main/java/swift/logic/commands/SelectContactCommand.java create mode 100644 src/main/java/swift/logic/parser/SelectContactCommandParser.java diff --git a/src/main/java/swift/logic/commands/SelectContactCommand.java b/src/main/java/swift/logic/commands/SelectContactCommand.java new file mode 100644 index 00000000000..a9e964c6b05 --- /dev/null +++ b/src/main/java/swift/logic/commands/SelectContactCommand.java @@ -0,0 +1,77 @@ +package swift.logic.commands; + +import static java.util.Objects.requireNonNull; +import static swift.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static swift.model.Model.PREDICATE_SHOW_ALL_TASKS; + +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import swift.commons.core.Messages; +import swift.commons.core.index.Index; +import swift.logic.commands.exceptions.CommandException; +import swift.model.Model; +import swift.model.bridge.PersonTaskBridge; +import swift.model.person.Person; +import swift.model.task.Task; + +/** + * Deletes a task identified using it's displayed index from the address book. + */ +public class SelectContactCommand extends Command { + + public static final String COMMAND_WORD = "select_contact"; + + public static final String MESSAGE_USAGE = COMMAND_WORD + + ": Selects the contact identified by the index number used in the displayed contact list.\n" + + "Parameters: INDEX (must be a positive integer)\n" + + "Example: " + COMMAND_WORD + " 1"; + + public static final String MESSAGE_SELECT_CONTACT_SUCCESS = "Selected task: %1$s"; + + private final Index targetIndex; + + public SelectContactCommand(Index targetIndex) { + this.targetIndex = targetIndex; + } + + @Override + public CommandResult execute(Model model) throws CommandException { + requireNonNull(model); + List lastShownPersonList = model.getFilteredPersonList(); + + if (targetIndex.getZeroBased() >= lastShownPersonList.size()) { + throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + + Person selectedPerson = lastShownPersonList.get(targetIndex.getZeroBased()); + model.updateFilteredPersonList((person) -> person.equals(selectedPerson)); + + // Expected 2 Bridges + System.out.println(model.getFilteredBridgeList()); + + model.updateFilteredBridgeList((bridge) -> bridge.getPersonId().equals(selectedPerson.getId())); + List bridgeList = model.getFilteredBridgeList(); + + // Expected 1 Bridge + System.out.println(model.getFilteredBridgeList()); + + // Predicate to check whether task exists within a bridgeList + Predicate isTaskExist = (task) -> bridgeList.stream() + .filter((bridge) -> bridge.getTaskId().equals(task.getId())) + .collect(Collectors.toList()) + .size() != 0; + model.updateFilteredTaskList(PREDICATE_SHOW_ALL_TASKS); + model.updateFilteredTaskList(isTaskExist); + + return new CommandResult(Messages.MESSAGE_PERSONS_SELECTED_OVERVIEW); + } + + @Override + public boolean equals(Object other) { + return other == this // short circuit if same object + || (other instanceof SelectContactCommand // instanceof handles nulls + && targetIndex.equals(((SelectContactCommand) other).targetIndex)); // state check + } +} diff --git a/src/main/java/swift/logic/parser/SelectContactCommandParser.java b/src/main/java/swift/logic/parser/SelectContactCommandParser.java new file mode 100644 index 00000000000..5dd3eb0dc55 --- /dev/null +++ b/src/main/java/swift/logic/parser/SelectContactCommandParser.java @@ -0,0 +1,29 @@ +package swift.logic.parser; + +import static swift.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +import swift.commons.core.index.Index; +import swift.logic.commands.SelectContactCommand; +import swift.logic.parser.exceptions.ParseException; + +/** + * Parses input arguments and creates a new DeleteCommand object + */ +public class SelectContactCommandParser implements Parser { + + /** + * Parses the given {@code String} of arguments in the context of the DeleteCommand + * and returns a DeleteCommand object for execution. + * @throws ParseException if the user input does not conform the expected format + */ + public SelectContactCommand parse(String args) throws ParseException { + try { + Index index = ParserUtil.parseIndex(args); + return new SelectContactCommand(index); + } catch (ParseException pe) { + throw new ParseException( + String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectContactCommand.MESSAGE_USAGE), pe); + } + } + +} From 47c69d1df39c60ebc0388102c0bbcb5877059af0 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sat, 22 Oct 2022 18:14:44 +0800 Subject: [PATCH 11/24] Feat: init Select Contact parser --- src/main/java/swift/logic/parser/AddressBookParser.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/swift/logic/parser/AddressBookParser.java b/src/main/java/swift/logic/parser/AddressBookParser.java index 0e985df5b10..b02f7c77a8c 100644 --- a/src/main/java/swift/logic/parser/AddressBookParser.java +++ b/src/main/java/swift/logic/parser/AddressBookParser.java @@ -20,6 +20,7 @@ import swift.logic.commands.HelpCommand; import swift.logic.commands.ListContactCommand; import swift.logic.commands.ListTaskCommand; +import swift.logic.commands.SelectContactCommand; import swift.logic.parser.exceptions.ParseException; /** @@ -59,6 +60,8 @@ public Command parseCommand(String userInput) throws ParseException { return new ClearCommand(); case FindContactCommand.COMMAND_WORD: return new FindContactCommandParser().parse(arguments); + case SelectContactCommand.COMMAND_WORD: + return new SelectContactCommandParser().parse(arguments); case ListContactCommand.COMMAND_WORD: return new ListContactCommand(); case ListTaskCommand.COMMAND_WORD: From 41e20a618c3d709d04743dd4d02de6e88490a2c7 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 00:50:01 +0800 Subject: [PATCH 12/24] Refactor: remove waste log code --- .../java/swift/logic/commands/SelectContactCommand.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/swift/logic/commands/SelectContactCommand.java b/src/main/java/swift/logic/commands/SelectContactCommand.java index a9e964c6b05..40d7779738e 100644 --- a/src/main/java/swift/logic/commands/SelectContactCommand.java +++ b/src/main/java/swift/logic/commands/SelectContactCommand.java @@ -1,7 +1,6 @@ package swift.logic.commands; import static java.util.Objects.requireNonNull; -import static swift.model.Model.PREDICATE_SHOW_ALL_PERSONS; import static swift.model.Model.PREDICATE_SHOW_ALL_TASKS; import java.util.List; @@ -48,14 +47,9 @@ public CommandResult execute(Model model) throws CommandException { Person selectedPerson = lastShownPersonList.get(targetIndex.getZeroBased()); model.updateFilteredPersonList((person) -> person.equals(selectedPerson)); - // Expected 2 Bridges - System.out.println(model.getFilteredBridgeList()); - model.updateFilteredBridgeList((bridge) -> bridge.getPersonId().equals(selectedPerson.getId())); List bridgeList = model.getFilteredBridgeList(); - // Expected 1 Bridge - System.out.println(model.getFilteredBridgeList()); // Predicate to check whether task exists within a bridgeList Predicate isTaskExist = (task) -> bridgeList.stream() From dfad9e740ff5bc20c35ff3d00e38bcd38cc55926 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 00:54:06 +0800 Subject: [PATCH 13/24] Feat: add `hotUpdate` to associated tasks --- .../java/swift/logic/commands/AddTaskCommand.java | 2 ++ .../swift/logic/commands/DeleteTaskCommand.java | 1 + .../swift/logic/commands/EditTaskCommand.java | 1 + src/main/java/swift/model/ModelManager.java | 15 +++++++++++++++ 4 files changed, 19 insertions(+) diff --git a/src/main/java/swift/logic/commands/AddTaskCommand.java b/src/main/java/swift/logic/commands/AddTaskCommand.java index 6020047eb10..35af51c94cc 100644 --- a/src/main/java/swift/logic/commands/AddTaskCommand.java +++ b/src/main/java/swift/logic/commands/AddTaskCommand.java @@ -57,6 +57,8 @@ public CommandResult execute(Model model) throws CommandException { model.addBridge(model.getFilteredPersonList().get(index.getZeroBased()), toAdd); } + model.hotUpdateAssociatedContacts(); + return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd)); } diff --git a/src/main/java/swift/logic/commands/DeleteTaskCommand.java b/src/main/java/swift/logic/commands/DeleteTaskCommand.java index 291a6320e72..d1e3c1f0a3f 100644 --- a/src/main/java/swift/logic/commands/DeleteTaskCommand.java +++ b/src/main/java/swift/logic/commands/DeleteTaskCommand.java @@ -41,6 +41,7 @@ public CommandResult execute(Model model) throws CommandException { Task taskToDelete = lastShownList.get(targetIndex.getZeroBased()); model.deleteTask(taskToDelete); + model.hotUpdateAssociatedContacts(); return new CommandResult(String.format(MESSAGE_DELETE_TASK_SUCCESS, taskToDelete)); } diff --git a/src/main/java/swift/logic/commands/EditTaskCommand.java b/src/main/java/swift/logic/commands/EditTaskCommand.java index 1e2cff59348..c3c8c4dfff5 100644 --- a/src/main/java/swift/logic/commands/EditTaskCommand.java +++ b/src/main/java/swift/logic/commands/EditTaskCommand.java @@ -71,6 +71,7 @@ public CommandResult execute(Model model) throws CommandException { model.setTask(taskToEdit, editedTask); model.updateFilteredTaskList(PREDICATE_SHOW_ALL_TASKS); + model.hotUpdateAssociatedContacts(); return new CommandResult(String.format(MESSAGE_EDIT_TASK_SUCCESS, editedTask)); } diff --git a/src/main/java/swift/model/ModelManager.java b/src/main/java/swift/model/ModelManager.java index fa3b8969def..5a7f6c35070 100644 --- a/src/main/java/swift/model/ModelManager.java +++ b/src/main/java/swift/model/ModelManager.java @@ -4,6 +4,7 @@ import static swift.commons.util.CollectionUtil.requireAllNonNull; import java.nio.file.Path; +import java.util.List; import java.util.function.Predicate; import java.util.logging.Logger; @@ -11,6 +12,9 @@ import javafx.collections.transformation.FilteredList; import swift.commons.core.GuiSettings; import swift.commons.core.LogsCenter; +import swift.commons.core.index.Index; +import swift.logic.commands.SelectContactCommand; +import swift.logic.commands.exceptions.CommandException; import swift.model.bridge.PersonTaskBridge; import swift.model.person.Person; import swift.model.task.Task; @@ -158,6 +162,17 @@ public void addBridge(PersonTaskBridge bridge) { addressBook.addBridge(bridge); } + @Override + public void hotUpdateAssociatedContacts() throws CommandException { + List currentPersonList = this.getFilteredPersonList(); + boolean isSelected = currentPersonList.size() == 1; + if (isSelected) { + int firstElement = 1; + Index index = Index.fromOneBased(firstElement); + new SelectContactCommand(index).execute(this); + } + } + //=========== Filtered Task List Accessors ============================================================= /** * Returns an unmodifiable view of the list of {@code Task} backed by the internal list of From 205d9005056514d6995f25bc5c32c788ec83c3d3 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 00:55:03 +0800 Subject: [PATCH 14/24] Feat: add hide task and persons to `list_command` --- .../java/swift/logic/commands/ListContactCommand.java | 1 + .../java/swift/logic/commands/ListTaskCommand.java | 2 ++ src/main/java/swift/model/Model.java | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/src/main/java/swift/logic/commands/ListContactCommand.java b/src/main/java/swift/logic/commands/ListContactCommand.java index 37ae30fb96d..2fe7395d775 100644 --- a/src/main/java/swift/logic/commands/ListContactCommand.java +++ b/src/main/java/swift/logic/commands/ListContactCommand.java @@ -18,6 +18,7 @@ public class ListContactCommand extends Command { @Override public CommandResult execute(Model model) { requireNonNull(model); + model.updateFilteredTaskList(Model.PREDICATE_HIDE_ALL_TASKS); model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); return new CommandResult(MESSAGE_SUCCESS); } diff --git a/src/main/java/swift/logic/commands/ListTaskCommand.java b/src/main/java/swift/logic/commands/ListTaskCommand.java index 6706c8ea9c8..6b3994279bf 100644 --- a/src/main/java/swift/logic/commands/ListTaskCommand.java +++ b/src/main/java/swift/logic/commands/ListTaskCommand.java @@ -1,6 +1,7 @@ package swift.logic.commands; import static java.util.Objects.requireNonNull; +import static swift.model.Model.PREDICATE_HIDE_ALL_PEOPLE; import static swift.model.Model.PREDICATE_SHOW_ALL_TASKS; import swift.commons.core.Messages; @@ -22,6 +23,7 @@ public class ListTaskCommand extends Command { @Override public CommandResult execute(Model model) { requireNonNull(model); + model.updateFilteredPersonList(PREDICATE_HIDE_ALL_PEOPLE); model.updateFilteredTaskList(PREDICATE_SHOW_ALL_TASKS); return new CommandResult( String.format(Messages.MESSAGE_TASKS_LISTED_OVERVIEW, model.getFilteredTaskList().size())); diff --git a/src/main/java/swift/model/Model.java b/src/main/java/swift/model/Model.java index 95a63d7f99b..3c586ca7e3f 100644 --- a/src/main/java/swift/model/Model.java +++ b/src/main/java/swift/model/Model.java @@ -5,6 +5,7 @@ import javafx.collections.ObservableList; import swift.commons.core.GuiSettings; +import swift.logic.commands.exceptions.CommandException; import swift.model.bridge.PersonTaskBridge; import swift.model.person.Person; import swift.model.task.Task; @@ -15,7 +16,9 @@ public interface Model { /** {@code Predicate} that always evaluate to true */ Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; + Predicate PREDICATE_HIDE_ALL_PEOPLE = unused -> false; Predicate PREDICATE_SHOW_ALL_TASKS = unused -> true; + Predicate PREDICATE_HIDE_ALL_TASKS = unused -> false; Predicate PREDICATE_SHOW_ALL_BRIDGE = unused -> true; /** @@ -48,6 +51,13 @@ public interface Model { */ void setAddressBookFilePath(Path addressBookFilePath); + /** + * Method that updates the associated contact list if it's unambiguous that a user has been selected. + * + * @throws CommandException + */ + void hotUpdateAssociatedContacts() throws CommandException; + /** * Replaces address book data with the data in {@code addressBook}. */ From b36178d434a673618ae7165b93ea0663e2b77172 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 00:55:29 +0800 Subject: [PATCH 15/24] Feat: hide all tasks by default on load-in --- src/main/java/swift/MainApp.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/swift/MainApp.java b/src/main/java/swift/MainApp.java index e8bc5511c99..a724e8e5151 100644 --- a/src/main/java/swift/MainApp.java +++ b/src/main/java/swift/MainApp.java @@ -90,7 +90,10 @@ private Model initModelManager(Storage storage, ReadOnlyUserPrefs userPrefs) { initialData = new AddressBook(); } - return new ModelManager(initialData, userPrefs); + ModelManager newModelManager = new ModelManager(initialData, userPrefs); + // Hide all Tasks by Default + newModelManager.updateFilteredTaskList(Model.PREDICATE_HIDE_ALL_TASKS); + return newModelManager; } private void initLogging(Config config) { From 575c79772e04c4bd88dc22400b5e825cb17234d9 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 01:06:11 +0800 Subject: [PATCH 16/24] Refactor: fix wrong spelling for Persons --- docs/tutorials/AddRemark.md | 2 +- docs/tutorials/TracingCode.md | 2 +- src/main/java/swift/logic/commands/EditContactCommand.java | 4 ++-- src/main/java/swift/logic/commands/ListContactCommand.java | 4 ++-- src/main/java/swift/model/Model.java | 2 +- src/main/java/swift/model/ModelManager.java | 2 +- src/test/java/swift/model/ModelManagerTest.java | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/tutorials/AddRemark.md b/docs/tutorials/AddRemark.md index f63ee11cc94..f2d4c533f64 100644 --- a/docs/tutorials/AddRemark.md +++ b/docs/tutorials/AddRemark.md @@ -349,7 +349,7 @@ save it with `Model#setPerson()`. personToEdit.getAddress(), remark, personToEdit.getTags()); model.setPerson(personToEdit, editedPerson); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PEOPLE); return new CommandResult(generateSuccessMessage(editedPerson)); } diff --git a/docs/tutorials/TracingCode.md b/docs/tutorials/TracingCode.md index 166c20b0a25..142e37613f9 100644 --- a/docs/tutorials/TracingCode.md +++ b/docs/tutorials/TracingCode.md @@ -195,7 +195,7 @@ Recall from the User Guide that the `edit` command has the format: `edit INDEX [ throw new CommandException(MESSAGE_DUPLICATE_PERSON); } model.setPerson(personToEdit, editedPerson); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PEOPLE); return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, editedPerson)); } ``` diff --git a/src/main/java/swift/logic/commands/EditContactCommand.java b/src/main/java/swift/logic/commands/EditContactCommand.java index 4add00eb6e9..22bd5a91933 100644 --- a/src/main/java/swift/logic/commands/EditContactCommand.java +++ b/src/main/java/swift/logic/commands/EditContactCommand.java @@ -6,7 +6,7 @@ import static swift.logic.parser.CliSyntax.PREFIX_NAME; import static swift.logic.parser.CliSyntax.PREFIX_PHONE; import static swift.logic.parser.CliSyntax.PREFIX_TAG; -import static swift.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static swift.model.Model.PREDICATE_SHOW_ALL_PEOPLE; import java.util.Collections; import java.util.HashSet; @@ -83,7 +83,7 @@ public CommandResult execute(Model model) throws CommandException { } model.setPerson(personToEdit, editedPerson); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PEOPLE); return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, editedPerson)); } diff --git a/src/main/java/swift/logic/commands/ListContactCommand.java b/src/main/java/swift/logic/commands/ListContactCommand.java index 2fe7395d775..52637ed0e27 100644 --- a/src/main/java/swift/logic/commands/ListContactCommand.java +++ b/src/main/java/swift/logic/commands/ListContactCommand.java @@ -1,7 +1,7 @@ package swift.logic.commands; import static java.util.Objects.requireNonNull; -import static swift.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static swift.model.Model.PREDICATE_SHOW_ALL_PEOPLE; import swift.model.Model; @@ -19,7 +19,7 @@ public class ListContactCommand extends Command { public CommandResult execute(Model model) { requireNonNull(model); model.updateFilteredTaskList(Model.PREDICATE_HIDE_ALL_TASKS); - model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PEOPLE); return new CommandResult(MESSAGE_SUCCESS); } } diff --git a/src/main/java/swift/model/Model.java b/src/main/java/swift/model/Model.java index 3c586ca7e3f..90419d180c5 100644 --- a/src/main/java/swift/model/Model.java +++ b/src/main/java/swift/model/Model.java @@ -15,7 +15,7 @@ */ public interface Model { /** {@code Predicate} that always evaluate to true */ - Predicate PREDICATE_SHOW_ALL_PERSONS = unused -> true; + Predicate PREDICATE_SHOW_ALL_PEOPLE = unused -> true; Predicate PREDICATE_HIDE_ALL_PEOPLE = unused -> false; Predicate PREDICATE_SHOW_ALL_TASKS = unused -> true; Predicate PREDICATE_HIDE_ALL_TASKS = unused -> false; diff --git a/src/main/java/swift/model/ModelManager.java b/src/main/java/swift/model/ModelManager.java index 5a7f6c35070..eab45acb178 100644 --- a/src/main/java/swift/model/ModelManager.java +++ b/src/main/java/swift/model/ModelManager.java @@ -111,7 +111,7 @@ public void deletePerson(Person target) { @Override public void addPerson(Person person) { addressBook.addPerson(person); - updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + updateFilteredPersonList(PREDICATE_SHOW_ALL_PEOPLE); } @Override diff --git a/src/test/java/swift/model/ModelManagerTest.java b/src/test/java/swift/model/ModelManagerTest.java index 29fa8d713dd..a617ae21773 100644 --- a/src/test/java/swift/model/ModelManagerTest.java +++ b/src/test/java/swift/model/ModelManagerTest.java @@ -3,7 +3,7 @@ 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 swift.model.Model.PREDICATE_SHOW_ALL_PERSONS; +import static swift.model.Model.PREDICATE_SHOW_ALL_PEOPLE; import static swift.testutil.Assert.assertThrows; import static swift.testutil.TypicalPersons.ALICE; import static swift.testutil.TypicalPersons.BENSON; @@ -179,7 +179,7 @@ public void equals() { assertFalse(modelManager.equals(new ModelManager(addressBook, userPrefs))); // resets modelManager to initial state for upcoming tests - modelManager.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS); + modelManager.updateFilteredPersonList(PREDICATE_SHOW_ALL_PEOPLE); // different userPrefs -> returns false UserPrefs differentUserPrefs = new UserPrefs(); From cb716ddcbe29ede420aa359bdad026782cb6dbce Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 01:49:59 +0800 Subject: [PATCH 17/24] Test: fix test build errors --- .../java/swift/logic/commands/AddCommandTest.java | 14 ++++++++++++++ .../swift/logic/commands/AddTaskCommandTest.java | 15 +++++++++++++++ .../swift/logic/commands/ListTaskCommandTest.java | 1 + 3 files changed, 30 insertions(+) diff --git a/src/test/java/swift/logic/commands/AddCommandTest.java b/src/test/java/swift/logic/commands/AddCommandTest.java index 36dd391b206..83adf40df41 100644 --- a/src/test/java/swift/logic/commands/AddCommandTest.java +++ b/src/test/java/swift/logic/commands/AddCommandTest.java @@ -195,6 +195,20 @@ public void addBridge(Person person, Task task) { public void addBridge(PersonTaskBridge bridge) { throw new AssertionError("This method should not be called."); } + + @Override + public void hotUpdateAssociatedContacts() { + } + + @Override + public void updateFilteredBridgeList(Predicate predicate) { + throw new AssertionError("This method should not be called."); + } + + @Override + public ObservableList getFilteredBridgeList() { + throw new AssertionError("This method should not be called."); + } } /** diff --git a/src/test/java/swift/logic/commands/AddTaskCommandTest.java b/src/test/java/swift/logic/commands/AddTaskCommandTest.java index dc11d22b29c..577b05b4eff 100644 --- a/src/test/java/swift/logic/commands/AddTaskCommandTest.java +++ b/src/test/java/swift/logic/commands/AddTaskCommandTest.java @@ -134,6 +134,7 @@ public void setAddressBook(ReadOnlyAddressBook newData) { throw new AssertionError("This method should not be called."); } + @Override public ReadOnlyAddressBook getAddressBook() { throw new AssertionError("This method should not be called."); @@ -203,6 +204,20 @@ public void addBridge(Person person, Task task) { public void addBridge(PersonTaskBridge bridge) { throw new AssertionError("This method should not be called."); } + + @Override + public void hotUpdateAssociatedContacts() { + } + + @Override + public void updateFilteredBridgeList(Predicate predicate) { + throw new AssertionError("This method should not be called."); + } + + @Override + public ObservableList getFilteredBridgeList() { + throw new AssertionError("This method should not be called."); + } } /** diff --git a/src/test/java/swift/logic/commands/ListTaskCommandTest.java b/src/test/java/swift/logic/commands/ListTaskCommandTest.java index 294de4ccd5a..34971246bb5 100644 --- a/src/test/java/swift/logic/commands/ListTaskCommandTest.java +++ b/src/test/java/swift/logic/commands/ListTaskCommandTest.java @@ -27,6 +27,7 @@ public class ListTaskCommandTest { public void setUp() { model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + expectedModel.updateFilteredPersonList(Model.PREDICATE_HIDE_ALL_PEOPLE); } @Test From 33424d37ee8c53185bc2a421c33a7c4c9985b43b Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 04:32:57 +0800 Subject: [PATCH 18/24] Test: add `SelectContactCommand` Tests --- .../logic/commands/SelectContactCommand.java | 12 +- .../commands/SelectContactCommandTest.java | 104 ++++++++++++++++++ .../SelectContactCommandParserTest.java | 32 ++++++ .../TypicalIntegratedAddressBook.java | 89 +++++++++++++++ 4 files changed, 232 insertions(+), 5 deletions(-) create mode 100644 src/test/java/swift/logic/commands/SelectContactCommandTest.java create mode 100644 src/test/java/swift/logic/parser/SelectContactCommandParserTest.java create mode 100644 src/test/java/swift/testutil/TypicalIntegratedAddressBook.java diff --git a/src/main/java/swift/logic/commands/SelectContactCommand.java b/src/main/java/swift/logic/commands/SelectContactCommand.java index 40d7779738e..fde7626857b 100644 --- a/src/main/java/swift/logic/commands/SelectContactCommand.java +++ b/src/main/java/swift/logic/commands/SelectContactCommand.java @@ -1,6 +1,7 @@ package swift.logic.commands; import static java.util.Objects.requireNonNull; +import static swift.model.Model.PREDICATE_SHOW_ALL_BRIDGE; import static swift.model.Model.PREDICATE_SHOW_ALL_TASKS; import java.util.List; @@ -27,7 +28,7 @@ public class SelectContactCommand extends Command { + "Parameters: INDEX (must be a positive integer)\n" + "Example: " + COMMAND_WORD + " 1"; - public static final String MESSAGE_SELECT_CONTACT_SUCCESS = "Selected task: %1$s"; + public static final String MESSAGE_SELECT_CONTACT_SUCCESS = "Person Selected!"; private final Index targetIndex; @@ -47,15 +48,16 @@ public CommandResult execute(Model model) throws CommandException { Person selectedPerson = lastShownPersonList.get(targetIndex.getZeroBased()); model.updateFilteredPersonList((person) -> person.equals(selectedPerson)); + model.updateFilteredBridgeList(PREDICATE_SHOW_ALL_BRIDGE); model.updateFilteredBridgeList((bridge) -> bridge.getPersonId().equals(selectedPerson.getId())); List bridgeList = model.getFilteredBridgeList(); - // Predicate to check whether task exists within a bridgeList Predicate isTaskExist = (task) -> bridgeList.stream() - .filter((bridge) -> bridge.getTaskId().equals(task.getId())) - .collect(Collectors.toList()) - .size() != 0; + .filter((bridge) -> bridge.getTaskId().equals(task.getId())) + .collect(Collectors.toList()) + .size() != 0; + model.updateFilteredTaskList(PREDICATE_SHOW_ALL_TASKS); model.updateFilteredTaskList(isTaskExist); diff --git a/src/test/java/swift/logic/commands/SelectContactCommandTest.java b/src/test/java/swift/logic/commands/SelectContactCommandTest.java new file mode 100644 index 00000000000..a188ff2315b --- /dev/null +++ b/src/test/java/swift/logic/commands/SelectContactCommandTest.java @@ -0,0 +1,104 @@ +package swift.logic.commands; + + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static swift.logic.commands.CommandTestUtil.assertCommandFailure; +import static swift.logic.commands.CommandTestUtil.assertCommandSuccess; +import static swift.logic.commands.CommandTestUtil.showPersonAtIndex; +import static swift.testutil.TypicalIntegratedAddressBook.PERSON1_UUID; +import static swift.testutil.TypicalIntegratedAddressBook.PERSON2_UUID; +import static swift.testutil.TypicalIntegratedAddressBook.TASK3_UUID; +import static swift.testutil.TypicalIntegratedAddressBook.getTypicalAddressBook; +import static swift.testutil.TypicalPersonIndexes.INDEX_FIRST_PERSON; +import static swift.testutil.TypicalPersonIndexes.INDEX_SECOND_PERSON; + +import java.util.UUID; + +import org.junit.jupiter.api.Test; + +import swift.commons.core.Messages; +import swift.commons.core.index.Index; +import swift.model.Model; +import swift.model.ModelManager; +import swift.model.UserPrefs; + +/** + * Contains integration tests (interaction with the Model) and unit tests for + * {@code SelectContactCommand}. + */ +public class SelectContactCommandTest { + + private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); + + @Test + public void execute_validIndexUnfilteredList_success() { + SelectContactCommand selectContactCommand = new SelectContactCommand(INDEX_SECOND_PERSON); + String expectedMessage = SelectContactCommand.MESSAGE_SELECT_CONTACT_SUCCESS; + + ModelManager expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + expectedModel.updateFilteredPersonList((p) -> p.getId().equals(UUID.fromString(PERSON2_UUID))); + expectedModel.updateFilteredTaskList((t) -> t.getId().equals(UUID.fromString(TASK3_UUID))); + expectedModel.updateFilteredBridgeList((b) -> b.getPersonId().equals(UUID.fromString(PERSON2_UUID))); + + assertCommandSuccess(selectContactCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_invalidIndexUnfilteredList_throwsCommandException() { + Index outOfBoundIndex = Index.fromOneBased(model.getFilteredTaskList().size() + 1); + SelectContactCommand selectContactCommand = new SelectContactCommand(outOfBoundIndex); + + assertCommandFailure(selectContactCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + + @Test + public void execute_validIndexFilteredList_success() { + showPersonAtIndex(model, INDEX_FIRST_PERSON); + + SelectContactCommand selectContactCommand = new SelectContactCommand(INDEX_FIRST_PERSON); + String expectedMessage = SelectContactCommand.MESSAGE_SELECT_CONTACT_SUCCESS; + + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + expectedModel.updateFilteredPersonList((p) -> p.getId().equals(UUID.fromString(PERSON1_UUID))); + expectedModel.updateFilteredTaskList((t) -> !t.getId().equals(UUID.fromString(TASK3_UUID))); + expectedModel.updateFilteredBridgeList((b) -> b.getPersonId().equals(UUID.fromString(PERSON1_UUID))); + + assertCommandSuccess(selectContactCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_invalidIndexFilteredList_throwsCommandException() { + showPersonAtIndex(model, INDEX_FIRST_PERSON); + + Index outOfBoundIndex = INDEX_SECOND_PERSON; + // ensures that outOfBoundIndex is still in bounds of address book list + assertTrue(outOfBoundIndex.getZeroBased() < model.getAddressBook().getTaskList().size()); + + SelectContactCommand selectContactCommand = new SelectContactCommand(outOfBoundIndex); + + assertCommandFailure(selectContactCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + + @Test + public void equals() { + SelectContactCommand selectFirstContactCommand = new SelectContactCommand(INDEX_FIRST_PERSON); + SelectContactCommand selectSecondContactCommand = new SelectContactCommand(INDEX_SECOND_PERSON); + + // same object -> returns true + assertTrue(selectFirstContactCommand.equals(selectFirstContactCommand)); + + // same values -> returns true + SelectContactCommand selectFirstContactCommandCopy = new SelectContactCommand(INDEX_FIRST_PERSON); + assertTrue(selectFirstContactCommand.equals(selectFirstContactCommandCopy)); + + // different types -> returns false + assertFalse(selectFirstContactCommand.equals(1)); + + // null -> returns false + assertFalse(selectFirstContactCommand.equals(null)); + + // different task -> returns false + assertFalse(selectFirstContactCommand.equals(selectSecondContactCommand)); + } +} diff --git a/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java b/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java new file mode 100644 index 00000000000..13e9cac67a6 --- /dev/null +++ b/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java @@ -0,0 +1,32 @@ +package swift.logic.parser; + +import static swift.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static swift.logic.parser.CommandParserTestUtil.assertParseFailure; +import static swift.logic.parser.CommandParserTestUtil.assertParseSuccess; +import static swift.testutil.TypicalTaskIndexes.INDEX_FIRST_TASK; + +import org.junit.jupiter.api.Test; + +import swift.logic.commands.SelectContactCommand; + +/** + * As we are only doing white-box testing, our test cases do not cover path variations + * outside of the SelectContactCommand code. For example, inputs "1" and "1 abc" take the + * same path through the SelectContactCommand, and therefore we test only one of them. + * The path variation for those two cases occur inside the ParserUtil, and + * therefore should be covered by the ParserUtilTest. + */ +public class SelectContactCommandParserTest { + + private SelectContactCommandParser parser = new SelectContactCommandParser(); + + @Test + public void parse_validArgs_returnsSelectContactCommand() { + assertParseSuccess(parser, "1", new SelectContactCommand(INDEX_FIRST_TASK)); + } + + @Test + public void parse_invalidArgs_throwsParseException() { + assertParseFailure(parser, "a", String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectContactCommand.MESSAGE_USAGE)); + } +} diff --git a/src/test/java/swift/testutil/TypicalIntegratedAddressBook.java b/src/test/java/swift/testutil/TypicalIntegratedAddressBook.java new file mode 100644 index 00000000000..77c45d68272 --- /dev/null +++ b/src/test/java/swift/testutil/TypicalIntegratedAddressBook.java @@ -0,0 +1,89 @@ +package swift.testutil; + +import static swift.logic.commands.CommandTestUtil.VALID_TASK_NAME_1; +import static swift.logic.commands.CommandTestUtil.VALID_TASK_NAME_2; +import static swift.logic.commands.CommandTestUtil.VALID_TASK_NAME_3; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import swift.model.AddressBook; +import swift.model.bridge.PersonTaskBridge; +import swift.model.person.Person; +import swift.model.task.Task; + +/** + * A utility class containing a list of {@code PersonTaskBridge} objects to be + * used in tests. + */ +public class TypicalIntegratedAddressBook { + public static final String PERSON1_UUID = "c4c645da-27b3-454d-9428-5295a6ee1f33"; + public static final String PERSON2_UUID = "5f3f93b9-d839-4d5c-b197-9f3e53ebbb71"; + public static final String TASK1_UUID = "bfbf250c-fd58-49b4-be15-ca12095ca2ee"; + public static final String TASK2_UUID = "41478d11-dbba-441f-ab0f-99ddf097eac1"; + public static final String TASK3_UUID = "ebda2eaf-9100-4de2-85c0-cb3efed5685c"; + + public static final PersonTaskBridge DEFAULT_BRIDGE_1 = new PersonTaskBridge( + UUID.fromString(PERSON1_UUID), + UUID.fromString(TASK1_UUID)); + public static final PersonTaskBridge DEFAULT_BRIDGE_2 = new PersonTaskBridge( + UUID.fromString(PERSON1_UUID), + UUID.fromString(TASK2_UUID)); + public static final PersonTaskBridge DEFAULT_BRIDGE_3 = new PersonTaskBridge( + UUID.fromString(PERSON2_UUID), + UUID.fromString(TASK3_UUID)); + + public static final Person ALICE = new PersonBuilder().withName("Alice Pauline") + .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") + .withPhone("94351253") + .withTags("friends") + .withId(PERSON1_UUID).build(); + public static final Person BENSON = new PersonBuilder().withName("Benson Meier") + .withAddress("311, Clementi Ave 2, #02-25") + .withEmail("johnd@example.com").withPhone("98765432") + .withTags("owesMoney", "friends") + .withId(PERSON2_UUID).build(); + + public static final Task BUY_MILK = new TaskBuilder() + .withTaskName(VALID_TASK_NAME_1) + .withId(TASK1_UUID).build(); + public static final Task CS2103T = new TaskBuilder() + .withTaskName(VALID_TASK_NAME_2) + .withId(TASK2_UUID).build(); + public static final Task FINISH_ASSIGNMENT = new TaskBuilder() + .withTaskName(VALID_TASK_NAME_3) + .withId(TASK3_UUID).build(); + + private TypicalIntegratedAddressBook() {} // prevents instantiation + + /** + * Returns an {@code AddressBook} with all the typical tasks. + */ + public static AddressBook getTypicalAddressBook() { + AddressBook ab = new AddressBook(); + for (PersonTaskBridge bridge : getTypicalBridges()) { + ab.addBridge(bridge); + } + for (Task task : getTypicalTasks()) { + ab.addTask(task); + } + for (Person person : getTypicalPeople()) { + ab.addPerson(person); + } + return ab; + } + + public static List getTypicalBridges() { + return new ArrayList<>(Arrays.asList(DEFAULT_BRIDGE_1, DEFAULT_BRIDGE_2, DEFAULT_BRIDGE_3)); + } + + public static List getTypicalTasks() { + return new ArrayList<>(Arrays.asList(BUY_MILK, CS2103T, FINISH_ASSIGNMENT)); + } + + public static List getTypicalPeople() { + return new ArrayList<>(Arrays.asList(ALICE, BENSON)); + } +} From a160957220d93b347bb63616104fcf75ad9ee360 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 04:34:00 +0800 Subject: [PATCH 19/24] Test: fix swift test errors --- src/main/java/swift/model/AddressBook.java | 6 ++++-- .../logic/commands/AddTaskCommandTest.java | 2 +- .../swift/logic/commands/CommandTestUtil.java | 4 ++-- .../java/swift/testutil/PersonBuilder.java | 2 +- src/test/java/swift/testutil/TaskBuilder.java | 2 +- .../java/swift/testutil/TypicalBridges.java | 11 ++++++---- .../java/swift/testutil/TypicalPersons.java | 21 ++++++++++++------- .../java/swift/testutil/TypicalTasks.java | 11 ++++++++-- 8 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/main/java/swift/model/AddressBook.java b/src/main/java/swift/model/AddressBook.java index 3e21df71e42..a3959071984 100644 --- a/src/main/java/swift/model/AddressBook.java +++ b/src/main/java/swift/model/AddressBook.java @@ -203,11 +203,13 @@ public ObservableList getBridgeList() { public boolean equals(Object other) { return other == this // short circuit if same object || (other instanceof AddressBook // instanceof handles nulls - && persons.equals(((AddressBook) other).persons)); + && persons.equals(((AddressBook) other).persons)) + && tasks.equals(((AddressBook) other).tasks) + && bridges.equals(((AddressBook) other).bridges); } @Override public int hashCode() { - return persons.hashCode() ^ tasks.hashCode(); + return persons.hashCode() ^ tasks.hashCode() ^ bridges.hashCode(); } } diff --git a/src/test/java/swift/logic/commands/AddTaskCommandTest.java b/src/test/java/swift/logic/commands/AddTaskCommandTest.java index 577b05b4eff..a43755baa35 100644 --- a/src/test/java/swift/logic/commands/AddTaskCommandTest.java +++ b/src/test/java/swift/logic/commands/AddTaskCommandTest.java @@ -47,7 +47,7 @@ public void execute_taskAcceptedByModel_addSuccessful() throws Exception { assertEquals(String.format(AddTaskCommand.MESSAGE_SUCCESS, validTask), commandResult.getFeedbackToUser()); assertEquals(Arrays.asList(validTask), modelStub.tasksAdded); assertEquals(Arrays.asList(new PersonTaskBridge( - UUID.fromString("47005f2b-9c40-4051-8c95-69ca601cb58d"), + UUID.fromString(PersonBuilder.DEFAULT_UUID), modelStub.tasksAdded.get(0).getId())), modelStub.bridgesAdded); } diff --git a/src/test/java/swift/logic/commands/CommandTestUtil.java b/src/test/java/swift/logic/commands/CommandTestUtil.java index b157d506a9b..efc51286de5 100644 --- a/src/test/java/swift/logic/commands/CommandTestUtil.java +++ b/src/test/java/swift/logic/commands/CommandTestUtil.java @@ -77,8 +77,8 @@ public class CommandTestUtil { .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build(); } - public static final String VALID_TASK_NAME_1 = "CS2103T"; - public static final String VALID_TASK_NAME_2 = "Buy Milk"; + public static final String VALID_TASK_NAME_1 = "Buy Milk"; + public static final String VALID_TASK_NAME_2 = "CS2103T"; public static final String VALID_TASK_NAME_3 = "Finish Assignment"; public static final EditTaskCommand.EditTaskDescriptor DESC_TASK_1; diff --git a/src/test/java/swift/testutil/PersonBuilder.java b/src/test/java/swift/testutil/PersonBuilder.java index 8a688aa4c6d..4e5dc3f1455 100644 --- a/src/test/java/swift/testutil/PersonBuilder.java +++ b/src/test/java/swift/testutil/PersonBuilder.java @@ -17,7 +17,7 @@ */ public class PersonBuilder { - public static final String DEFAULT_UUID = "47005f2b-9c40-4051-8c95-69ca601cb58d"; + public static final String DEFAULT_UUID = "c4c645da-27b3-454d-9428-5295a6ee1f33"; public static final String DEFAULT_NAME = "Amy Bee"; public static final String DEFAULT_PHONE = "85355255"; public static final String DEFAULT_EMAIL = "amy@gmail.com"; diff --git a/src/test/java/swift/testutil/TaskBuilder.java b/src/test/java/swift/testutil/TaskBuilder.java index de4c2eb9bc5..55b51cf430a 100644 --- a/src/test/java/swift/testutil/TaskBuilder.java +++ b/src/test/java/swift/testutil/TaskBuilder.java @@ -10,7 +10,7 @@ */ public class TaskBuilder { - public static final String DEFAULT_ID = "dccb909c-216d-42f8-b1e2-0e5779a1d501"; + public static final String DEFAULT_ID = "bfbf250c-fd58-49b4-be15-ca12095ca2ee"; public static final String DEFAULT_TASK_NAME = "Default Task"; private UUID id; diff --git a/src/test/java/swift/testutil/TypicalBridges.java b/src/test/java/swift/testutil/TypicalBridges.java index 5bb20f1854a..51f537458de 100644 --- a/src/test/java/swift/testutil/TypicalBridges.java +++ b/src/test/java/swift/testutil/TypicalBridges.java @@ -13,13 +13,16 @@ * used in tests. */ public class TypicalBridges { + public static final String PERSON1_UUID = "c4c645da-27b3-454d-9428-5295a6ee1f33"; + public static final String TASK1_UUID = "bfbf250c-fd58-49b4-be15-ca12095ca2ee"; + public static final String TASK2_UUID = "41478d11-dbba-441f-ab0f-99ddf097eac1"; public static final PersonTaskBridge DEFAULT_BRIDGE_1 = new PersonTaskBridge( - UUID.fromString("c4c645da-27b3-454d-9428-5295a6ee1f33"), - UUID.fromString("bfbf250c-fd58-49b4-be15-ca12095ca2ee")); + UUID.fromString(PERSON1_UUID), + UUID.fromString(TASK1_UUID)); public static final PersonTaskBridge DEFAULT_BRIDGE_2 = new PersonTaskBridge( - UUID.fromString("c4c645da-27b3-454d-9428-5295a6ee1f33"), - UUID.fromString("41478d11-dbba-441f-ab0f-99ddf097eac1")); + UUID.fromString(PERSON1_UUID), + UUID.fromString(TASK2_UUID)); private TypicalBridges() {} // prevents instantiation diff --git a/src/test/java/swift/testutil/TypicalPersons.java b/src/test/java/swift/testutil/TypicalPersons.java index bb68046614b..2d3bbc270c6 100644 --- a/src/test/java/swift/testutil/TypicalPersons.java +++ b/src/test/java/swift/testutil/TypicalPersons.java @@ -22,25 +22,32 @@ * A utility class containing a list of {@code Person} objects to be used in tests. */ public class TypicalPersons { + public static final String ALICE_UUID = "c4c645da-27b3-454d-9428-5295a6ee1f33"; + public static final String BENSON_UUID = "42d68acf-f3db-4c55-bbe6-4a3d1db64ac0"; + public static final String CARL_UUID = "6a5f8ed7-2607-47d1-9faf-bf2437642985"; + public static final String DANIEL_UUID = "fc3ad432-f7ed-403f-9236-18054ddd4b31"; + public static final String ELLE_UUID = "dbef9f04-d31a-42b4-b57a-4d2fd34444c3"; + public static final String FIONA_UUID = "79faf217-b266-4dd8-91a5-d801e87e5447"; + public static final String GEORGE_UUID = "14cec028-25a3-466d-8ffc-359dc1e2a585"; public static final Person ALICE = new PersonBuilder().withName("Alice Pauline") .withAddress("123, Jurong West Ave 6, #08-111").withEmail("alice@example.com") .withPhone("94351253") - .withTags("friends").build(); + .withTags("friends").withId(ALICE_UUID).build(); public static final Person BENSON = new PersonBuilder().withName("Benson Meier") .withAddress("311, Clementi Ave 2, #02-25") .withEmail("johnd@example.com").withPhone("98765432") - .withTags("owesMoney", "friends").build(); + .withTags("owesMoney", "friends").withId(BENSON_UUID).build(); public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") - .withEmail("heinz@example.com").withAddress("wall street").build(); + .withEmail("heinz@example.com").withAddress("wall street").withId(CARL_UUID).build(); public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") - .withEmail("cornelia@example.com").withAddress("10th street").withTags("friends").build(); + .withEmail("cornelia@example.com").withAddress("10th street").withTags("friends").withId(DANIEL_UUID).build(); public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") - .withEmail("werner@example.com").withAddress("michegan ave").build(); + .withEmail("werner@example.com").withAddress("michegan ave").withId(ELLE_UUID).build(); public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") - .withEmail("lydia@example.com").withAddress("little tokyo").build(); + .withEmail("lydia@example.com").withAddress("little tokyo").withId(FIONA_UUID).build(); public static final Person GEORGE = new PersonBuilder().withName("George Best").withPhone("9482442") - .withEmail("anna@example.com").withAddress("4th street").build(); + .withEmail("anna@example.com").withAddress("4th street").withId(GEORGE_UUID).build(); // Manually added public static final Person HOON = new PersonBuilder().withName("Hoon Meier").withPhone("8482424") diff --git a/src/test/java/swift/testutil/TypicalTasks.java b/src/test/java/swift/testutil/TypicalTasks.java index a34f4aeb660..5e883d77b7f 100644 --- a/src/test/java/swift/testutil/TypicalTasks.java +++ b/src/test/java/swift/testutil/TypicalTasks.java @@ -15,9 +15,16 @@ */ public class TypicalTasks { - public static final Task BUY_MILK = new TaskBuilder().withTaskName(VALID_TASK_NAME_1).build(); + public static final String TASK1_UUID = "bfbf250c-fd58-49b4-be15-ca12095ca2ee"; + public static final String TASK2_UUID = "41478d11-dbba-441f-ab0f-99ddf097eac1"; - public static final Task CS2103T = new TaskBuilder().withTaskName(VALID_TASK_NAME_2).build(); + public static final Task BUY_MILK = new TaskBuilder() + .withTaskName(VALID_TASK_NAME_1) + .withId(TASK1_UUID).build(); + + public static final Task CS2103T = new TaskBuilder() + .withTaskName(VALID_TASK_NAME_2) + .withId(TASK2_UUID).build(); private TypicalTasks() {} // prevents instantiation From 5393e24b4d101e7158a013a76ba6a0496b39f4bf Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 04:35:39 +0800 Subject: [PATCH 20/24] Fix: checkstyle lint errors --- .../swift/logic/parser/SelectContactCommandParserTest.java | 3 ++- src/test/java/swift/testutil/TypicalPersons.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java b/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java index 13e9cac67a6..4ea58082078 100644 --- a/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java +++ b/src/test/java/swift/logic/parser/SelectContactCommandParserTest.java @@ -27,6 +27,7 @@ public void parse_validArgs_returnsSelectContactCommand() { @Test public void parse_invalidArgs_throwsParseException() { - assertParseFailure(parser, "a", String.format(MESSAGE_INVALID_COMMAND_FORMAT, SelectContactCommand.MESSAGE_USAGE)); + assertParseFailure(parser, "a", String + .format(MESSAGE_INVALID_COMMAND_FORMAT, SelectContactCommand.MESSAGE_USAGE)); } } diff --git a/src/test/java/swift/testutil/TypicalPersons.java b/src/test/java/swift/testutil/TypicalPersons.java index 2d3bbc270c6..c0faf2d3a32 100644 --- a/src/test/java/swift/testutil/TypicalPersons.java +++ b/src/test/java/swift/testutil/TypicalPersons.java @@ -41,7 +41,8 @@ public class TypicalPersons { public static final Person CARL = new PersonBuilder().withName("Carl Kurz").withPhone("95352563") .withEmail("heinz@example.com").withAddress("wall street").withId(CARL_UUID).build(); public static final Person DANIEL = new PersonBuilder().withName("Daniel Meier").withPhone("87652533") - .withEmail("cornelia@example.com").withAddress("10th street").withTags("friends").withId(DANIEL_UUID).build(); + .withEmail("cornelia@example.com").withAddress("10th street").withTags("friends") + .withId(DANIEL_UUID).build(); public static final Person ELLE = new PersonBuilder().withName("Elle Meyer").withPhone("9482224") .withEmail("werner@example.com").withAddress("michegan ave").withId(ELLE_UUID).build(); public static final Person FIONA = new PersonBuilder().withName("Fiona Kunz").withPhone("9482427") From 7c80a33e29c0df181d90e05101dd5e84ed77c672 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 04:47:21 +0800 Subject: [PATCH 21/24] Feat: add `codecov.yml` to lower patch threshold --- codecov.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 codecov.yml diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 00000000000..4fe70c29979 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,6 @@ +coverage: + status: + patch: + default: + target: auto + threshold: 50% From 50790d96bfbe8112b5e51179f97cbbdc105efa14 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 05:00:20 +0800 Subject: [PATCH 22/24] Test: add parse selectContact test --- .../java/swift/logic/parser/AddressBookParserTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/java/swift/logic/parser/AddressBookParserTest.java b/src/test/java/swift/logic/parser/AddressBookParserTest.java index 45ac8349cdc..84e072e3ede 100644 --- a/src/test/java/swift/logic/parser/AddressBookParserTest.java +++ b/src/test/java/swift/logic/parser/AddressBookParserTest.java @@ -25,6 +25,7 @@ import swift.logic.commands.HelpCommand; import swift.logic.commands.ListContactCommand; import swift.logic.commands.ListTaskCommand; +import swift.logic.commands.SelectContactCommand; import swift.logic.parser.exceptions.ParseException; import swift.model.person.Person; import swift.model.person.PersonNameContainsKeywordsPredicate; @@ -88,6 +89,13 @@ public void parseCommand_help() throws Exception { assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); } + @Test + public void parseCommand_selectContact() throws Exception { + SelectContactCommand command = (SelectContactCommand) parser.parseCommand( + SelectContactCommand.COMMAND_WORD + " " + INDEX_FIRST_PERSON.getOneBased()); + assertEquals(new SelectContactCommand(INDEX_FIRST_PERSON), command); + } + @Test public void parseCommand_list() throws Exception { assertTrue(parser.parseCommand(ListContactCommand.COMMAND_WORD) instanceof ListContactCommand); From 079d66854884f03dc9f0d1db27127b54429bb5dd Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 05:00:34 +0800 Subject: [PATCH 23/24] Test: add getFilteredBridge test --- src/test/java/swift/model/ModelManagerTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/test/java/swift/model/ModelManagerTest.java b/src/test/java/swift/model/ModelManagerTest.java index a617ae21773..a5eb4f9b96c 100644 --- a/src/test/java/swift/model/ModelManagerTest.java +++ b/src/test/java/swift/model/ModelManagerTest.java @@ -99,6 +99,11 @@ public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredPersonList().remove(0)); } + @Test + public void getFilteredBridgeList_modifyList_throwsUnsupportedOperationException() { + assertThrows(UnsupportedOperationException.class, () -> modelManager.getFilteredBridgeList().remove(0)); + } + @Test public void hasTask_nullTask_throwsNullPointerException() { assertThrows(NullPointerException.class, () -> modelManager.hasTask(null)); From a9bdf27d5854404a94096bc7002a5d4f9ee440b1 Mon Sep 17 00:00:00 2001 From: ShenyiCui Date: Sun, 23 Oct 2022 05:04:42 +0800 Subject: [PATCH 24/24] Test: lower threshold for project to 75 --- codecov.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/codecov.yml b/codecov.yml index 4fe70c29979..f82328cfc44 100644 --- a/codecov.yml +++ b/codecov.yml @@ -4,3 +4,7 @@ coverage: default: target: auto threshold: 50% + project: + default: + target: auto + threshold: 75%