Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update test case for sort #81

Merged
merged 1 commit into from
Mar 26, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,12 @@ public CommandResult execute(Model model, CommandHistory history) {
model.commitBookShelf();
return new CommandResult(MESSAGE_SUCCESS);
}

@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
|| (other instanceof SortBookCommand // instanceof handles nulls
&& this.order.equals(((SortBookCommand) other).order)
&& this.type.equals(((SortBookCommand) other).type));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ public SortBookCommand parse(String args) throws ParseException {

if (!arePrefixesPresent(argMultimap, PREFIX_SORTTYPE, PREFIX_ORDER)
|| !argMultimap.getPreamble().isEmpty()
&& (!argMultimap.getValue(PREFIX_ORDER).get().toUpperCase().equals("ASC")
|| !argMultimap.getValue(PREFIX_ORDER).get().toUpperCase().equals("DES"))) {
|| (!argMultimap.getValue(PREFIX_ORDER).get().toUpperCase().equals("ASC")
&& !argMultimap.getValue(PREFIX_ORDER).get().toUpperCase().equals("DES"))) {
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, SortBookCommand.MESSAGE_USAGE));
}

Expand Down
15 changes: 15 additions & 0 deletions src/test/java/seedu/address/logic/commands/CommandTestUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,21 @@ public class CommandTestUtil {
public static final EditCommand.EditPersonDescriptor DESC_BOB;


public static final String SORT_NAME_WITH_PREFIX = " st/name";
public static final String SORT_AUTHOR_WITH_PREFIX = " st/author";
public static final String SORT_RATING_WITH_PREFIX = " st/rating";
public static final String INVALID_SORT_TYPE_WITH_PREFIX = " st/type";
public static final String ORDER_ASC_WITH_PREFIX = " o/asc";
public static final String ORDER_DES_WITH_PREFIX = " o/des";
public static final String INVALID_ORDER_WITH_PREFIX = "o/abc";
public static final String SORT_NAME_WITHOUT_PREFIX = "name";
public static final String SORT_AUTHOR_WITHOUT_PREFIX = "author";
public static final String SORT_RATING_WITHOUT_PREFIX = "rating";
public static final String ORDER_ASC_WITHOUT_PREFIX = "asc";
public static final String ORDER_DES_WITHOUT_PREFIX = "des";
public static final String EMPTY_STR = " ";
public static final String SORT_EXCEPTION = "The list is not sorted correctly";

static {
DESC_AMY = new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)
.withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public void executeUndoRedo_validIndexUnfilteredList_success() throws Exception
// delete -> first book deleted
deleteCommand.execute(model, commandHistory);

// undo -> reverts addressbook back to previous state and filtered book list to show all books
// undo -> reverts bookShelf back to previous state and filtered book list to show all books
expectedModel.undoBookShelf();
assertCommandSuccess(new UndoCommand(), model, commandHistory, UndoCommand.MESSAGE_SUCCESS, expectedModel);

Expand Down
109 changes: 109 additions & 0 deletions src/test/java/seedu/address/logic/commands/SortBookCommandTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package seedu.address.logic.commands;

import static seedu.address.logic.commands.CommandTestUtil.ORDER_ASC_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.ORDER_DES_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_AUTHOR_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_EXCEPTION;
import static seedu.address.logic.commands.CommandTestUtil.SORT_NAME_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_RATING_WITHOUT_PREFIX;

import static seedu.address.testutil.TypicalBooks.getTypicalBookShelf;

import org.junit.Test;

import javafx.collections.ObservableList;
import seedu.address.model.Model;
import seedu.address.model.ModelManager;
import seedu.address.model.UserPrefs;
import seedu.address.model.book.Book;


public class SortBookCommandTest {

private final Model model = new ModelManager(getTypicalBookShelf(), new UserPrefs());

@Test
public void execute() throws Exception {
ObservableList<Book> bookList = model.getBookShelf().getBookList();

model.sortBook(SORT_AUTHOR_WITHOUT_PREFIX, ORDER_ASC_WITHOUT_PREFIX);
checkAuthor(bookList, ORDER_ASC_WITHOUT_PREFIX);

model.sortBook(SORT_AUTHOR_WITHOUT_PREFIX, ORDER_DES_WITHOUT_PREFIX);
checkAuthor(bookList, ORDER_DES_WITHOUT_PREFIX);

model.sortBook(SORT_NAME_WITHOUT_PREFIX, ORDER_ASC_WITHOUT_PREFIX);
checkName(bookList, ORDER_ASC_WITHOUT_PREFIX);

model.sortBook(SORT_NAME_WITHOUT_PREFIX, ORDER_DES_WITHOUT_PREFIX);
checkName(bookList, ORDER_DES_WITHOUT_PREFIX);

model.sortBook(SORT_RATING_WITHOUT_PREFIX, ORDER_ASC_WITHOUT_PREFIX);
checkRating(bookList, ORDER_ASC_WITHOUT_PREFIX);

model.sortBook(SORT_RATING_WITHOUT_PREFIX, ORDER_DES_WITHOUT_PREFIX);
checkRating(bookList, ORDER_DES_WITHOUT_PREFIX);
}

/**
* Check the list sort by author is correctly sorted
* @param bookList that need to be check
* @param order either asc or des order
* @throws Exception
*/
private void checkAuthor(ObservableList<Book> bookList, String order) throws Exception {
String firstAuthor = getAuthor(bookList, 0);
for (int i = 0; i < bookList.size(); i++) {
if (order.equals(ORDER_ASC_WITHOUT_PREFIX) && firstAuthor.compareTo(getAuthor(bookList, i)) > 0) {
throw new Exception(SORT_EXCEPTION);
} else if (order.equals(ORDER_DES_WITHOUT_PREFIX) && firstAuthor.compareTo(getAuthor(bookList, i)) < 0) {
throw new Exception(SORT_EXCEPTION);
}
}
}

/**
* Check the list sort by bookName is correctly sorted
* @param bookList that need to be check
* @param order either asc or des order
* @throws Exception
*/
private void checkName(ObservableList<Book> bookList, String order) throws Exception {
String firstName = getName(bookList, 0);
for (int i = 0; i < bookList.size(); i++) {
if (order.equals(ORDER_ASC_WITHOUT_PREFIX) && firstName.compareTo(getName(bookList, i)) > 0) {
throw new Exception(SORT_EXCEPTION);
} else if (order.equals(ORDER_DES_WITHOUT_PREFIX) && firstName.compareTo(getName(bookList, i)) < 0) {
throw new Exception(SORT_EXCEPTION);
}
}
}

/**
* Check the list sort by rating is correctly sorted
* @param bookList that need to be check
* @param order either asc or des order
* @throws Exception
*/
private void checkRating(ObservableList<Book> bookList, String order) throws Exception {
int firstRating = getRating(bookList, 0);
for (int i = 0; i < bookList.size(); i++) {
if (order.equals(ORDER_ASC_WITHOUT_PREFIX) && firstRating > getRating(bookList, i)) {
throw new Exception(SORT_EXCEPTION);
} else if (order.equals(ORDER_DES_WITHOUT_PREFIX) && firstRating < getRating(bookList, i)) {
throw new Exception(SORT_EXCEPTION);
}
}
}
private String getAuthor(ObservableList<Book> bookList, int i) {
return bookList.get(i).getAuthor().fullName.toLowerCase();
}

private String getName(ObservableList<Book> bookList, int i) {
return bookList.get(i).getBookName().fullName.toLowerCase();
}

private int getRating(ObservableList<Book> bookList, int i) {
return Integer.valueOf(bookList.get(i).getRating().value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package seedu.address.logic.parser;

import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;

import static seedu.address.logic.commands.CommandTestUtil.EMPTY_STR;
import static seedu.address.logic.commands.CommandTestUtil.INVALID_ORDER_WITH_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.INVALID_SORT_TYPE_WITH_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.ORDER_ASC_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.ORDER_ASC_WITH_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.ORDER_DES_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.ORDER_DES_WITH_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_AUTHOR_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_AUTHOR_WITH_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_NAME_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_NAME_WITH_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_RATING_WITHOUT_PREFIX;
import static seedu.address.logic.commands.CommandTestUtil.SORT_RATING_WITH_PREFIX;

import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;
import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;

import org.junit.Test;

import seedu.address.logic.commands.SortBookCommand;

public class SortBookCommandParserTest {

private SortBookCommandParser parser = new SortBookCommandParser();


@Test
public void parse_compulsoryFieldMissing_failure() {
String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, SortBookCommand.MESSAGE_USAGE);

// missing sort type
assertParseFailure(parser, SortBookCommand.COMMAND_WORD + ORDER_ASC_WITH_PREFIX, expectedMessage);

// missing order type
assertParseFailure(parser, SortBookCommand.COMMAND_WORD + SORT_AUTHOR_WITH_PREFIX, expectedMessage);
}

@Test
public void parse_invalidValue_failure() {
String expectedMessage = String.format(MESSAGE_INVALID_COMMAND_FORMAT, SortBookCommand.MESSAGE_USAGE);

// invalid type
assertParseFailure(parser, SortBookCommand.COMMAND_WORD
+ INVALID_SORT_TYPE_WITH_PREFIX + ORDER_DES_WITH_PREFIX, expectedMessage);

// invalid order
assertParseFailure(parser, SortBookCommand.COMMAND_WORD
+ SORT_NAME_WITH_PREFIX + INVALID_ORDER_WITH_PREFIX, expectedMessage);

// empty parser
assertParseFailure(parser, SortBookCommand.COMMAND_WORD
+ EMPTY_STR, expectedMessage);
}

@Test
public void parse_validValue_success() {

assertParseSuccess(parser,
SORT_AUTHOR_WITH_PREFIX + ORDER_ASC_WITH_PREFIX,
new SortBookCommand(SORT_AUTHOR_WITHOUT_PREFIX, ORDER_ASC_WITHOUT_PREFIX));

assertParseSuccess(parser,
SORT_NAME_WITH_PREFIX + ORDER_ASC_WITH_PREFIX,
new SortBookCommand(SORT_NAME_WITHOUT_PREFIX, ORDER_ASC_WITHOUT_PREFIX));

assertParseSuccess(parser,
SORT_RATING_WITH_PREFIX + ORDER_ASC_WITH_PREFIX,
new SortBookCommand(SORT_RATING_WITHOUT_PREFIX, ORDER_ASC_WITHOUT_PREFIX));

assertParseSuccess(parser,
SORT_AUTHOR_WITH_PREFIX + ORDER_DES_WITH_PREFIX,
new SortBookCommand(SORT_AUTHOR_WITHOUT_PREFIX, ORDER_DES_WITHOUT_PREFIX));

assertParseSuccess(parser,
SORT_NAME_WITH_PREFIX + ORDER_DES_WITH_PREFIX,
new SortBookCommand(SORT_NAME_WITHOUT_PREFIX, ORDER_DES_WITHOUT_PREFIX));

assertParseSuccess(parser,
SORT_RATING_WITH_PREFIX + ORDER_DES_WITH_PREFIX,
new SortBookCommand(SORT_RATING_WITHOUT_PREFIX, ORDER_DES_WITHOUT_PREFIX));
}
}