From 2df5dd09f577ced5ad8d3983851398265f4ce85f Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Fri, 5 Apr 2024 03:22:16 +0800 Subject: [PATCH 1/7] Split tests to client and housekeeper --- .../commands/AddCommandIntegrationTest.java | 41 ++++- .../logic/commands/CommandTestUtil.java | 32 +++- .../logic/commands/DeleteCommandTest.java | 168 ++++++++++++++---- .../logic/commands/EditCommandTest.java | 158 ++++++++++++---- .../testutil/EditPersonDescriptorBuilder.java | 1 + 5 files changed, 310 insertions(+), 90 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java index 162a0c86031..1444046b892 100644 --- a/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java +++ b/src/test/java/seedu/address/logic/commands/AddCommandIntegrationTest.java @@ -11,7 +11,11 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; +import seedu.address.model.person.Client; +import seedu.address.model.person.Housekeeper; import seedu.address.model.person.Person; +import seedu.address.testutil.ClientBuilder; +import seedu.address.testutil.HousekeeperBuilder; import seedu.address.testutil.PersonBuilder; /** @@ -27,22 +31,41 @@ public void setUp() { } @Test - public void execute_newPerson_success() { - Person validPerson = new PersonBuilder().build(); + public void execute_newClient_success() { + Client validClient = new ClientBuilder().build(); Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - expectedModel.addPerson(validPerson); + expectedModel.addClient(validClient); - assertCommandSuccess(new AddCommand(validPerson), model, - String.format(AddCommand.MESSAGE_SUCCESS, Messages.format(validPerson)), + assertCommandSuccess(new AddClientCommand(validClient), model, + String.format(AddClientCommand.MESSAGE_SUCCESS, Messages.formatClient(validClient)), expectedModel); } @Test - public void execute_duplicatePerson_throwsCommandException() { - Person personInList = model.getAddressBook().getPersonList().get(0); - assertCommandFailure(new AddCommand(personInList), model, - AddCommand.MESSAGE_DUPLICATE_PERSON); + public void execute_newHousekeeper_success() { + Housekeeper validHousekeeper = new HousekeeperBuilder().build(); + + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + expectedModel.addHousekeeper(validHousekeeper); + + assertCommandSuccess(new AddHousekeeperCommand(validHousekeeper), model, + String.format(AddHousekeeperCommand.MESSAGE_SUCCESS, Messages.formatHousekeeper(validHousekeeper)), + expectedModel); + } + + @Test + public void execute_duplicateClient_throwsCommandException() { + Client personInList = model.getAddressBook().getClientList().get(0); + assertCommandFailure(new AddClientCommand(personInList), model, + AddClientCommand.MESSAGE_DUPLICATE_CLIENT); + } + + @Test + public void execute_duplicateHousekeeper_throwsCommandException() { + Housekeeper personInList = model.getAddressBook().getHousekeeperList().get(0); + assertCommandFailure(new AddHousekeeperCommand(personInList), model, + AddHousekeeperCommand.MESSAGE_DUPLICATE_HOUSEKEEPER); } } diff --git a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java index 807f1388a11..94cc2683885 100644 --- a/src/test/java/seedu/address/logic/commands/CommandTestUtil.java +++ b/src/test/java/seedu/address/logic/commands/CommandTestUtil.java @@ -110,24 +110,40 @@ public static void assertCommandFailure(Command command, Model actualModel, Stri // we are unable to defensively copy the model for comparison later, so we can // only do so by copying its components. AddressBook expectedAddressBook = new AddressBook(actualModel.getAddressBook()); - List expectedFilteredList = new ArrayList<>(actualModel.getFilteredPersonList()); + List expectedClientFilteredList = new ArrayList<>(actualModel.getFilteredClientList()); + List expectedHousekeeperFilteredList = new ArrayList<>(actualModel.getFilteredHousekeeperList()); assertThrows(CommandException.class, expectedMessage, () -> command.execute(actualModel)); assertEquals(expectedAddressBook, actualModel.getAddressBook()); - assertEquals(expectedFilteredList, actualModel.getFilteredPersonList()); + assertEquals(expectedClientFilteredList, actualModel.getFilteredClientList()); + assertEquals(expectedHousekeeperFilteredList, actualModel.getFilteredHousekeeperList()); } /** - * Updates {@code model}'s filtered list to show only the person at the given {@code targetIndex} in the + * Updates {@code model}'s filtered list to show only the client at the given {@code targetIndex} in the * {@code model}'s address book. */ - public static void showPersonAtIndex(Model model, Index targetIndex) { - assertTrue(targetIndex.getZeroBased() < model.getFilteredPersonList().size()); + public static void showClientAtIndex(Model model, Index targetIndex) { + assertTrue(targetIndex.getZeroBased() < model.getFilteredClientList().size()); - Person person = model.getFilteredPersonList().get(targetIndex.getZeroBased()); + Person person = model.getFilteredClientList().get(targetIndex.getZeroBased()); final String[] splitName = person.getName().fullName.split("\\s+"); - model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); + model.updateFilteredClientList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); - assertEquals(1, model.getFilteredPersonList().size()); + assertEquals(1, model.getFilteredClientList().size()); + } + + /** + * Updates {@code model}'s filtered list to show only the client at the given {@code targetIndex} in the + * {@code model}'s address book. + */ + public static void showHousekeeperAtIndex(Model model, Index targetIndex) { + assertTrue(targetIndex.getZeroBased() < model.getFilteredHousekeeperList().size()); + + Person person = model.getFilteredHousekeeperList().get(targetIndex.getZeroBased()); + final String[] splitName = person.getName().fullName.split("\\s+"); + model.updateFilteredHousekeeperList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0]))); + + assertEquals(1, model.getFilteredHousekeeperList().size()); } } diff --git a/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java b/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java index b6f332eabca..1d894abd214 100644 --- a/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/DeleteCommandTest.java @@ -5,7 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex; +import static seedu.address.logic.commands.CommandTestUtil.showClientAtIndex; +import static seedu.address.logic.commands.CommandTestUtil.showHousekeeperAtIndex; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; @@ -17,6 +18,8 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; +import seedu.address.model.person.Client; +import seedu.address.model.person.Housekeeper; import seedu.address.model.person.Person; /** @@ -28,93 +31,184 @@ public class DeleteCommandTest { private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); @Test - public void execute_validIndexUnfilteredList_success() { - Person personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - DeleteCommand deleteCommand = new DeleteCommand(INDEX_FIRST_PERSON); + public void execute_validIndexUnfilteredClientList_success() { + Client personToDelete = model.getFilteredClientList().get(INDEX_FIRST_PERSON.getZeroBased()); + DeleteCommand deleteCommand = new DeleteClientCommand(INDEX_FIRST_PERSON); - String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_PERSON_SUCCESS, - Messages.format(personToDelete)); + String expectedMessage = String.format(DeleteClientCommand.MESSAGE_DELETE_CLIENT_SUCCESS, + Messages.formatClient(personToDelete)); ModelManager expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - expectedModel.deletePerson(personToDelete); + expectedModel.deleteClient(personToDelete); assertCommandSuccess(deleteCommand, model, expectedMessage, expectedModel); } @Test - public void execute_invalidIndexUnfilteredList_throwsCommandException() { - Index outOfBoundIndex = Index.fromOneBased(model.getFilteredPersonList().size() + 1); - DeleteCommand deleteCommand = new DeleteCommand(outOfBoundIndex); + public void execute_validIndexUnfilteredHousekeeperList_success() { + Housekeeper personToDelete = model.getFilteredHousekeeperList().get(INDEX_FIRST_PERSON.getZeroBased()); + DeleteCommand deleteCommand = new DeleteHousekeeperCommand(INDEX_FIRST_PERSON); + + String expectedMessage = String.format(DeleteHousekeeperCommand.MESSAGE_DELETE_HOUSEKEEPER_SUCCESS, + Messages.formatHousekeeper(personToDelete)); + + ModelManager expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + expectedModel.deleteHousekeeper(personToDelete); + + assertCommandSuccess(deleteCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_invalidIndexUnfilteredClientList_throwsCommandException() { + Index outOfBoundIndex = Index.fromOneBased(model.getFilteredClientList().size() + 1); + DeleteCommand deleteCommand = new DeleteClientCommand(outOfBoundIndex); assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); } @Test - public void execute_validIndexFilteredList_success() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + public void execute_invalidIndegetFilteredHousekeeperList_throwsCommandException() { + Index outOfBoundIndex = Index.fromOneBased(model.getFilteredHousekeeperList().size() + 1); + DeleteCommand deleteCommand = new DeleteHousekeeperCommand(outOfBoundIndex); + + assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + + @Test + public void execute_validIndexFilteredClientList_success() { + showClientAtIndex(model, INDEX_FIRST_PERSON); + + Client personToDelete = model.getFilteredClientList().get(INDEX_FIRST_PERSON.getZeroBased()); + DeleteCommand deleteCommand = new DeleteClientCommand(INDEX_FIRST_PERSON); + + String expectedMessage = String.format(DeleteClientCommand.MESSAGE_DELETE_CLIENT_SUCCESS, + Messages.formatClient(personToDelete)); + + Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); + expectedModel.deleteClient(personToDelete); + showNoClient(expectedModel); + + assertCommandSuccess(deleteCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_validIndexFilteredHousekeeperList_success() { + showHousekeeperAtIndex(model, INDEX_FIRST_PERSON); - Person personToDelete = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - DeleteCommand deleteCommand = new DeleteCommand(INDEX_FIRST_PERSON); + Housekeeper personToDelete = model.getFilteredHousekeeperList().get(INDEX_FIRST_PERSON.getZeroBased()); + DeleteCommand deleteCommand = new DeleteHousekeeperCommand(INDEX_FIRST_PERSON); - String expectedMessage = String.format(DeleteCommand.MESSAGE_DELETE_PERSON_SUCCESS, - Messages.format(personToDelete)); + String expectedMessage = String.format(DeleteHousekeeperCommand.MESSAGE_DELETE_HOUSEKEEPER_SUCCESS, + Messages.formatHousekeeper(personToDelete)); Model expectedModel = new ModelManager(model.getAddressBook(), new UserPrefs()); - expectedModel.deletePerson(personToDelete); - showNoPerson(expectedModel); + expectedModel.deleteHousekeeper(personToDelete); + showNoHousekeeper(expectedModel); assertCommandSuccess(deleteCommand, model, expectedMessage, expectedModel); } @Test - public void execute_invalidIndexFilteredList_throwsCommandException() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + public void execute_invalidIndexFilteredClientList_throwsCommandException() { + showClientAtIndex(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().getPersonList().size()); + assertTrue(outOfBoundIndex.getZeroBased() < model.getAddressBook().getClientList().size()); - DeleteCommand deleteCommand = new DeleteCommand(outOfBoundIndex); + DeleteCommand deleteCommand = new DeleteClientCommand(outOfBoundIndex); assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); } @Test - public void equals() { - DeleteCommand deleteFirstCommand = new DeleteCommand(INDEX_FIRST_PERSON); - DeleteCommand deleteSecondCommand = new DeleteCommand(INDEX_SECOND_PERSON); + public void execute_invalidIndexFilteredHousekeeperList_throwsCommandException() { + showHousekeeperAtIndex(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().getHousekeeperList().size()); + + DeleteCommand deleteCommand = new DeleteHousekeeperCommand(outOfBoundIndex); + + assertCommandFailure(deleteCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX); + } + + @Test + public void equalsClient() { + DeleteCommand deleteFirstClientCommand = new DeleteClientCommand(INDEX_FIRST_PERSON); + DeleteCommand deleteSecondCommand = new DeleteClientCommand(INDEX_SECOND_PERSON); // same object -> returns true - assertTrue(deleteFirstCommand.equals(deleteFirstCommand)); + assertTrue(deleteFirstClientCommand.equals(deleteFirstClientCommand)); // same values -> returns true - DeleteCommand deleteFirstCommandCopy = new DeleteCommand(INDEX_FIRST_PERSON); - assertTrue(deleteFirstCommand.equals(deleteFirstCommandCopy)); + DeleteCommand deleteFirstCommandCopy = new DeleteClientCommand(INDEX_FIRST_PERSON); + assertTrue(deleteFirstClientCommand.equals(deleteFirstCommandCopy)); // different types -> returns false - assertFalse(deleteFirstCommand.equals(1)); + assertFalse(deleteFirstClientCommand.equals(1)); // null -> returns false - assertFalse(deleteFirstCommand.equals(null)); + assertFalse(deleteFirstClientCommand.equals(null)); // different person -> returns false - assertFalse(deleteFirstCommand.equals(deleteSecondCommand)); + assertFalse(deleteFirstClientCommand.equals(deleteSecondCommand)); } @Test - public void toStringMethod() { + public void equalsHousekeeper() { + DeleteCommand deleteFirstHousekeeperCommand = new DeleteHousekeeperCommand(INDEX_FIRST_PERSON); + DeleteCommand deleteSecondCommand = new DeleteHousekeeperCommand(INDEX_SECOND_PERSON); + + // same object -> returns true + assertTrue(deleteFirstHousekeeperCommand.equals(deleteFirstHousekeeperCommand)); + + // same values -> returns true + DeleteCommand deleteFirstCommandCopy = new DeleteHousekeeperCommand(INDEX_FIRST_PERSON); + assertTrue(deleteFirstHousekeeperCommand.equals(deleteFirstCommandCopy)); + + // different types -> returns false + assertFalse(deleteFirstHousekeeperCommand.equals(1)); + + // null -> returns false + assertFalse(deleteFirstHousekeeperCommand.equals(null)); + + // different person -> returns false + assertFalse(deleteFirstHousekeeperCommand.equals(deleteSecondCommand)); + } + + @Test + public void toStringMethodClient() { Index targetIndex = Index.fromOneBased(1); - DeleteCommand deleteCommand = new DeleteCommand(targetIndex); + DeleteCommand deleteCommand = new DeleteClientCommand(targetIndex); String expected = DeleteCommand.class.getCanonicalName() + "{targetIndex=" + targetIndex + "}"; assertEquals(expected, deleteCommand.toString()); } + @Test + public void toStringMethodHousekeeper() { + Index targetIndex = Index.fromOneBased(1); + DeleteCommand deleteCommand = new DeleteHousekeeperCommand(targetIndex); + String expected = DeleteCommand.class.getCanonicalName() + "{targetIndex=" + targetIndex + "}"; + assertEquals(expected, deleteCommand.toString()); + } + + /** + * Updates {@code model}'s client filtered list to show no one. + */ + private void showNoClient(Model model) { + model.updateFilteredClientList(p -> false); + + assertTrue(model.getFilteredClientList().isEmpty()); + } + /** - * Updates {@code model}'s filtered list to show no one. + * Updates {@code model}'s housekeeper filtered list to show no one. */ - private void showNoPerson(Model model) { - model.updateFilteredPersonList(p -> false); + private void showNoHousekeeper(Model model) { + model.updateFilteredHousekeeperList(p -> false); - assertTrue(model.getFilteredPersonList().isEmpty()); + assertTrue(model.getFilteredHousekeeperList().isEmpty()); } } diff --git a/src/test/java/seedu/address/logic/commands/EditCommandTest.java b/src/test/java/seedu/address/logic/commands/EditCommandTest.java index 469dd97daa7..bdc954c9898 100644 --- a/src/test/java/seedu/address/logic/commands/EditCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/EditCommandTest.java @@ -10,7 +10,8 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND; import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; -import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex; +import static seedu.address.logic.commands.CommandTestUtil.showClientAtIndex; +import static seedu.address.logic.commands.CommandTestUtil.showHousekeeperAtIndex; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON; import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON; import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook; @@ -24,8 +25,12 @@ import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; +import seedu.address.model.person.Client; +import seedu.address.model.person.Housekeeper; import seedu.address.model.person.Person; +import seedu.address.testutil.ClientBuilder; import seedu.address.testutil.EditPersonDescriptorBuilder; +import seedu.address.testutil.HousekeeperBuilder; import seedu.address.testutil.PersonBuilder; /** @@ -36,88 +41,169 @@ public class EditCommandTest { private Model model = new ModelManager(getTypicalAddressBook(), new UserPrefs()); @Test - public void execute_allFieldsSpecifiedUnfilteredList_success() { - Person editedPerson = new PersonBuilder().build(); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(editedPerson).build(); - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, descriptor); + public void execute_allFieldsSpecifiedUnfilteredClientList_success() { + Client editedClient = new ClientBuilder().build(); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(editedClient).build(); + EditCommand editCommand = new EditClientCommand(INDEX_FIRST_PERSON, descriptor); - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)); + String expectedMessage = String.format(EditClientCommand.MESSAGE_EDIT_CLIENT_SUCCESS, + Messages.formatClient(editedClient)); Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson); + expectedModel.setClient(model.getFilteredClientList().get(0), editedClient); assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); } @Test - public void execute_someFieldsSpecifiedUnfilteredList_success() { - Index indexLastPerson = Index.fromOneBased(model.getFilteredPersonList().size()); - Person lastPerson = model.getFilteredPersonList().get(indexLastPerson.getZeroBased()); + public void execute_allFieldsSpecifiedUnfilteredHousekeeperList_success() { + Housekeeper editedHousekeeper = new HousekeeperBuilder().build(); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(editedHousekeeper).build(); + EditCommand editCommand = new EditHousekeeperCommand(INDEX_FIRST_PERSON, descriptor); - PersonBuilder personInList = new PersonBuilder(lastPerson); - Person editedPerson = personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) + String expectedMessage = String.format(EditHousekeeperCommand.MESSAGE_EDIT_HOUSEKEEPER_SUCCESS, + Messages.formatHousekeeper(editedHousekeeper)); + + Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); + expectedModel.setHousekeeper(model.getFilteredHousekeeperList().get(0), editedHousekeeper); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_someFieldsSpecifiedUnfilteredClientList_success() { + Index indexLastClient = Index.fromOneBased(model.getFilteredClientList().size()); + Client lastClient = model.getFilteredClientList().get(indexLastClient.getZeroBased()); + + ClientBuilder personInList = new ClientBuilder(lastClient); + Client editedClient = personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) .withTags(VALID_TAG_HUSBAND).build(); EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB) .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build(); - EditCommand editCommand = new EditCommand(indexLastPerson, descriptor); + EditCommand editCommand = new EditClientCommand(indexLastClient, descriptor); - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)); + String expectedMessage = String.format(EditClientCommand.MESSAGE_EDIT_CLIENT_SUCCESS, + Messages.formatClient(editedClient)); Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(lastPerson, editedPerson); + expectedModel.setClient(lastClient, editedClient); assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); } @Test - public void execute_noFieldSpecifiedUnfilteredList_success() { - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor()); - Person editedPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); + public void execute_someFieldsSpecifiedUnfilteredHousekeeperList_success() { + Index indexLastHousekeeper = Index.fromOneBased(model.getFilteredHousekeeperList().size()); + Housekeeper lastHousekeeper = model.getFilteredHousekeeperList().get(indexLastHousekeeper.getZeroBased()); + + HousekeeperBuilder personInList = new HousekeeperBuilder(lastHousekeeper); + Housekeeper editedHousekeeper = personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB) + .withTags(VALID_TAG_HUSBAND).build(); - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB) + .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build(); + EditCommand editCommand = new EditHousekeeperCommand(indexLastHousekeeper, descriptor); + + String expectedMessage = String.format(EditHousekeeperCommand.MESSAGE_EDIT_HOUSEKEEPER_SUCCESS, + Messages.formatHousekeeper(editedHousekeeper)); Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); + expectedModel.setHousekeeper(lastHousekeeper, editedHousekeeper); assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); } @Test - public void execute_filteredList_success() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + public void execute_noFieldSpecifiedUnfilteredClientList_success() { + EditCommand editCommand = new EditClientCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor()); + Client editedClient = model.getFilteredClientList().get(INDEX_FIRST_PERSON.getZeroBased()); + + String expectedMessage = String.format(EditClientCommand.MESSAGE_EDIT_CLIENT_SUCCESS, + Messages.formatClient(editedClient)); + + Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_noFieldSpecifiedUnfilteredHousekeeperList_success() { + EditCommand editCommand = new EditHousekeeperCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor()); + Housekeeper editedHousekeeper = model.getFilteredHousekeeperList().get(INDEX_FIRST_PERSON.getZeroBased()); + + String expectedMessage = String.format(EditHousekeeperCommand.MESSAGE_EDIT_HOUSEKEEPER_SUCCESS, + Messages.formatHousekeeper(editedHousekeeper)); - Person personInFilteredList = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - Person editedPerson = new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build(); - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, + Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_filteredClientList_success() { + showClientAtIndex(model, INDEX_FIRST_PERSON); + + Client personInFilteredList = model.getFilteredClientList().get(INDEX_FIRST_PERSON.getZeroBased()); + Client editedClient = new ClientBuilder(personInFilteredList).withName(VALID_NAME_BOB).build(); + EditCommand editCommand = new EditClientCommand(INDEX_FIRST_PERSON, + new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build()); + + String expectedMessage = String.format(EditClientCommand.MESSAGE_EDIT_CLIENT_SUCCESS, + Messages.formatClient(editedClient)); + + Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); + expectedModel.setClient(model.getFilteredClientList().get(0), editedClient); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_filteredHousekeeperList_success() { + showHousekeeperAtIndex(model, INDEX_FIRST_PERSON); + + Housekeeper personInFilteredList = model.getFilteredHousekeeperList().get(INDEX_FIRST_PERSON.getZeroBased()); + Housekeeper editedHousekeeper = new HousekeeperBuilder(personInFilteredList).withName(VALID_NAME_BOB).build(); + EditCommand editCommand = new EditHousekeeperCommand(INDEX_FIRST_PERSON, new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build()); - String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)); + String expectedMessage = String.format(EditHousekeeperCommand.MESSAGE_EDIT_HOUSEKEEPER_SUCCESS, + Messages.formatHousekeeper(editedHousekeeper)); Model expectedModel = new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs()); - expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson); + expectedModel.setHousekeeper(model.getFilteredHousekeeperList().get(0), editedHousekeeper); assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); } @Test - public void execute_duplicatePersonUnfilteredList_failure() { - Person firstPerson = model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased()); - EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(firstPerson).build(); - EditCommand editCommand = new EditCommand(INDEX_SECOND_PERSON, descriptor); + public void execute_duplicatePersonUnfilteredClientList_failure() { + Client firstClient = model.getFilteredClientList().get(INDEX_FIRST_PERSON.getZeroBased()); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(firstClient).build(); + EditCommand editCommand = new EditClientCommand(INDEX_SECOND_PERSON, descriptor); - assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); + assertCommandFailure(editCommand, model, EditClientCommand.MESSAGE_DUPLICATE_CLIENT); } @Test - public void execute_duplicatePersonFilteredList_failure() { - showPersonAtIndex(model, INDEX_FIRST_PERSON); + public void execute_duplicatePersonUnfilteredHousekeeperList_failure() { + Housekeeper firstHousekeeper = model.getFilteredHousekeeperList().get(INDEX_FIRST_PERSON.getZeroBased()); + EditPersonDescriptor descriptor = new EditPersonDescriptorBuilder(firstHousekeeper).build(); + EditCommand editCommand = new EditHousekeeperCommand(INDEX_SECOND_PERSON, descriptor); + + assertCommandFailure(editCommand, model, EditHousekeeperCommand.MESSAGE_DUPLICATE_HOUSEKEEPER); + } + + @Test + public void execute_duplicateClientFilteredList_failure() { + showClientAtIndex(model, INDEX_FIRST_PERSON); // edit person in filtered list into a duplicate in address book - Person personInList = model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased()); - EditCommand editCommand = new EditCommand(INDEX_FIRST_PERSON, + Client personInList = model.getAddressBook().getClientList().get(INDEX_SECOND_PERSON.getZeroBased()); + EditCommand editCommand = new EditClientCommand(INDEX_FIRST_PERSON, new EditPersonDescriptorBuilder(personInList).build()); - assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON); + assertCommandFailure(editCommand, model, EditClientCommand.MESSAGE_DUPLICATE_CLIENT); } @Test diff --git a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java index 4584bd5044e..8837d881e00 100644 --- a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java +++ b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java @@ -37,6 +37,7 @@ public EditPersonDescriptorBuilder(Person person) { descriptor.setEmail(person.getEmail()); descriptor.setAddress(person.getAddress()); descriptor.setTags(person.getTags()); + descriptor.setType(person); } /** From 013cf3ccc65586c41172be5859fcef8c663dbc4b Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Fri, 5 Apr 2024 03:25:16 +0800 Subject: [PATCH 2/7] A bit more --- .../logic/commands/EditCommandTest.java | 49 ++++++++++++++++--- .../testutil/EditPersonDescriptorBuilder.java | 1 - 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/EditCommandTest.java b/src/test/java/seedu/address/logic/commands/EditCommandTest.java index bdc954c9898..38907c19dac 100644 --- a/src/test/java/seedu/address/logic/commands/EditCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/EditCommandTest.java @@ -233,12 +233,12 @@ public void execute_invalidPersonIndexFilteredList_failure() { } @Test - public void equals() { - final EditCommand standardCommand = new EditCommand(INDEX_FIRST_PERSON, DESC_AMY); + public void equals_client() { + final EditClientCommand standardCommand = new EditClientCommand(INDEX_FIRST_PERSON, DESC_AMY); // same values -> returns true EditPersonDescriptor copyDescriptor = new EditPersonDescriptor(DESC_AMY); - EditCommand commandWithSameValues = new EditCommand(INDEX_FIRST_PERSON, copyDescriptor); + EditClientCommand commandWithSameValues = new EditClientCommand(INDEX_FIRST_PERSON, copyDescriptor); assertTrue(standardCommand.equals(commandWithSameValues)); // same object -> returns true @@ -251,17 +251,52 @@ public void equals() { assertFalse(standardCommand.equals(new ClearCommand())); // different index -> returns false - assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_PERSON, DESC_AMY))); + assertFalse(standardCommand.equals(new EditClientCommand(INDEX_SECOND_PERSON, DESC_AMY))); // different descriptor -> returns false - assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_PERSON, DESC_BOB))); + assertFalse(standardCommand.equals(new EditClientCommand(INDEX_FIRST_PERSON, DESC_BOB))); } @Test - public void toStringMethod() { + public void equals_housekeeper() { + final EditHousekeeperCommand standardCommand = new EditHousekeeperCommand(INDEX_FIRST_PERSON, DESC_AMY); + + // same values -> returns true + EditPersonDescriptor copyDescriptor = new EditPersonDescriptor(DESC_AMY); + EditHousekeeperCommand commandWithSameValues = new EditHousekeeperCommand(INDEX_FIRST_PERSON, copyDescriptor); + assertTrue(standardCommand.equals(commandWithSameValues)); + + // same object -> returns true + assertTrue(standardCommand.equals(standardCommand)); + + // null -> returns false + assertFalse(standardCommand.equals(null)); + + // different types -> returns false + assertFalse(standardCommand.equals(new ClearCommand())); + + // different index -> returns false + assertFalse(standardCommand.equals(new EditHousekeeperCommand(INDEX_SECOND_PERSON, DESC_AMY))); + + // different descriptor -> returns false + assertFalse(standardCommand.equals(new EditHousekeeperCommand(INDEX_FIRST_PERSON, DESC_BOB))); + } + + @Test + public void toStringMethodClient() { + Index index = Index.fromOneBased(1); + EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor(); + EditCommand editCommand = new EditClientCommand(index, editPersonDescriptor); + String expected = EditCommand.class.getCanonicalName() + "{index=" + index + ", editPersonDescriptor=" + + editPersonDescriptor + "}"; + assertEquals(expected, editCommand.toString()); + } + + @Test + public void toStringMethodHousekeeper() { Index index = Index.fromOneBased(1); EditPersonDescriptor editPersonDescriptor = new EditPersonDescriptor(); - EditCommand editCommand = new EditCommand(index, editPersonDescriptor); + EditCommand editCommand = new EditHousekeeperCommand(index, editPersonDescriptor); String expected = EditCommand.class.getCanonicalName() + "{index=" + index + ", editPersonDescriptor=" + editPersonDescriptor + "}"; assertEquals(expected, editCommand.toString()); diff --git a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java index 8837d881e00..4584bd5044e 100644 --- a/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java +++ b/src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java @@ -37,7 +37,6 @@ public EditPersonDescriptorBuilder(Person person) { descriptor.setEmail(person.getEmail()); descriptor.setAddress(person.getAddress()); descriptor.setTags(person.getTags()); - descriptor.setType(person); } /** From 54d4a633e207cb27aa7c48f1fd1f94169bae8f90 Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Mon, 15 Apr 2024 11:28:51 +0800 Subject: [PATCH 3/7] quick error message fix --- .../housekeeping/hub/logic/parser/ParserUtil.java | 7 ++++--- .../logic/parser/BookingCommandParserTest.java | 15 ++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/housekeeping/hub/logic/parser/ParserUtil.java b/src/main/java/housekeeping/hub/logic/parser/ParserUtil.java index b22ff788ebd..f5c40b66d7d 100644 --- a/src/main/java/housekeeping/hub/logic/parser/ParserUtil.java +++ b/src/main/java/housekeeping/hub/logic/parser/ParserUtil.java @@ -14,6 +14,7 @@ import housekeeping.hub.commons.core.index.Index; import housekeeping.hub.commons.util.StringUtil; +import housekeeping.hub.logic.commands.BookingCommand; import housekeeping.hub.logic.parser.exceptions.ParseException; import housekeeping.hub.model.person.Address; import housekeeping.hub.model.person.Area; @@ -188,7 +189,7 @@ public static LocalDate parseLastHousekeepingDate(String lHD) throws ParseExcept LocalDate parsedLhd = LocalDate.parse(lHD); return parsedLhd; } catch (Exception e) { - throw new ParseException(HousekeepingDetails.MESSAGE_CONSTRAINTS); + throw new ParseException(BookingCommand.MESSAGE_USAGE); } } @@ -201,7 +202,7 @@ public static Booking parseBooking(String booking) throws ParseException { Booking parsedBooking = new Booking(booking); return parsedBooking; } else { - throw new ParseException(HousekeepingDetails.MESSAGE_CONSTRAINTS); + throw new ParseException(Booking.MESSAGE_CONSTRAINTS); } } @@ -228,7 +229,7 @@ public static Period parsePreferredInterval(String pI) throws ParseException { period = Period.ofYears(quantity); break; default: - throw new ParseException(HousekeepingDetails.MESSAGE_CONSTRAINTS); + throw new ParseException(BookingCommand.MESSAGE_USAGE); } return period; } diff --git a/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java b/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java index 87c747cb938..944e3fdd21c 100644 --- a/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java +++ b/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java @@ -9,6 +9,7 @@ import housekeeping.hub.logic.commands.BookingCommand; import housekeeping.hub.logic.commands.EditHousekeepingDetailsCommand; import housekeeping.hub.logic.parser.exceptions.ParseException; +import housekeeping.hub.model.person.Booking; import housekeeping.hub.model.person.BookingSearchPredicate; import housekeeping.hub.model.person.HousekeepingDetails; @@ -309,7 +310,7 @@ public void parse_clientEditLastHousekeepingDate_throwParseException() throws Pa assertParseFailure(parser, INVALID_CLIENT_EDIT_LAST_HOUSEKEEPING_DATE_MISSING_PREFIX, MESSAGE_INVALID_FORMAT_EDIT_HOUSEKEEPING_DETAILS_COMMAND); assertParseFailure(parser, INVALID_CLIENT_EDIT_LAST_HOUSEKEEPING_DATE_MISSING_DATE, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + BookingCommand.MESSAGE_USAGE); assertParseFailure( parser, INVALID_CLIENT_EDIT_LAST_HOUSEKEEPING_DATE_MISSING_ALL_PARAMETERS, MESSAGE_INVALID_FORMAT); @@ -339,7 +340,7 @@ public void parse_clientEditPreferredInterval_throwParseException() throws Parse assertParseFailure(parser, INVALID_CLIENT_EDIT_PREFERRED_INTERVAL_INVALID_PREFIX, MESSAGE_INVALID_FORMAT_EDIT_HOUSEKEEPING_DETAILS_COMMAND); assertParseFailure(parser, INVALID_CLIENT_EDIT_PREFERRED_INTERVAL_INVALID_INTERVAL, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + BookingCommand.MESSAGE_USAGE); } @Test @@ -350,11 +351,11 @@ public void parse_clientEditBookingDate_throwParseException() throws ParseExcept assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_MISSING_PREFIX, MESSAGE_INVALID_FORMAT_EDIT_HOUSEKEEPING_DETAILS_COMMAND); assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_MISSING_DATE, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + Booking.MESSAGE_CONSTRAINTS); assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_MISSING_TIME, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + Booking.MESSAGE_CONSTRAINTS); assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_MISSING_DATETIME, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + Booking.MESSAGE_CONSTRAINTS); // test invalid parameters assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_ZERO_INDEX, @@ -364,7 +365,7 @@ public void parse_clientEditBookingDate_throwParseException() throws ParseExcept assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_INVALID_PREFIX, MESSAGE_INVALID_FORMAT_EDIT_HOUSEKEEPING_DETAILS_COMMAND); assertParseFailure(parser, INVALID_CLIENT_EDIT_BOOKING_DATE_INVALID_TIME, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + Booking.MESSAGE_CONSTRAINTS); } @Test @@ -383,7 +384,7 @@ public void parse_clientEditDeferment_throwParseException() throws ParseExceptio assertParseFailure(parser, INVALID_CLIENT_EDIT_DEFERMENT_INVALID_PREFIX, MESSAGE_INVALID_FORMAT_EDIT_HOUSEKEEPING_DETAILS_COMMAND); assertParseFailure(parser, INVALID_CLIENT_EDIT_DEFERMENT_INVALID_INTERVAL, - HousekeepingDetails.MESSAGE_CONSTRAINTS); + BookingCommand.MESSAGE_USAGE); } @Test From 0e3fd0093ec013a854dacb6e2cd8af2e6b837d4f Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Mon, 15 Apr 2024 15:56:39 +0800 Subject: [PATCH 4/7] Create HousekeepingDetailsTest --- .../hub/model/person/HousekeepingDetails.java | 17 +-- .../model/person/HousekeepingDetailsTest.java | 125 ++++++++++++++++++ 2 files changed, 132 insertions(+), 10 deletions(-) create mode 100644 src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java diff --git a/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java b/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java index 621abaa2d4b..b91e91dba9f 100644 --- a/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java +++ b/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java @@ -2,6 +2,7 @@ import java.time.LocalDate; import java.time.Period; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -108,7 +109,7 @@ public static String makeStoredDetailsReadable(String details) { // Converting Period of preferred interval to a readable format String[] s = details.split(" "); // If valid s[0] = lastHousekeepingDate, s[1] = preferredInterval, - // s[2] = booking, s[3] = deferment + // s[2] = booking, s[3?] = am/pm, s[3/4] = deferment String num = s[1].substring(1, s[1].length() - 1); String unit = s[1].substring(s[1].length() - 1); String unitString; @@ -130,7 +131,7 @@ public static String makeStoredDetailsReadable(String details) { } // Makes null booking readable - String booking = s[2].equals("null") ? "No booking" : s[2]; + String booking = s[2].equals("null") ? "No booking" : s[2] + " " + s[3]; return String.format("Last housekeeping: %s\nPreferred interval: %s %s\nBooking date: %s", s[0], num, unitString, booking); @@ -288,14 +289,10 @@ public boolean equals(Object other) { HousekeepingDetails otherDetails = (HousekeepingDetails) other; // First predicate of each && is for null values, second predicate is for non-null values - return ((lastHousekeepingDate == otherDetails.lastHousekeepingDate - || lastHousekeepingDate.equals(otherDetails.lastHousekeepingDate)) - && (preferredInterval == otherDetails.preferredInterval - || preferredInterval.equals(otherDetails.preferredInterval)) - && (booking == otherDetails.booking - || booking.equals(otherDetails.booking)) - && (deferment == otherDetails.deferment - || deferment.equals(otherDetails.deferment))); + return Objects.equals(lastHousekeepingDate, otherDetails.lastHousekeepingDate) + && Objects.equals(preferredInterval, otherDetails.preferredInterval) + && Objects.equals(booking, otherDetails.booking) + && Objects.equals(deferment, otherDetails.deferment); } @Override diff --git a/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java b/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java new file mode 100644 index 00000000000..ce57e1d0f88 --- /dev/null +++ b/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java @@ -0,0 +1,125 @@ +package housekeeping.hub.model.person; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class HousekeepingDetailsTest { + static final HousekeepingDetails HOUSEKEEPING_DETAILS_NULL = new HousekeepingDetails(); + static final HousekeepingDetails HOUSEKEEPING_DETAILS_NO_BOOKING_DATE = + new HousekeepingDetails("2024-01-30 P2M null P0D"); + static final HousekeepingDetails HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE = + new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P0D"); + static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_PERIOD = + new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P1D"); + static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_BOOKING_DATE = + new HousekeepingDetails("2024-01-30 P2M 2024-01-02 am P0D"); + static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_SESSION = + new HousekeepingDetails("2024-01-30 P2M 2024-01-01 pm P0D"); + @Test + public void test_storageStringConstructor() { + // Empty details + assertTrue(HOUSEKEEPING_DETAILS_NULL.getBooking() == null); + assertTrue(HOUSEKEEPING_DETAILS_NULL.getDeferment() == null); + assertTrue(HOUSEKEEPING_DETAILS_NULL.getLastHousekeepingDate() == null); + assertTrue(HOUSEKEEPING_DETAILS_NULL.getPreferredInterval() == null); + + // Details with no booking date + assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.getBooking() == null); + + // Details with booking date + assertEquals("2024-01-01 am", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getBooking().toString()); + assertEquals("2024-01-30", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getLastHousekeepingDate().toString()); + assertEquals("P2M", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getPreferredInterval().toString()); + assertEquals("P0D", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getDeferment().toString()); + } + + @Test + public void test_makeStoredDetailsReadable() { + + // Empty details + assertEquals(HousekeepingDetails.NO_DETAILS_PROVIDED, HousekeepingDetails.makeStoredDetailsReadable("null")); + + // Details with no booking date + assertEquals("Last housekeeping: 2024-02-28\n" + + "Preferred interval: 14 days\n" + + "Booking date: No booking", + HousekeepingDetails.makeStoredDetailsReadable("2024-02-28 P14D null P0D")); + + // Details with booking date + assertEquals("Last housekeeping: 2024-01-30\n" + + "Preferred interval: 2 months\n" + + "Booking date: 2024-01-01 am", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2M 2024-01-01 am P0D")); + + assertEquals("Last housekeeping: 2024-01-30\n" + + "Preferred interval: 2 weeks\n" + + "Booking date: 2024-01-01 am", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2W 2024-01-01 am P0D")); + + assertEquals("Last housekeeping: 2024-01-30\n" + + "Preferred interval: 2 years\n" + + "Booking date: 2024-01-01 pm", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2Y 2024-01-01 pm P0D")); + + assertEquals("Last housekeeping: 2025-01-30\n" + + "Preferred interval: 2 weeks\n" + + "Booking date: 2024-01-01 pm", + HousekeepingDetails.makeStoredDetailsReadable("2025-01-30 P2W 2024-01-01 pm P0D")); + + // Invalid details + assertEquals("Invalid housekeeping details format", HousekeepingDetails.makeStoredDetailsReadable("")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2M")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2M 2024-01-01 am")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("P2M 2024-01-30 2024-01-01 am P0D")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2W 2024-01-01 zm P0D")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("2024-01-30 P2W 2024-01-01 zm P0Z")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("202401-30 P2W 2024-01-01 zm P0D")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadable("202401-30 P2W nul P0D")); + + + } + + @Test + public void test_Equals() { + // Different types -> returns false + assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(5)); + + // null -> returns false + assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(null)); + + // Details should equal themselves + assertTrue(HOUSEKEEPING_DETAILS_NULL.equals(HOUSEKEEPING_DETAILS_NULL)); + assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE)); + assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE)); + + // Different detail objects with same fields should be equal + assertTrue(HOUSEKEEPING_DETAILS_NULL.equals(new HousekeepingDetails())); + assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.equals(new HousekeepingDetails("2024-01-30 P2M null P0D"))); + assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals( + new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P0D"))); + + // Different fields should not be equal + assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE)); + assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE)); + assertFalse(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE)); + + // Different period should not be equal + assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_PERIOD)); + + // Different booking date should not be equal + assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_BOOKING_DATE)); + + // Different session should not be equal + assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_SESSION)); + } +} \ No newline at end of file From 4e1bba34716dcd9a9a6d81df370533519fb7546a Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Mon, 15 Apr 2024 21:16:27 +0800 Subject: [PATCH 5/7] HousekeepingDetailsTest --- .../hub/logic/commands/BookingCommand.java | 2 +- .../hub/model/person/HousekeepingDetails.java | 17 +- .../model/person/HousekeepingDetailsTest.java | 165 +++++++++++++++++- 3 files changed, 175 insertions(+), 9 deletions(-) diff --git a/src/main/java/housekeeping/hub/logic/commands/BookingCommand.java b/src/main/java/housekeeping/hub/logic/commands/BookingCommand.java index f71e23277c6..a22aed84d08 100644 --- a/src/main/java/housekeeping/hub/logic/commands/BookingCommand.java +++ b/src/main/java/housekeeping/hub/logic/commands/BookingCommand.java @@ -311,7 +311,7 @@ private CommandResult clientDefer(Model model) throws CommandException { HousekeepingDetails detailsToEdit = clientToEdit.getDetails(); detailsToEdit.addDeferment(defer); - return new CommandResult(String.format(MESSAGE_DEFER_PERSON_SUCCESS, detailsToEdit.getDefermentToString())); + return new CommandResult(String.format(MESSAGE_DEFER_PERSON_SUCCESS, detailsToEdit.getDefermentToReadableString())); } private CommandResult clientRemove(Model model) throws CommandException { diff --git a/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java b/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java index b91e91dba9f..64137fd2187 100644 --- a/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java +++ b/src/main/java/housekeeping/hub/model/person/HousekeepingDetails.java @@ -194,7 +194,7 @@ public static String makeStoredDetailsReadableWithDeferment(String details) { } // Makes null booking readable - String booking = s[2].equals("null") ? "No booking" : s[2]; + String booking = s[2].equals("null") ? "No booking" : s[2] + " " + s[3]; return String.format("Last housekeeping: %s, Preferred interval: %s %s, Booking date: %s, Deferment: %s %s", s[0], numPI, unitStringPI, booking, numD, unitStringD); @@ -242,12 +242,15 @@ public Period getDeferment() { public Booking getBooking() { return booking; } - public String getDefermentToString() { - String details = this.toString(); - String[] s = details.split(" "); // If valid s[0] = lastHousekeepingDate, s[1] = preferredInterval, - // s[2] = bookingDate, s[4] = deferment - String num = s[s.length - 1].substring(1, s[3].length() - 1); - String unit = s[s.length - 1].substring(s[s.length - 1].length() - 1); + + /** + * Converts the deferment period to a readable format. + * @return + */ + public String getDefermentToReadableString() { + String details = this.getDeferment().toString(); + String num = details.substring(1, details.length() - 1); + String unit = details.substring(details.length() - 1); String unitString; switch (unit) { case "Y": diff --git a/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java b/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java index ce57e1d0f88..cb80b77ce72 100644 --- a/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java +++ b/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java @@ -2,6 +2,9 @@ import org.junit.jupiter.api.Test; +import java.time.LocalDate; +import java.time.Period; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -15,9 +18,12 @@ class HousekeepingDetailsTest { static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_PERIOD = new HousekeepingDetails("2024-01-30 P2M 2024-01-01 am P1D"); static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_BOOKING_DATE = - new HousekeepingDetails("2024-01-30 P2M 2024-01-02 am P0D"); + new HousekeepingDetails("2024-01-30 P2M 2024-05-02 am P0D"); static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_SESSION = new HousekeepingDetails("2024-01-30 P2M 2024-01-01 pm P0D"); + + static final HousekeepingDetails HOUSEKEEPING_DETAILS_DIFFERENT_LAST_HOUSEKEEPING_DATE = + new HousekeepingDetails("2024-01-31 P2M 2024-01-01 am P0D"); @Test public void test_storageStringConstructor() { // Empty details @@ -85,8 +91,158 @@ public void test_makeStoredDetailsReadable() { HousekeepingDetails.makeStoredDetailsReadable("202401-30 P2W 2024-01-01 zm P0D")); assertEquals("Invalid housekeeping details format", HousekeepingDetails.makeStoredDetailsReadable("202401-30 P2W nul P0D")); + } + + @Test + public void test_makeStoredDetailsReadableWithDeferment() { + + // Empty details + assertEquals(HousekeepingDetails.NO_DETAILS_PROVIDED, + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("null")); + + // Details with no booking date + assertEquals("Last housekeeping: 2024-02-28, " + + "Preferred interval: 14 days, " + + "Booking date: No booking, " + + "Deferment: 1 days", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-02-28 P14D null P1D")); + + // Details with booking date + assertEquals("Last housekeeping: 2024-01-30, " + + "Preferred interval: 2 months, " + + "Booking date: 2024-01-01 am, " + + "Deferment: 2 weeks", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2M 2024-01-01 am P2W")); + + assertEquals("Last housekeeping: 2024-01-30, " + + "Preferred interval: 2 weeks, " + + "Booking date: 2024-01-01 am, " + + "Deferment: 3 months", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2W 2024-01-01 am P3M")); + assertEquals("Last housekeeping: 2024-01-30, " + + "Preferred interval: 2 years, " + + "Booking date: 2024-01-01 pm, " + + "Deferment: 4 years", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2Y 2024-01-01 pm P4Y")); + assertEquals("Last housekeeping: 2025-01-30, " + + "Preferred interval: 2 weeks, " + + "Booking date: 2024-01-01 pm, " + + "Deferment: 0 days", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2025-01-30 P2W 2024-01-01 pm P0D")); + + // Invalid details + assertEquals("Invalid housekeeping details format", HousekeepingDetails.makeStoredDetailsReadableWithDeferment("")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2M")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2M 2024-01-01 am")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("P2M 2024-01-30 2024-01-01 am P0D")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2W 2024-01-01 zm P0D")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2W 2024-01-01 zm P0Z")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("202401-30 P2W 2024-01-01 zm P0D")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("202401-30 P2W nul P0D")); + } + + @Test + public void test_isEmpty() { + assertTrue(HOUSEKEEPING_DETAILS_NULL.isEmpty()); + assertFalse(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.isEmpty()); + assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.isEmpty()); + } + + @Test + public void test_hasBookingDate() { + assertFalse(HOUSEKEEPING_DETAILS_NULL.hasBooking()); + assertFalse(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.hasBooking()); + assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.hasBooking()); + + String tomorrowDate = LocalDate.now().plusDays(1).toString(); + String formattedDetails = String.format("2024-01-30 P2M %s am P0D", tomorrowDate); + HousekeepingDetails housekeepingDetailsWithBooking = new HousekeepingDetails(formattedDetails); + assertTrue(housekeepingDetailsWithBooking.hasBooking()); + } + + @Test + public void test_setBooking() { + HousekeepingDetails housekeepingDetails = new HousekeepingDetails(); + Booking booking = new Booking("2024-01-01 am"); + housekeepingDetails.setBooking(booking); + assertEquals(booking, housekeepingDetails.getBooking()); + } + + @Test + public void test_deleteBooking() { + HousekeepingDetails housekeepingDetails = new HousekeepingDetails("2024-01-30 P2Y 2024-01-01 pm P0D"); + housekeepingDetails.deleteBooking(); + assertEquals(null, housekeepingDetails.getBooking()); + } + + @Test + public void test_addDeferment() { + HousekeepingDetails housekeepingDetails = new HousekeepingDetails("2024-01-30 P2Y 2024-01-01 pm P0D"); + housekeepingDetails.addDeferment(Period.ofDays(1)); + assertEquals(Period.ofDays(1), housekeepingDetails.getDeferment()); + } + + @Test + public void test_getNextHousekeepingDate() { + // Empty details + assertEquals(LocalDate.MAX, HOUSEKEEPING_DETAILS_NULL.getNextHousekeepingDate()); + + // Details with no booking date + assertEquals(LocalDate.parse("2024-03-30"), + HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.getNextHousekeepingDate()); + + // Details with booking date + assertEquals(LocalDate.parse("2024-03-30"), + HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.getNextHousekeepingDate()); + } + + @Test + public void test_getDefermentToString() { + HousekeepingDetails housekeepingDetails = new HousekeepingDetails("2024-01-30 P2Y 2024-01-01 pm P0D"); + + assertEquals("0 days", housekeepingDetails.getDefermentToReadableString()); + + housekeepingDetails.addDeferment(Period.ofWeeks(1)); + assertEquals("7 days", housekeepingDetails.getDefermentToReadableString()); + + housekeepingDetails = new HousekeepingDetails("2024-01-30 P2Y 2024-01-01 pm P0D"); + housekeepingDetails.addDeferment(Period.ofMonths(2)); + assertEquals("2 months", housekeepingDetails.getDefermentToReadableString()); + + housekeepingDetails = new HousekeepingDetails("2024-01-30 P2Y 2024-01-01 pm P0D"); + housekeepingDetails.addDeferment(Period.ofYears(3)); + assertEquals("3 years", housekeepingDetails.getDefermentToReadableString()); + } + + @Test void test_compareTo() { + // Identity + assertTrue(HOUSEKEEPING_DETAILS_NULL.compareTo(HOUSEKEEPING_DETAILS_NULL) == 0); + assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.compareTo(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE) == 0); + assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.compareTo( + HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE) == 0); + + // Same predicted date + assertTrue(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.compareTo(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE) == 0); + + // No housekeeping details will be max value + assertTrue(HOUSEKEEPING_DETAILS_NULL.compareTo(HOUSEKEEPING_DETAILS_NO_BOOKING_DATE) > 0); + assertTrue(HOUSEKEEPING_DETAILS_NULL.compareTo(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE) > 0); + + // Different period + assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.compareTo(HOUSEKEEPING_DETAILS_DIFFERENT_PERIOD) < 0); + + // Different booking date + assertTrue(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.compareTo( + HOUSEKEEPING_DETAILS_DIFFERENT_LAST_HOUSEKEEPING_DATE) < 0); } @Test @@ -122,4 +278,11 @@ public void test_Equals() { // Different session should not be equal assertFalse(HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.equals(HOUSEKEEPING_DETAILS_DIFFERENT_SESSION)); } + + @Test + public void test_toString() { + assertEquals("null", HOUSEKEEPING_DETAILS_NULL.toString()); + assertEquals("2024-01-30 P2M null P0D", HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.toString()); + assertEquals("2024-01-30 P2M 2024-01-01 am P0D", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.toString()); + } } \ No newline at end of file From c84220f3f1543c58987127659e7f34f9d7b9dd47 Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Mon, 15 Apr 2024 21:30:31 +0800 Subject: [PATCH 6/7] Update `leads` UG --- docs/UserGuide.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 047c19aa681..8610971fea9 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -281,13 +281,20 @@ Examples: ### Getting client call list: `leads` Generates a list of leads by sorting ALL clients based on the predicted next time of housekeeping. -(There is no way to use the find feature with leads) -Clients with predicted next housekeeping date which is in the future will not be included. +(There is no way to use the find feature with leads)
-Format: `leads` +The purpose of the command is to provide a list of clients who are due for housekeeping. This could serve as a +reminder to the client or a sales prompt for you to contact the client for another housekeeping appointment. As such, +clients with predicted next housekeeping date which is in the future will not be included. `leads` will only include +clients with housekeeping details and have predicted next housekeeping date which is in the past or today. +(past is included because you might miss the call for the client) + +Format: `leads`
:bulb: **Tip:** -The leads are sorted with the client with the earliest predicted next housekeeping date at the top. Housekeeping details are optional so clients without housekeeping details will not be included in the leads. +The leads are sorted with the client with the earliest predicted next housekeeping date at the top. +Housekeeping details are optional so clients without housekeeping details will not be included in the leads. +Also, so long as `leads` is the first word in the command, the command will work.
[:arrow_up_small:](#table-of-contents) From bab2b4c989fe9eba097f3eac8787c02d64ccda73 Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Mon, 15 Apr 2024 21:37:09 +0800 Subject: [PATCH 7/7] Fix checkstyle --- .../logic/parser/BookingCommandParserTest.java | 1 - .../hub/model/person/HousekeepingDetailsTest.java | 15 ++++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java b/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java index 944e3fdd21c..687b2e4149b 100644 --- a/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java +++ b/src/test/java/housekeeping/hub/logic/parser/BookingCommandParserTest.java @@ -11,7 +11,6 @@ import housekeeping.hub.logic.parser.exceptions.ParseException; import housekeeping.hub.model.person.Booking; import housekeeping.hub.model.person.BookingSearchPredicate; -import housekeeping.hub.model.person.HousekeepingDetails; public class BookingCommandParserTest { diff --git a/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java b/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java index cb80b77ce72..4ae8574f5bb 100644 --- a/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java +++ b/src/test/java/housekeeping/hub/model/person/HousekeepingDetailsTest.java @@ -1,13 +1,13 @@ package housekeeping.hub.model.person; -import org.junit.jupiter.api.Test; +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 java.time.LocalDate; import java.time.Period; -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 org.junit.jupiter.api.Test; class HousekeepingDetailsTest { static final HousekeepingDetails HOUSEKEEPING_DETAILS_NULL = new HousekeepingDetails(); @@ -133,7 +133,8 @@ public void test_makeStoredDetailsReadableWithDeferment() { HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2025-01-30 P2W 2024-01-01 pm P0D")); // Invalid details - assertEquals("Invalid housekeeping details format", HousekeepingDetails.makeStoredDetailsReadableWithDeferment("")); + assertEquals("Invalid housekeeping details format", + HousekeepingDetails.makeStoredDetailsReadableWithDeferment("")); assertEquals("Invalid housekeeping details format", HousekeepingDetails.makeStoredDetailsReadableWithDeferment("2024-01-30 P2M")); assertEquals("Invalid housekeeping details format", @@ -246,7 +247,7 @@ public void test_getDefermentToString() { } @Test - public void test_Equals() { + public void test_equals() { // Different types -> returns false assertFalse(HOUSEKEEPING_DETAILS_NULL.equals(5)); @@ -285,4 +286,4 @@ public void test_toString() { assertEquals("2024-01-30 P2M null P0D", HOUSEKEEPING_DETAILS_NO_BOOKING_DATE.toString()); assertEquals("2024-01-30 P2M 2024-01-01 am P0D", HOUSEKEEPING_DETAILS_WITH_BOOKING_DATE.toString()); } -} \ No newline at end of file +}