From 1b48a89959fe9a0df5149800ad8c303a63009dd5 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sat, 2 Nov 2019 15:29:22 +0800 Subject: [PATCH 01/13] include case of unregister --- .../address/logic/parser/CatalogParser.java | 23 ++++--------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/main/java/seedu/address/logic/parser/CatalogParser.java b/src/main/java/seedu/address/logic/parser/CatalogParser.java index aa47ab256e5..9cd8e5c16d0 100644 --- a/src/main/java/seedu/address/logic/parser/CatalogParser.java +++ b/src/main/java/seedu/address/logic/parser/CatalogParser.java @@ -6,25 +6,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.Command; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.commands.DoneCommand; -import seedu.address.logic.commands.EditBorrowerCommand; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.InfoCommand; -import seedu.address.logic.commands.LoanCommand; -import seedu.address.logic.commands.PayCommand; -import seedu.address.logic.commands.RedoCommand; -import seedu.address.logic.commands.RegisterCommand; -import seedu.address.logic.commands.RenewCommand; -import seedu.address.logic.commands.ReturnCommand; -import seedu.address.logic.commands.ServeCommand; -import seedu.address.logic.commands.SetCommand; -import seedu.address.logic.commands.UndoCommand; +import seedu.address.logic.commands.*; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.parser.exceptions.ParseException; @@ -85,6 +67,9 @@ public Command parseCommand(String userInput) throws ParseException, CommandExce case RegisterCommand.COMMAND_WORD: return new RegisterCommandParser().parse(arguments); + case UnregisterCommand.COMMAND_WORD: + return new UnregisterCommandParser().parse(arguments); + case ServeCommand.COMMAND_WORD: return new ServeCommandParser().parse(arguments); From 93834e7324c693f66311b4c5d798ebd4e8290e39 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sat, 2 Nov 2019 15:47:08 +0800 Subject: [PATCH 02/13] check for serve mode in serve command --- .../address/logic/commands/ServeCommand.java | 6 ++++++ .../address/logic/commands/ServeCommandTest.java | 16 ++++++++++++++++ .../seedu/address/testutil/TypicalBorrowers.java | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/main/java/seedu/address/logic/commands/ServeCommand.java b/src/main/java/seedu/address/logic/commands/ServeCommand.java index 0cb2bc8a44d..6bf8176d047 100644 --- a/src/main/java/seedu/address/logic/commands/ServeCommand.java +++ b/src/main/java/seedu/address/logic/commands/ServeCommand.java @@ -22,6 +22,8 @@ public class ServeCommand extends Command implements ReversibleCommand { + PREFIX_BORROWER_ID + "K0001 "; public static final String MESSAGE_SUCCESS = "Currently serving Borrower: %1$s\n"; + public static final String MESSAGE_ALREADY_IN_SERVE_MODE = "Currently still in serve mode! Please enter " + + "\"done\" to exit serve mode before serving another borrower."; private final BorrowerId borrowerId; private Command undoCommand; @@ -48,6 +50,10 @@ public ServeCommand (BorrowerId borrowerId) { public CommandResult execute(Model model) throws CommandException { requireNonNull(model); + if (model.isServeMode()) { + throw new CommandException(MESSAGE_ALREADY_IN_SERVE_MODE); + } + if (!model.hasBorrowerId(borrowerId)) { throw new CommandException(MESSAGE_NO_SUCH_BORROWER_ID); } diff --git a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java index 3064d7bd01f..cf257699251 100644 --- a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java @@ -6,6 +6,8 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_ID_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_ID_BOB; import static seedu.address.testutil.TypicalBorrowers.BOB; +import static seedu.address.testutil.TypicalBorrowers.ALICE; +import static seedu.address.testutil.TypicalBorrowers.ID_ALICE; import org.junit.jupiter.api.Test; @@ -43,4 +45,18 @@ public void execute_borrowerIdNotFound_throwsCommandException() { Assert.assertThrows(CommandException.class, MESSAGE_NO_SUCH_BORROWER_ID, () -> serveCommand.execute(modelManager)); } + + @Test + public void execute_alreadyInServeMode_throwsCommandException() throws CommandException { + Model modelManager = new ModelManager(); + new RegisterCommand(BOB).execute(modelManager); + new RegisterCommand(ALICE).execute(modelManager); + + BorrowerId validIdBob = new BorrowerId(VALID_ID_BOB); + new ServeCommand(ID_ALICE).execute(modelManager); + ServeCommand serveCommand = new ServeCommand(validIdBob); + + Assert.assertThrows(CommandException.class, ServeCommand.MESSAGE_ALREADY_IN_SERVE_MODE, () -> + serveCommand.execute(modelManager)); + } } diff --git a/src/test/java/seedu/address/testutil/TypicalBorrowers.java b/src/test/java/seedu/address/testutil/TypicalBorrowers.java index ca6bba2b396..d0d017b7af0 100644 --- a/src/test/java/seedu/address/testutil/TypicalBorrowers.java +++ b/src/test/java/seedu/address/testutil/TypicalBorrowers.java @@ -28,6 +28,8 @@ public class TypicalBorrowers { public static final BorrowerId ID_FIRST_BORROWER = new BorrowerId("K0001"); public static final BorrowerId ID_SECOND_BORROWER = new BorrowerId("K0002"); + public static final BorrowerId ID_ALICE = new BorrowerId("K0001"); + public static final String ID_DESC_FIRST_BORROWER = " " + PREFIX_BORROWER_ID + "K0001"; public static final Borrower ALICE = new BorrowerBuilder().withName("Alice Pauline") From 19ff84559b4bcd81e659c4ef2d98e97d19f528e2 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sat, 2 Nov 2019 15:52:43 +0800 Subject: [PATCH 03/13] changing toFullString to toString --- .../seedu/address/logic/commands/EditBorrowerCommand.java | 2 +- .../java/seedu/address/logic/commands/RegisterCommand.java | 2 +- .../seedu/address/logic/commands/UnregisterCommand.java | 2 +- .../address/logic/commands/EditBorrowerCommandTest.java | 6 +++--- .../seedu/address/logic/commands/RegisterCommandTest.java | 2 +- .../seedu/address/logic/commands/UnregisterCommandTest.java | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/EditBorrowerCommand.java b/src/main/java/seedu/address/logic/commands/EditBorrowerCommand.java index 6f6e28ac522..0aa8358c945 100644 --- a/src/main/java/seedu/address/logic/commands/EditBorrowerCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditBorrowerCommand.java @@ -80,7 +80,7 @@ public CommandResult execute(Model model) throws CommandException { model.setBorrower(borrowerToEdit, editedBorrower); model.setServingBorrower(editedBorrower); - return new CommandResult(String.format(MESSAGE_EDIT_BORROWER_SUCCESS, editedBorrower.toFullString())); + return new CommandResult(String.format(MESSAGE_EDIT_BORROWER_SUCCESS, editedBorrower)); } @Override diff --git a/src/main/java/seedu/address/logic/commands/RegisterCommand.java b/src/main/java/seedu/address/logic/commands/RegisterCommand.java index 8c99ad7d40b..67782db40d9 100644 --- a/src/main/java/seedu/address/logic/commands/RegisterCommand.java +++ b/src/main/java/seedu/address/logic/commands/RegisterCommand.java @@ -58,7 +58,7 @@ public CommandResult execute(Model model) throws CommandException { redoCommand = this; model.registerBorrower(toAdd); - return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd.toFullString())); + return new CommandResult(String.format(MESSAGE_SUCCESS, toAdd)); } @Override diff --git a/src/main/java/seedu/address/logic/commands/UnregisterCommand.java b/src/main/java/seedu/address/logic/commands/UnregisterCommand.java index e74f6dd08e0..473600578c2 100644 --- a/src/main/java/seedu/address/logic/commands/UnregisterCommand.java +++ b/src/main/java/seedu/address/logic/commands/UnregisterCommand.java @@ -56,7 +56,7 @@ public CommandResult execute(Model model) throws CommandException { redoCommand = this; model.unregisterBorrower(toUnregister); - return new CommandResult(String.format(MESSAGE_SUCCESS, toUnregister.toFullString())); + return new CommandResult(String.format(MESSAGE_SUCCESS, toUnregister)); } @Override diff --git a/src/test/java/seedu/address/logic/commands/EditBorrowerCommandTest.java b/src/test/java/seedu/address/logic/commands/EditBorrowerCommandTest.java index 9968a029ffc..ecb436e6e36 100644 --- a/src/test/java/seedu/address/logic/commands/EditBorrowerCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/EditBorrowerCommandTest.java @@ -42,7 +42,7 @@ public void execute_allFieldsSpecified_success() throws CommandException { EditBorrowerCommand editBorrowerCommand = new EditBorrowerCommand(descriptor); String expectedMessage = String.format(EditBorrowerCommand.MESSAGE_EDIT_BORROWER_SUCCESS, - editedBorrower.toFullString()); + editedBorrower); Model expectedModel = new ModelManager( new Catalog(new Catalog()), new LoanRecords(), model.getBorrowerRecords(), new UserPrefs()); @@ -67,7 +67,7 @@ public void execute_someFieldsSpecified_success() throws CommandException { EditBorrowerCommand editCommand = new EditBorrowerCommand(descriptor); String expectedMessage = String.format(EditBorrowerCommand.MESSAGE_EDIT_BORROWER_SUCCESS, - editedBorrower.toFullString()); + editedBorrower); Model expectedModel = new ModelManager( new Catalog(), new LoanRecords(), model.getBorrowerRecords(), new UserPrefs()); @@ -86,7 +86,7 @@ public void execute_noFieldSpecified_success() throws CommandException { Borrower editedBorrower = model.getServingBorrower(); String expectedMessage = String.format(EditBorrowerCommand.MESSAGE_EDIT_BORROWER_SUCCESS, - editedBorrower.toFullString()); + editedBorrower); Model expectedModel = new ModelManager( new Catalog(), new LoanRecords(), model.getBorrowerRecords(), new UserPrefs()); diff --git a/src/test/java/seedu/address/logic/commands/RegisterCommandTest.java b/src/test/java/seedu/address/logic/commands/RegisterCommandTest.java index 73b6f5e6521..a37cbdc22d1 100644 --- a/src/test/java/seedu/address/logic/commands/RegisterCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/RegisterCommandTest.java @@ -31,7 +31,7 @@ public void execute_borrowerAcceptedByModel_addSuccessful() throws Exception { CommandResult commandResult = new RegisterCommand(validBorrower).execute(modelManager); - assertEquals(String.format(RegisterCommand.MESSAGE_SUCCESS, validBorrower.toFullString()), + assertEquals(String.format(RegisterCommand.MESSAGE_SUCCESS, validBorrower), commandResult.getFeedbackToUser()); assertEquals(Arrays.asList(validBorrower), modelManager.getBorrowerRecords().getBorrowerList()); } diff --git a/src/test/java/seedu/address/logic/commands/UnregisterCommandTest.java b/src/test/java/seedu/address/logic/commands/UnregisterCommandTest.java index df9ae69fa15..f2ecf510724 100644 --- a/src/test/java/seedu/address/logic/commands/UnregisterCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/UnregisterCommandTest.java @@ -32,7 +32,7 @@ public void constructor_nullBorrowerId_throwsNullPointerException() { public void execute_validSerialNumber_success() { UnregisterCommand command = new UnregisterCommand(ID_FIRST_BORROWER); - String expectedMessage = String.format(UnregisterCommand.MESSAGE_SUCCESS, ALICE.toFullString()); + String expectedMessage = String.format(UnregisterCommand.MESSAGE_SUCCESS, ALICE); ModelManager expectedModel = new ModelManager( model.getCatalog(), model.getLoanRecords(), model.getBorrowerRecords(), new UserPrefs()); From 388163808892fa5d9c466e3d12a2a0d6c8ff8d4e Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sat, 2 Nov 2019 16:35:20 +0800 Subject: [PATCH 04/13] change email regex to include DOT in domain name --- src/main/java/seedu/address/model/borrower/Email.java | 5 +++-- src/test/java/seedu/address/model/borrower/EmailTest.java | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/seedu/address/model/borrower/Email.java b/src/main/java/seedu/address/model/borrower/Email.java index 43b69041ba1..f1312b23b7c 100644 --- a/src/main/java/seedu/address/model/borrower/Email.java +++ b/src/main/java/seedu/address/model/borrower/Email.java @@ -23,9 +23,10 @@ public class Email { private static final String LOCAL_PART_REGEX = "^[\\w" + SPECIAL_CHARACTERS + "]+"; private static final String DOMAIN_FIRST_CHARACTER_REGEX = "[^\\W_]"; // alphanumeric characters except underscore private static final String DOMAIN_MIDDLE_REGEX = "[a-zA-Z0-9.-]*"; // alphanumeric, period and hyphen - private static final String DOMAIN_LAST_CHARACTER_REGEX = "[^\\W_]$"; + private static final String DOMAIN_LAST_CHARACTER_REGEX = "[^\\W_]{2,}$"; private static final String VALIDATION_REGEX = LOCAL_PART_REGEX + "@" - + DOMAIN_FIRST_CHARACTER_REGEX + DOMAIN_MIDDLE_REGEX + DOMAIN_LAST_CHARACTER_REGEX; + + DOMAIN_FIRST_CHARACTER_REGEX + DOMAIN_MIDDLE_REGEX + "\\." + + DOMAIN_LAST_CHARACTER_REGEX; public final String value; diff --git a/src/test/java/seedu/address/model/borrower/EmailTest.java b/src/test/java/seedu/address/model/borrower/EmailTest.java index 58177466dac..7a827404e13 100644 --- a/src/test/java/seedu/address/model/borrower/EmailTest.java +++ b/src/test/java/seedu/address/model/borrower/EmailTest.java @@ -47,13 +47,12 @@ public void isValidEmail() { assertFalse(Email.isValidEmail("peterjack@example.com.")); // domain name ends with a period assertFalse(Email.isValidEmail("peterjack@-example.com")); // domain name starts with a hyphen assertFalse(Email.isValidEmail("peterjack@example.com-")); // domain name ends with a hyphen - + assertFalse(Email.isValidEmail("a@bc")); // no dot + assertFalse(Email.isValidEmail("peterjack@example.")); // nothing after dot + assertFalse(Email.isValidEmail("peterjack@example.a")); // only 1 letter after dot // valid email assertTrue(Email.isValidEmail("PeterJack_1190@example.com")); - assertTrue(Email.isValidEmail("a@bc")); // minimal - assertTrue(Email.isValidEmail("test@localhost")); // alphabets only assertTrue(Email.isValidEmail("!#$%&'*+/=?`{|}~^.-@example.org")); // special characters local part - assertTrue(Email.isValidEmail("123@145")); // numeric local part and domain name assertTrue(Email.isValidEmail("a1+be!@example1.com")); // mixture of alphanumeric and special characters assertTrue(Email.isValidEmail("peter_jack@very-very-very-long-example.com")); // long domain name assertTrue(Email.isValidEmail("if.you.dream.it_you.can.do.it@example.com")); // long local part From afa196b00c5694fd3320fa717091c19aa4ef11e9 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sat, 2 Nov 2019 16:43:00 +0800 Subject: [PATCH 05/13] fix travis --- .../address/logic/parser/CatalogParser.java | 21 ++++++++++++++++++- .../logic/commands/ServeCommandTest.java | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/logic/parser/CatalogParser.java b/src/main/java/seedu/address/logic/parser/CatalogParser.java index 9cd8e5c16d0..e86d666e028 100644 --- a/src/main/java/seedu/address/logic/parser/CatalogParser.java +++ b/src/main/java/seedu/address/logic/parser/CatalogParser.java @@ -6,7 +6,26 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import seedu.address.logic.commands.*; +import seedu.address.logic.commands.AddCommand; +import seedu.address.logic.commands.ClearCommand; +import seedu.address.logic.commands.Command; +import seedu.address.logic.commands.DeleteCommand; +import seedu.address.logic.commands.DoneCommand; +import seedu.address.logic.commands.EditBorrowerCommand; +import seedu.address.logic.commands.ExitCommand; +import seedu.address.logic.commands.FindCommand; +import seedu.address.logic.commands.HelpCommand; +import seedu.address.logic.commands.InfoCommand; +import seedu.address.logic.commands.LoanCommand; +import seedu.address.logic.commands.PayCommand; +import seedu.address.logic.commands.RedoCommand; +import seedu.address.logic.commands.RegisterCommand; +import seedu.address.logic.commands.RenewCommand; +import seedu.address.logic.commands.ReturnCommand; +import seedu.address.logic.commands.ServeCommand; +import seedu.address.logic.commands.SetCommand; +import seedu.address.logic.commands.UndoCommand; +import seedu.address.logic.commands.UnregisterCommand; import seedu.address.logic.commands.exceptions.CommandException; import seedu.address.logic.parser.exceptions.ParseException; diff --git a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java index cf257699251..0c0299a66a7 100644 --- a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java @@ -5,8 +5,8 @@ import static seedu.address.commons.core.Messages.MESSAGE_NO_SUCH_BORROWER_ID; import static seedu.address.logic.commands.CommandTestUtil.VALID_ID_AMY; import static seedu.address.logic.commands.CommandTestUtil.VALID_ID_BOB; -import static seedu.address.testutil.TypicalBorrowers.BOB; import static seedu.address.testutil.TypicalBorrowers.ALICE; +import static seedu.address.testutil.TypicalBorrowers.BOB; import static seedu.address.testutil.TypicalBorrowers.ID_ALICE; import org.junit.jupiter.api.Test; From 4b457d325543a8ffdf97eea728d50d878bd44f0b Mon Sep 17 00:00:00 2001 From: Yeo Tong Date: Sat, 2 Nov 2019 20:27:28 +0800 Subject: [PATCH 06/13] fix loan not unmount when undo bug --- src/main/java/seedu/address/logic/commands/UnloanCommand.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/seedu/address/logic/commands/UnloanCommand.java b/src/main/java/seedu/address/logic/commands/UnloanCommand.java index 91164269aba..83a9fa3f714 100644 --- a/src/main/java/seedu/address/logic/commands/UnloanCommand.java +++ b/src/main/java/seedu/address/logic/commands/UnloanCommand.java @@ -4,6 +4,7 @@ import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import seedu.address.commons.util.LoanSlipUtil; import seedu.address.model.Model; import seedu.address.model.book.Book; import seedu.address.model.loan.Loan; @@ -55,6 +56,8 @@ public CommandResult execute(Model model) { model.removeLoan(loanToBeRemoved); // remove Loan object from LoanRecords in model model.servingBorrowerRemoveLoan(loanToBeRemoved); // remove Loan object from Borrower's currentLoanList + LoanSlipUtil.unmountSpecificLoan(loanToBeRemoved, bookToBeUnloaned); + return new CommandResult(String.format(MESSAGE_SUCCESS, unloanedBook, model.getServingBorrower())); } From 82daedcba10f1e5c39941d6912ee54c29c2a60b1 Mon Sep 17 00:00:00 2001 From: seeziyang <44959961+seeziyang@users.noreply.github.com> Date: Sat, 2 Nov 2019 23:31:48 +0800 Subject: [PATCH 07/13] Standardize date format --- src/main/java/seedu/address/logic/commands/RenewCommand.java | 3 ++- src/main/java/seedu/address/ui/BookCard.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/RenewCommand.java b/src/main/java/seedu/address/logic/commands/RenewCommand.java index 7ab740703d5..484226d2d55 100644 --- a/src/main/java/seedu/address/logic/commands/RenewCommand.java +++ b/src/main/java/seedu/address/logic/commands/RenewCommand.java @@ -9,6 +9,7 @@ import static seedu.address.commons.core.Messages.MESSAGE_NOT_LOANED_BY_BORROWER; import java.time.LocalDate; +import java.util.Date; import java.util.List; import seedu.address.commons.core.index.Index; @@ -102,7 +103,7 @@ public CommandResult execute(Model model) throws CommandException { undoCommand = new UnrenewCommand(renewedBook, bookToBeRenewed, renewedLoan, loanToBeRenewed); redoCommand = this; commandResult = new CommandResult(String.format(MESSAGE_SUCCESS, renewedBook, - servingBorrower, extendedDueDate)); + servingBorrower, DateUtil.formatDate(extendedDueDate))); return commandResult; } diff --git a/src/main/java/seedu/address/ui/BookCard.java b/src/main/java/seedu/address/ui/BookCard.java index b3872d850db..1a6549acbe1 100644 --- a/src/main/java/seedu/address/ui/BookCard.java +++ b/src/main/java/seedu/address/ui/BookCard.java @@ -7,6 +7,7 @@ import javafx.scene.layout.FlowPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; +import seedu.address.commons.util.DateUtil; import seedu.address.model.book.Book; /** @@ -57,7 +58,7 @@ public BookCard(Book book, int displayedIndex) { .forEach(tag -> genres.getChildren().add(new Label(tag.genreName))); if (book.isCurrentlyLoanedOut()) { loanStatus.setText("On Loan"); - dueDate.setText("Due: " + book.getLoan().get().getDueDate()); + dueDate.setText("Due: " + DateUtil.formatDate(book.getLoan().get().getDueDate())); renewCount.setText("Renewed: " + book.getLoan().get().getRenewCount() + " times"); } From a5e0a5ed8daa702545fcd42229414ba574d96c3e Mon Sep 17 00:00:00 2001 From: seeziyang <44959961+seeziyang@users.noreply.github.com> Date: Sat, 2 Nov 2019 23:41:38 +0800 Subject: [PATCH 08/13] Add borrower phone and email to borrower panel UI --- .../address/logic/commands/RenewCommand.java | 1 - .../java/seedu/address/ui/BorrowerPanel.java | 12 ++++- src/main/resources/view/BorrowerPanel.fxml | 45 ++++++++++++------- .../logic/commands/RenewCommandTest.java | 2 +- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/src/main/java/seedu/address/logic/commands/RenewCommand.java b/src/main/java/seedu/address/logic/commands/RenewCommand.java index 484226d2d55..d273050b1b8 100644 --- a/src/main/java/seedu/address/logic/commands/RenewCommand.java +++ b/src/main/java/seedu/address/logic/commands/RenewCommand.java @@ -9,7 +9,6 @@ import static seedu.address.commons.core.Messages.MESSAGE_NOT_LOANED_BY_BORROWER; import java.time.LocalDate; -import java.util.Date; import java.util.List; import seedu.address.commons.core.index.Index; diff --git a/src/main/java/seedu/address/ui/BorrowerPanel.java b/src/main/java/seedu/address/ui/BorrowerPanel.java index e318bbff416..c7f27cfae9b 100644 --- a/src/main/java/seedu/address/ui/BorrowerPanel.java +++ b/src/main/java/seedu/address/ui/BorrowerPanel.java @@ -25,10 +25,12 @@ public class BorrowerPanel extends UiPart { @FXML private Label name; - @FXML private Label id; - + @FXML + private Label phone; + @FXML + private Label email; @FXML private Label fines; @@ -40,6 +42,8 @@ public BorrowerPanel() { super(FXML); name.setText(""); id.setText(""); + phone.setText(""); + email.setText(""); fines.setText(""); VBox.setVgrow(bookListView, Priority.ALWAYS); } @@ -54,6 +58,8 @@ public void setBorrower(Borrower borrower, ObservableList observableBookLi requireNonNull(borrower); name.setText("Borrower: " + borrower.getName().toString()); id.setText("ID: " + borrower.getBorrowerId().toString()); + phone.setText("Phone: " + borrower.getPhone().toString()); + email.setText("Email: " + borrower.getEmail().toString()); fines.setText("Fines: " + FineUtil.centsToDollarString(borrower.getOutstandingFineAmount())); bookListView.setItems(observableBookList); bookListView.setCellFactory(listView -> new BorrowerPanel.BookListViewCell()); @@ -65,6 +71,8 @@ public void setBorrower(Borrower borrower, ObservableList observableBookLi public void reset() { name.setText(""); id.setText(""); + phone.setText(""); + email.setText(""); fines.setText(""); ObservableList nullList = FXCollections.observableArrayList(new ArrayList<>()); bookListView.setItems(nullList); diff --git a/src/main/resources/view/BorrowerPanel.fxml b/src/main/resources/view/BorrowerPanel.fxml index d4d8dc4afc8..3d079dfe512 100644 --- a/src/main/resources/view/BorrowerPanel.fxml +++ b/src/main/resources/view/BorrowerPanel.fxml @@ -5,21 +5,32 @@ - - - - - + + + + + + + diff --git a/src/test/java/seedu/address/logic/commands/RenewCommandTest.java b/src/test/java/seedu/address/logic/commands/RenewCommandTest.java index 67730b33e98..45def1ffa25 100644 --- a/src/test/java/seedu/address/logic/commands/RenewCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/RenewCommandTest.java @@ -75,7 +75,7 @@ public void execute_validLoanedBook_renewSuccessful() { expectedModel.updateLoan(LOAN_7, renewedLoan); String expectedMessage = String.format(RenewCommand.MESSAGE_SUCCESS, renewedBook, - expectedModel.getServingBorrower(), extendedDueDate); + expectedModel.getServingBorrower(), DateUtil.formatDate(extendedDueDate)); assertCommandSuccess(renewCommand, actualModel, expectedMessage, expectedModel); } From 06f10fefa050fbd33c129f7461e221893131c7c8 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sun, 3 Nov 2019 01:07:23 +0800 Subject: [PATCH 09/13] use getBorrowerId() instead of creating a new one --- .../java/seedu/address/logic/commands/ServeCommandTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java index 0c0299a66a7..ba13f096c96 100644 --- a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java @@ -52,9 +52,8 @@ public void execute_alreadyInServeMode_throwsCommandException() throws CommandEx new RegisterCommand(BOB).execute(modelManager); new RegisterCommand(ALICE).execute(modelManager); - BorrowerId validIdBob = new BorrowerId(VALID_ID_BOB); - new ServeCommand(ID_ALICE).execute(modelManager); - ServeCommand serveCommand = new ServeCommand(validIdBob); + new ServeCommand(ALICE.getBorrowerId()).execute(modelManager); + ServeCommand serveCommand = new ServeCommand(BOB.getBorrowerId()); Assert.assertThrows(CommandException.class, ServeCommand.MESSAGE_ALREADY_IN_SERVE_MODE, () -> serveCommand.execute(modelManager)); From a9f5f2cbc1cfb019074df690b772f5d052b04a86 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sun, 3 Nov 2019 01:14:34 +0800 Subject: [PATCH 10/13] change regex to accept one letter after dot --- src/main/java/seedu/address/model/borrower/Email.java | 2 +- src/test/java/seedu/address/model/borrower/EmailTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/seedu/address/model/borrower/Email.java b/src/main/java/seedu/address/model/borrower/Email.java index f1312b23b7c..9198dcb1fab 100644 --- a/src/main/java/seedu/address/model/borrower/Email.java +++ b/src/main/java/seedu/address/model/borrower/Email.java @@ -23,7 +23,7 @@ public class Email { private static final String LOCAL_PART_REGEX = "^[\\w" + SPECIAL_CHARACTERS + "]+"; private static final String DOMAIN_FIRST_CHARACTER_REGEX = "[^\\W_]"; // alphanumeric characters except underscore private static final String DOMAIN_MIDDLE_REGEX = "[a-zA-Z0-9.-]*"; // alphanumeric, period and hyphen - private static final String DOMAIN_LAST_CHARACTER_REGEX = "[^\\W_]{2,}$"; + private static final String DOMAIN_LAST_CHARACTER_REGEX = "[^\\W_]{1,}$"; private static final String VALIDATION_REGEX = LOCAL_PART_REGEX + "@" + DOMAIN_FIRST_CHARACTER_REGEX + DOMAIN_MIDDLE_REGEX + "\\." + DOMAIN_LAST_CHARACTER_REGEX; diff --git a/src/test/java/seedu/address/model/borrower/EmailTest.java b/src/test/java/seedu/address/model/borrower/EmailTest.java index 7a827404e13..05e67a5af4a 100644 --- a/src/test/java/seedu/address/model/borrower/EmailTest.java +++ b/src/test/java/seedu/address/model/borrower/EmailTest.java @@ -49,7 +49,6 @@ public void isValidEmail() { assertFalse(Email.isValidEmail("peterjack@example.com-")); // domain name ends with a hyphen assertFalse(Email.isValidEmail("a@bc")); // no dot assertFalse(Email.isValidEmail("peterjack@example.")); // nothing after dot - assertFalse(Email.isValidEmail("peterjack@example.a")); // only 1 letter after dot // valid email assertTrue(Email.isValidEmail("PeterJack_1190@example.com")); assertTrue(Email.isValidEmail("!#$%&'*+/=?`{|}~^.-@example.org")); // special characters local part From 80d4acac91a10949503ff69f4dee308d17dcbd5e Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sun, 3 Nov 2019 01:15:31 +0800 Subject: [PATCH 11/13] remove ID_ALICE --- src/test/java/seedu/address/testutil/TypicalBorrowers.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/seedu/address/testutil/TypicalBorrowers.java b/src/test/java/seedu/address/testutil/TypicalBorrowers.java index d0d017b7af0..ca6bba2b396 100644 --- a/src/test/java/seedu/address/testutil/TypicalBorrowers.java +++ b/src/test/java/seedu/address/testutil/TypicalBorrowers.java @@ -28,8 +28,6 @@ public class TypicalBorrowers { public static final BorrowerId ID_FIRST_BORROWER = new BorrowerId("K0001"); public static final BorrowerId ID_SECOND_BORROWER = new BorrowerId("K0002"); - public static final BorrowerId ID_ALICE = new BorrowerId("K0001"); - public static final String ID_DESC_FIRST_BORROWER = " " + PREFIX_BORROWER_ID + "K0001"; public static final Borrower ALICE = new BorrowerBuilder().withName("Alice Pauline") From 8f5fadc582d679216aa866a7ed3894db11ed8612 Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sun, 3 Nov 2019 01:21:39 +0800 Subject: [PATCH 12/13] added test for unregister --- .../logic/commands/ServeCommandTest.java | 1 - .../logic/parser/CatalogParserTest.java | 26 +++++++------------ 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java index ba13f096c96..5ef347eb671 100644 --- a/src/test/java/seedu/address/logic/commands/ServeCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/ServeCommandTest.java @@ -7,7 +7,6 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_ID_BOB; import static seedu.address.testutil.TypicalBorrowers.ALICE; import static seedu.address.testutil.TypicalBorrowers.BOB; -import static seedu.address.testutil.TypicalBorrowers.ID_ALICE; import org.junit.jupiter.api.Test; diff --git a/src/test/java/seedu/address/logic/parser/CatalogParserTest.java b/src/test/java/seedu/address/logic/parser/CatalogParserTest.java index a83153aa8ef..4f3bca60b2f 100644 --- a/src/test/java/seedu/address/logic/parser/CatalogParserTest.java +++ b/src/test/java/seedu/address/logic/parser/CatalogParserTest.java @@ -15,27 +15,13 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_SERIAL_NUMBER; import static seedu.address.testutil.Assert.assertThrows; +import static seedu.address.testutil.TypicalBorrowers.*; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_BOOK; import org.junit.jupiter.api.Test; import seedu.address.commons.core.UserSettings; -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.DeleteByIndexCommand; -import seedu.address.logic.commands.DeleteBySerialNumberCommand; -import seedu.address.logic.commands.DoneCommand; -import seedu.address.logic.commands.EditBorrowerCommand; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.LoanCommand; -import seedu.address.logic.commands.PayCommand; -import seedu.address.logic.commands.RegisterCommand; -import seedu.address.logic.commands.RenewCommand; -import seedu.address.logic.commands.ReturnCommand; -import seedu.address.logic.commands.ServeCommand; -import seedu.address.logic.commands.SetCommand; +import seedu.address.logic.commands.*; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.BorrowerRecords; import seedu.address.model.Catalog; @@ -141,6 +127,14 @@ public void parseCommand_register() throws Exception { instanceof RegisterCommand); } + @Test + public void parseCommand_unregister() throws Exception { + BorrowerIdGenerator.setBorrowers(getTypicalBorrowerRecords()); + assertTrue(parser.parseCommand( + UnregisterCommand.COMMAND_WORD + " " + PREFIX_BORROWER_ID + ID_FIRST_BORROWER) + instanceof UnregisterCommand); + } + @Test public void parseCommand_serve() throws Exception { assertTrue(parser.parseCommand( From defe43ada81d57e6134d4efe6f12f37be7da068c Mon Sep 17 00:00:00 2001 From: linyutinglyt Date: Sun, 3 Nov 2019 01:29:06 +0800 Subject: [PATCH 13/13] fix checkstyle --- .../logic/parser/CatalogParserTest.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/test/java/seedu/address/logic/parser/CatalogParserTest.java b/src/test/java/seedu/address/logic/parser/CatalogParserTest.java index 4f3bca60b2f..32ca6f079f0 100644 --- a/src/test/java/seedu/address/logic/parser/CatalogParserTest.java +++ b/src/test/java/seedu/address/logic/parser/CatalogParserTest.java @@ -15,13 +15,30 @@ import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE; import static seedu.address.logic.parser.CliSyntax.PREFIX_SERIAL_NUMBER; import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalBorrowers.*; +import static seedu.address.testutil.TypicalBorrowers.ID_FIRST_BORROWER; +import static seedu.address.testutil.TypicalBorrowers.getTypicalBorrowerRecords; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_BOOK; import org.junit.jupiter.api.Test; import seedu.address.commons.core.UserSettings; -import seedu.address.logic.commands.*; +import seedu.address.logic.commands.AddCommand; +import seedu.address.logic.commands.ClearCommand; +import seedu.address.logic.commands.DeleteByIndexCommand; +import seedu.address.logic.commands.DeleteBySerialNumberCommand; +import seedu.address.logic.commands.DoneCommand; +import seedu.address.logic.commands.EditBorrowerCommand; +import seedu.address.logic.commands.ExitCommand; +import seedu.address.logic.commands.FindCommand; +import seedu.address.logic.commands.HelpCommand; +import seedu.address.logic.commands.LoanCommand; +import seedu.address.logic.commands.PayCommand; +import seedu.address.logic.commands.RegisterCommand; +import seedu.address.logic.commands.RenewCommand; +import seedu.address.logic.commands.ReturnCommand; +import seedu.address.logic.commands.ServeCommand; +import seedu.address.logic.commands.SetCommand; +import seedu.address.logic.commands.UnregisterCommand; import seedu.address.logic.parser.exceptions.ParseException; import seedu.address.model.BorrowerRecords; import seedu.address.model.Catalog;