diff --git a/src/main/java/seedu/address/logic/commands/ClearCommand.java b/src/main/java/seedu/address/logic/commands/ClearCommand.java index 5260440fd49..f5826825f6c 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCommand.java +++ b/src/main/java/seedu/address/logic/commands/ClearCommand.java @@ -12,6 +12,9 @@ public class ClearCommand extends Command { public static final String COMMAND_WORD = "clear"; + public static final String MESSAGE_USAGE = COMMAND_WORD + + ": Clears and removes all students in the student list\n" + + "Example: " + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Student list has been cleared."; diff --git a/src/main/java/seedu/address/logic/commands/ClearCourseCommand.java b/src/main/java/seedu/address/logic/commands/ClearCourseCommand.java index 91cd81040e9..09a16bd2be2 100644 --- a/src/main/java/seedu/address/logic/commands/ClearCourseCommand.java +++ b/src/main/java/seedu/address/logic/commands/ClearCourseCommand.java @@ -10,6 +10,9 @@ */ public class ClearCourseCommand extends Command { public static final String COMMAND_WORD = "clear"; + public static final String MESSAGE_USAGE = COMMAND_WORD + + ": Clears and removes all courses in the course list\n" + + "Example: " + COMMAND_WORD; public static final String MESSAGE_SUCCESS = "Course list has been cleared."; @Override diff --git a/src/main/java/seedu/address/logic/commands/EditCourseCommand.java b/src/main/java/seedu/address/logic/commands/EditCourseCommand.java index cb9aa276e68..eb368c4832b 100644 --- a/src/main/java/seedu/address/logic/commands/EditCourseCommand.java +++ b/src/main/java/seedu/address/logic/commands/EditCourseCommand.java @@ -165,7 +165,7 @@ public boolean equals(Object other) { @Override public String toString() { return new ToStringBuilder(this) - .add("Course Name:", courseName) + .add("course name", courseName) .toString(); } } diff --git a/src/main/java/seedu/address/logic/parser/ClearCommandParser.java b/src/main/java/seedu/address/logic/parser/ClearCommandParser.java new file mode 100644 index 00000000000..9e8463d2dcc --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/ClearCommandParser.java @@ -0,0 +1,21 @@ +package seedu.address.logic.parser; + +import seedu.address.logic.commands.*; +import seedu.address.logic.parser.exceptions.ParseException; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +public class ClearCommandParser implements Parser { + /** + * Parses the given {@code String} of arguments in the context of the ClearCommand + * and returns a ClearCommand object for execution. + * @throws ParseException If the user input does not conform to the expected format + */ + public ClearCommand parse(String args) throws ParseException { + ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args); + if (argMultimap.getPreamble().isEmpty()) { + return new ClearCommand(); + } + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, ClearCommand.MESSAGE_USAGE)); + } +} diff --git a/src/main/java/seedu/address/logic/parser/ClearCourseCommandParser.java b/src/main/java/seedu/address/logic/parser/ClearCourseCommandParser.java new file mode 100644 index 00000000000..8b620378806 --- /dev/null +++ b/src/main/java/seedu/address/logic/parser/ClearCourseCommandParser.java @@ -0,0 +1,21 @@ +package seedu.address.logic.parser; + +import seedu.address.logic.commands.*; +import seedu.address.logic.parser.exceptions.ParseException; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; + +public class ClearCourseCommandParser implements Parser { + /** + * Parses the given {@code String} of arguments in the context of the ClearCourseCommand + * and returns a ClearCourseCommand object for execution. + * @throws ParseException If the user input does not conform to the expected format + */ + public ClearCourseCommand parse(String args) throws ParseException { + ArgumentMultimap argMultimap = ArgumentTokenizer.tokenize(args); + if (argMultimap.getPreamble().isEmpty()) { + return new ClearCourseCommand(); + } + throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, ClearCourseCommand.MESSAGE_USAGE)); + } +} diff --git a/src/main/java/seedu/address/logic/parser/CodeSphereParser.java b/src/main/java/seedu/address/logic/parser/CodeSphereParser.java index 4d52e55cdef..1691621b723 100644 --- a/src/main/java/seedu/address/logic/parser/CodeSphereParser.java +++ b/src/main/java/seedu/address/logic/parser/CodeSphereParser.java @@ -87,7 +87,7 @@ private Command parseHomeStageCommand(String commandWord, String arguments) thro return new AddCourseCommandParser().parse(arguments); case ClearCourseCommand.COMMAND_WORD: - return new ClearCourseCommand(); + return new ClearCourseCommandParser().parse(arguments); case DeleteCourseCommand.COMMAND_WORD: return new DeleteCourseCommandParser().parse(arguments); @@ -138,7 +138,7 @@ private Command parseCourseStageCommand(String commandWord, String arguments) th return new AddCommandParser().parse(arguments); case ClearCommand.COMMAND_WORD: - return new ClearCommand(); + return new ClearCommandParser().parse(arguments); case DeleteCommand.COMMAND_WORD: return new DeleteCommandParser().parse(arguments); diff --git a/src/main/java/seedu/address/storage/JsonSerializableCourseList.java b/src/main/java/seedu/address/storage/JsonSerializableCourseList.java index e57305fda00..1c3e3026b68 100644 --- a/src/main/java/seedu/address/storage/JsonSerializableCourseList.java +++ b/src/main/java/seedu/address/storage/JsonSerializableCourseList.java @@ -19,16 +19,16 @@ @JsonRootName(value = "CourseList") class JsonSerializableCourseList { - public static final String MESSAGE_DUPLICATE_PERSON = "Course list contains duplicate course(s)."; + public static final String MESSAGE_DUPLICATE_COURSE = "Course list contains duplicate course(s)."; - private final List persons = new ArrayList<>(); + private final List courses = new ArrayList<>(); /** * Constructs a {@code JsonSerializableAddressBook} with the given persons. */ @JsonCreator public JsonSerializableCourseList(@JsonProperty("courses") List courses) { - this.persons.addAll(persons); + this.courses.addAll(courses); } /** @@ -37,20 +37,20 @@ public JsonSerializableCourseList(@JsonProperty("courses") List typicalStudents = TypicalStudents.getTypicalStudents(); + private Course course = model.getCourseList().getCourseList().get(0); @Test public void execute_allFieldsSpecifiedUnfilteredList_success() { - Course validCourse = new CourseBuilder().build(); - StageManager.getInstance().setCourseStage(validCourse); - validCourse.addStudent(TypicalStudents.AMY); - Student editedStudent = new StudentBuilder().withName("AMY LEE").withEmail(StudentBuilder.DEFAULT_EMAIL) - .withTag(StudentBuilder.DEFAULT_STUDENT_RANK).build(); - EditCommand.EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(editedStudent).build(); + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index targetIndex = Index.fromZeroBased(0); + Student student = course.getStudentList().getStudent(targetIndex); + Student editedStudent = new StudentBuilder().build(); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(editedStudent).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, descriptor); + course.setStudent(student, editedStudent); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, + Messages.format(editedStudent)); + + Model expectedModel = new ModelManager(model.getCourseList(), new UserPrefs()); + expectedModel.setCourse(model.getFilteredCourseList().get(0), course); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_someFieldsSpecifiedUnfilteredList_success() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index targetIndex = Index.fromZeroBased(0); + Student student = course.getStudentList().getStudent(targetIndex); + Student editedStudent = new StudentBuilder(student).withName(VALID_NAME_BOB).withTag(VALID_TAG_AVERAGE).build(); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(editedStudent).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, descriptor); + course.setStudent(student, editedStudent); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, + Messages.format(editedStudent)); + + Model expectedModel = new ModelManager(model.getCourseList(), new UserPrefs()); + expectedModel.setCourse(model.getFilteredCourseList().get(0), course); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_noFieldSpecifiedUnfilteredList_success() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index targetIndex = Index.fromZeroBased(0); + Student student = course.getStudentList().getStudent(targetIndex); + Student editedStudent = new StudentBuilder(student).build(); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(editedStudent).build(); + EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, descriptor); + course.setStudent(student, editedStudent); + + String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, + Messages.format(editedStudent)); + + Model expectedModel = new ModelManager(model.getCourseList(), new UserPrefs()); + expectedModel.setCourse(model.getFilteredCourseList().get(0), course); + + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); + } + + @Test + public void execute_filteredList_success() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index targetIndex = Index.fromZeroBased(0); + Student student = course.getStudentList().getStudent(targetIndex); + course.updateFilteredStudentList(new NameContainsKeywordsPredicate(Collections.singletonList(student + .getName().fullName))); + showStudentAtIndex(course, INDEX_FIRST_STUDENT); + + Student editedStudent = new StudentBuilder(student).withName(VALID_NAME_BOB).build(); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(editedStudent).build(); EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, descriptor); - course.setStudent(course.getStudentList().getStudent(INDEX_FIRST_STUDENT), editedStudent); + course.setStudent(student, editedStudent); + course.resetFilteredStudentList(); String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, Messages.format(editedStudent)); - Model expectedModel = new ModelManager(new CourseList(model.getCourseList()), new UserPrefs()); + Model expectedModel = new ModelManager(model.getCourseList(), new UserPrefs()); expectedModel.setCourse(model.getFilteredCourseList().get(0), course); + assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); } -// @Test -// public void execute_someFieldsSpecifiedUnfilteredList_success() { -// Course validCourse = new CourseBuilder().build(); -// StageManager.getInstance().setCourseStage(validCourse); -// Index indexLastStudent = Index.fromOneBased(validCourse.getFilteredStudentList().size()); -// Student lastStudent = validCourse.getFilteredStudentList().get(indexLastStudent.getZeroBased()); -// StudentBuilder studentInList = new StudentBuilder(lastStudent); -// Student editedStudent = studentInList.withName(VALID_NAME_BOB).withEmail(VALID_EMAIL_BOB) -// .withTag(VALID_TAG_AVERAGE).build(); -// -// EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder().withName(VALID_NAME_BOB) -// .withEmail(VALID_EMAIL_BOB).withTags(VALID_TAG_AVERAGE).build(); -// EditCommand editCommand = new EditCommand(indexLastStudent, descriptor); -// -// String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, -// Messages.format(editedStudent)); -// -// Model expectedModel = new ModelManager(new CourseList(model.getCourseList()), new UserPrefs()); -// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); -// } -// -// @Test -// public void execute_noFieldSpecifiedUnfilteredList_success() { -// EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, new EditStudentDescriptor()); -// Student editedStudent = model.getFilteredStudentList().get(INDEX_FIRST_STUDENT.getZeroBased()); -// -// String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, -// Messages.format(editedStudent)); -// -// Model expectedModel = new ModelManager(new StudentList(model.getStudentList()), new UserPrefs()); -// -// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); -// } -// -// @Test -// public void execute_filteredList_success() { -// showStudentAtIndex(model, INDEX_FIRST_STUDENT); -// -// Student studentInFilteredList = model.getFilteredStudentList().get(INDEX_FIRST_STUDENT.getZeroBased()); -// Student editedStudent = new StudentBuilder(studentInFilteredList).withName(VALID_NAME_BOB).build(); -// EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, -// new EditStudentDescriptorBuilder().withName(VALID_NAME_BOB).build()); -// -// String expectedMessage = String.format(EditCommand.MESSAGE_EDIT_STUDENT_SUCCESS, -// Messages.format(editedStudent)); -// -// Model expectedModel = new ModelManager(new StudentList(model.getStudentList()), new UserPrefs()); -// expectedModel.setStudent(model.getFilteredStudentList().get(0), editedStudent); -// -// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel); -// } -// -// @Test -// public void execute_duplicateStudentUnfilteredList_failure() { -// Student firstStudent = model.getFilteredStudentList().get(INDEX_FIRST_STUDENT.getZeroBased()); -// EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(firstStudent).build(); -// EditCommand editCommand = new EditCommand(INDEX_SECOND_STUDENT, descriptor); -// -// assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENT); -// } -// -// @Test -// public void execute_duplicateStudentFilteredList_failure() { -// showStudentAtIndex(model, INDEX_FIRST_STUDENT); -// -// // edit Student in filtered list into a duplicate in address book -// Student studentInList = model.getStudentList().getStudentList().get(INDEX_SECOND_STUDENT.getZeroBased()); -// EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, -// new EditStudentDescriptorBuilder(studentInList).build()); -// -// assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENT); -// } -// -// @Test -// public void execute_invalidStudentIndexUnfilteredList_failure() { -// Index outOfBoundIndex = Index.fromOneBased(model.getFilteredStudentList().size() + 1); -// EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder().withName(VALID_NAME_BOB).build(); -// EditCommand editCommand = new EditCommand(outOfBoundIndex, descriptor); -// -// assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_STUDENT_DISPLAYED_INDEX); -// } -// -// /** -// * Edit filtered list where index is larger than size of filtered list, -// * but smaller than size of address book -// */ -// @Test -// public void execute_invalidStudentIndexFilteredList_failure() { -// showStudentAtIndex(model, INDEX_FIRST_STUDENT); -// Index outOfBoundIndex = INDEX_SECOND_STUDENT; -// // ensures that outOfBoundIndex is still in bounds of address book list -// assertTrue(outOfBoundIndex.getZeroBased() < model.getStudentList().getStudentList().size()); -// -// EditCommand editCommand = new EditCommand(outOfBoundIndex, -// new EditStudentDescriptorBuilder().withName(VALID_NAME_BOB).build()); -// -// assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_STUDENT_DISPLAYED_INDEX); -// } -// + @Test + public void execute_duplicateStudentUnfilteredList_failure() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index firstIndex = Index.fromZeroBased(0); + Student firstStudent = course.getStudentList().getStudent(firstIndex); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(firstStudent).build(); + EditCommand editCommand = new EditCommand(INDEX_SECOND_STUDENT, descriptor); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENT); + } + + @Test + public void execute_duplicateStudentFilteredList_failure() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index secondIndex = Index.fromZeroBased(1); + Student student = course.getStudentList().getStudent(secondIndex); + course.updateFilteredStudentList(new NameContainsKeywordsPredicate(Collections.singletonList(student + .getName().fullName))); + showStudentAtIndex(course, INDEX_FIRST_STUDENT); + + Index firstIndex = Index.fromZeroBased(0); + // edit Student in filtered list into a duplicate in student list + Student studentInList = course.getStudentList().getStudent(firstIndex); + EditCommand editCommand = new EditCommand(INDEX_FIRST_STUDENT, + new EditStudentDescriptorBuilder(studentInList).build()); + + assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_STUDENT); + } + + @Test + public void execute_invalidStudentIndexUnfilteredList_failure() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index outOfBoundIndex = Index.fromOneBased(course.getStudentList().size() + 1); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder().withName(VALID_NAME_BOB).build(); + EditCommand editCommand = new EditCommand(outOfBoundIndex, descriptor); + + assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_STUDENT_DISPLAYED_INDEX); + } + + /** + * Edit filtered list where index is larger than size of filtered list, + * but smaller than size of student list + */ + @Test + public void execute_invalidStudentIndexFilteredList_failure() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setCourseStage(course); + + Index targetIndex = Index.fromZeroBased(0); + Student student = course.getStudentList().getStudent(targetIndex); + course.updateFilteredStudentList(new NameContainsKeywordsPredicate(Collections.singletonList(student + .getName().fullName))); + showStudentAtIndex(course, INDEX_FIRST_STUDENT); + + Index outOfBoundIndex = Index.fromOneBased(course.getFilteredStudentList().size() + 1); + // ensures that outOfBoundIndex is still in bounds of student list + assertTrue(outOfBoundIndex.getZeroBased() < course.getStudentList().size()); + + EditCommand editCommand = new EditCommand(outOfBoundIndex, + new EditStudentDescriptorBuilder().withName(VALID_NAME_BOB).build()); + + assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_STUDENT_DISPLAYED_INDEX); + } + @Test public void equals() { final EditCommand standardCommand = new EditCommand(INDEX_FIRST_STUDENT, DESC_AMY); diff --git a/src/test/java/seedu/address/logic/commands/EditCourseCommandTest.java b/src/test/java/seedu/address/logic/commands/EditCourseCommandTest.java index fe8f64b7e18..6047f5b1dec 100644 --- a/src/test/java/seedu/address/logic/commands/EditCourseCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/EditCourseCommandTest.java @@ -3,11 +3,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.commands.CommandTestUtil.DESC_CS2100; -import static seedu.address.logic.commands.CommandTestUtil.VALID_COURSE_NAME_2100; import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure; import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess; +import static seedu.address.logic.commands.CommandTestUtil.DESC_CS2100; +import static seedu.address.logic.commands.CommandTestUtil.DESC_CS2101; import static seedu.address.logic.commands.CommandTestUtil.showCourseAtIndex; +import static seedu.address.logic.commands.CommandTestUtil.VALID_COURSE_NAME_2100; +import static seedu.address.testutil.TypicalCourses.CS1101S; import static seedu.address.testutil.TypicalCourses.getTypicalCourseList; import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_STUDENT; import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_STUDENT; @@ -17,14 +19,18 @@ import seedu.address.commons.core.index.Index; import seedu.address.logic.Messages; import seedu.address.logic.commands.EditCourseCommand.EditCourseDescriptor; +import seedu.address.logic.parser.*; import seedu.address.model.CourseList; import seedu.address.model.Model; import seedu.address.model.ModelManager; import seedu.address.model.UserPrefs; import seedu.address.model.course.Course; +import seedu.address.model.course.CourseNameContainsKeywordsPredicate; import seedu.address.testutil.CourseBuilder; import seedu.address.testutil.EditCourseDescriptorBuilder; +import java.util.*; + /** * Contains integration tests (interaction with the Model) and unit tests for EditCourseCommand. */ @@ -62,9 +68,14 @@ public void execute_noFieldSpecifiedUnfilteredList_success() { @Test public void execute_filteredList_success() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setHomeStage(); + + model.updateFilteredCourseList(new CourseNameContainsKeywordsPredicate(Collections.singletonList(CS1101S + .getCourseName().fullCourseName))); showCourseAtIndex(model, INDEX_FIRST_STUDENT); - Course courseInFilteredList = model.getFilteredCourseList().get(INDEX_FIRST_STUDENT.getZeroBased()); + Course courseInFilteredList = model.getFilteredCourseList().get(0); Course editedCourse = new CourseBuilder(courseInFilteredList).withCourseName(VALID_COURSE_NAME_2100).build(); EditCourseCommand editCourseCommand = new EditCourseCommand(INDEX_FIRST_STUDENT, new EditCourseDescriptorBuilder().withCourseName(VALID_COURSE_NAME_2100).build()); @@ -89,6 +100,11 @@ public void execute_duplicateCourseUnfilteredList_failure() { @Test public void execute_duplicateCourseFilteredList_failure() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setHomeStage(); + + model.updateFilteredCourseList(new CourseNameContainsKeywordsPredicate(Collections.singletonList(CS1101S + .getCourseName().fullCourseName))); showCourseAtIndex(model, INDEX_FIRST_STUDENT); // edit Course in filtered list into a duplicate in course list @@ -113,8 +129,14 @@ public void execute_invalidCourseIndexUnfilteredList_failure() { * but smaller than size of course list */ @Test - public void execute_invalidStudentIndexFilteredList_failure() { + public void execute_invalidCourseIndexFilteredList_failure() { + StageManager stageManager = StageManager.getInstance(); + stageManager.setHomeStage(); + + model.updateFilteredCourseList(new CourseNameContainsKeywordsPredicate(Collections.singletonList(CS1101S + .getCourseName().fullCourseName))); showCourseAtIndex(model, INDEX_FIRST_STUDENT); + Index outOfBoundIndex = INDEX_SECOND_STUDENT; // ensures that outOfBoundIndex is still in bounds of course list assertTrue(outOfBoundIndex.getZeroBased() < model.getCourseList().getCourseList().size()); @@ -147,7 +169,7 @@ public void equals() { assertFalse(standardCommand.equals(new EditCourseCommand(INDEX_SECOND_STUDENT, DESC_CS2100))); // different descriptor -> returns false - assertFalse(standardCommand.equals(new EditCourseCommand(INDEX_FIRST_STUDENT, DESC_CS2100))); + assertFalse(standardCommand.equals(new EditCourseCommand(INDEX_FIRST_STUDENT, DESC_CS2101))); } @Test @@ -155,7 +177,7 @@ public void toStringMethod() { Index index = Index.fromOneBased(1); EditCourseDescriptor editCourseDescriptor = new EditCourseDescriptor(); EditCourseCommand editCourseCommand = new EditCourseCommand(index, editCourseDescriptor); - String expected = EditCommand.class.getCanonicalName() + "{index=" + index + ", editCourseDescriptor=" + String expected = EditCourseCommand.class.getCanonicalName() + "{index=" + index + ", editCourseDescriptor=" + editCourseDescriptor + "}"; assertEquals(expected, editCourseCommand.toString()); } diff --git a/src/test/java/seedu/address/logic/commands/EditCourseDescriptorTest.java b/src/test/java/seedu/address/logic/commands/EditCourseDescriptorTest.java index 7e5f479e211..680c372a068 100644 --- a/src/test/java/seedu/address/logic/commands/EditCourseDescriptorTest.java +++ b/src/test/java/seedu/address/logic/commands/EditCourseDescriptorTest.java @@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static seedu.address.logic.commands.CommandTestUtil.DESC_CS2100; import static seedu.address.logic.commands.CommandTestUtil.DESC_CS2101; -import static seedu.address.logic.commands.CommandTestUtil.VALID_COURSE_NAME_2100; import org.junit.jupiter.api.Test; @@ -17,7 +16,7 @@ public class EditCourseDescriptorTest { @Test public void equals() { - // same values -> returns true + // same course name -> returns true EditCourseDescriptor descriptorWithSameValues = new EditCourseDescriptor(DESC_CS2100); assertTrue(DESC_CS2100.equals(descriptorWithSameValues)); @@ -34,15 +33,15 @@ public void equals() { assertFalse(DESC_CS2100.equals(DESC_CS2101)); // different course name -> returns false - EditCourseDescriptor editedCS2100 = new EditCourseDescriptorBuilder(DESC_CS2100).withCourseName(VALID_COURSE_NAME_2100).build(); - assertFalse(DESC_CS2100.equals(editedCS2100)); + EditCourseDescriptor editedCS2101 = new EditCourseDescriptorBuilder(DESC_CS2101).build(); + assertFalse(DESC_CS2100.equals(editedCS2101)); } @Test public void toStringMethod() { EditCourseDescriptor editCourseDescriptor = new EditCourseDescriptor(); - String expected = EditStudentDescriptor.class.getCanonicalName() + "{course name=" + String expected = EditCourseDescriptor.class.getCanonicalName() + "{course name=" + editCourseDescriptor.getCourseName().orElse(null) + "}"; assertEquals(expected, editCourseDescriptor.toString()); } diff --git a/src/test/java/seedu/address/logic/commands/EditStudentDescriptorTest.java b/src/test/java/seedu/address/logic/commands/EditStudentDescriptorTest.java index 7a850797836..eb94edb1e65 100644 --- a/src/test/java/seedu/address/logic/commands/EditStudentDescriptorTest.java +++ b/src/test/java/seedu/address/logic/commands/EditStudentDescriptorTest.java @@ -43,7 +43,7 @@ public void equals() { assertFalse(DESC_AMY.equals(editedAmy)); // different tags -> returns false - editedAmy = new EditStudentDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_GOOD).build(); + editedAmy = new EditStudentDescriptorBuilder(DESC_AMY).withTag(VALID_TAG_GOOD).build(); assertFalse(DESC_AMY.equals(editedAmy)); } @@ -54,7 +54,7 @@ public void toStringMethod() { + editPersonDescriptor.getName().orElse(null) + ", email=" + editPersonDescriptor.getEmail().orElse(null) + ", remark=" + editPersonDescriptor.getRemark().orElse(null) + ", pending question=" - + editPersonDescriptor.getPendingQuestion().orElse(null) + ", tags=" + + editPersonDescriptor.getPendingQuestion().orElse(null) + ", tag=" + editPersonDescriptor.getTag().orElse(null) + "}"; assertEquals(expected, editPersonDescriptor.toString()); } diff --git a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java index 18be492bec6..41d49942236 100644 --- a/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/AddCommandParserTest.java @@ -25,7 +25,7 @@ public class AddCommandParserTest { @Test public void parse_allFieldsPresent_success() { Student expectedStudent = new StudentBuilder().withName(VALID_NAME_BOB).withEmail(VALID_EMAIL_BOB) - .withTag(VALID_TAG_AVERAGE).build(); + .withTag(VALID_TAG_AVERAGE).withRemark("").withPendingQuestion("").build(); // whitespace only preamble assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + EMAIL_DESC_BOB diff --git a/src/test/java/seedu/address/logic/parser/ClearCommandParserTest.java b/src/test/java/seedu/address/logic/parser/ClearCommandParserTest.java new file mode 100644 index 00000000000..656ca07daaf --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/ClearCommandParserTest.java @@ -0,0 +1,18 @@ +package seedu.address.logic.parser; + +import org.junit.jupiter.api.Test; +import seedu.address.logic.commands.ClearCommand; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; + +public class ClearCommandParserTest { + private ClearCommandParser parser = new ClearCommandParser(); + @Test + public void parse_invalidValue_failure() { + // no index specified + assertParseFailure(parser, ClearCommand.COMMAND_WORD + PREAMBLE_NON_EMPTY , + String.format(MESSAGE_INVALID_COMMAND_FORMAT, ClearCommand.MESSAGE_USAGE)); + } +} diff --git a/src/test/java/seedu/address/logic/parser/ClearCourseCommandParserTest.java b/src/test/java/seedu/address/logic/parser/ClearCourseCommandParserTest.java new file mode 100644 index 00000000000..28bd0cd51f7 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/ClearCourseCommandParserTest.java @@ -0,0 +1,18 @@ +package seedu.address.logic.parser; + +import org.junit.jupiter.api.Test; +import seedu.address.logic.commands.ClearCourseCommand; + +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY; +import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; + +public class ClearCourseCommandParserTest { + private ClearCourseCommandParser parser = new ClearCourseCommandParser(); + @Test + public void parse_invalidValue_failure() { + // no index specified + assertParseFailure(parser, ClearCourseCommand.COMMAND_WORD + PREAMBLE_NON_EMPTY , + String.format(MESSAGE_INVALID_COMMAND_FORMAT, ClearCourseCommand.MESSAGE_USAGE)); + } +} diff --git a/src/test/java/seedu/address/logic/parser/CodeSphereParserTest.java b/src/test/java/seedu/address/logic/parser/CodeSphereParserTest.java new file mode 100644 index 00000000000..5bae9789067 --- /dev/null +++ b/src/test/java/seedu/address/logic/parser/CodeSphereParserTest.java @@ -0,0 +1,211 @@ +package seedu.address.logic.parser; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; +import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; +import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; +import static seedu.address.testutil.Assert.assertThrows; +import static seedu.address.testutil.TypicalCourses.CS1101S; +import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_STUDENT; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.junit.jupiter.api.Test; + +import seedu.address.logic.commands.AddCommand; +import seedu.address.logic.commands.AddCourseCommand; +import seedu.address.logic.commands.ClearCommand; +import seedu.address.logic.commands.ClearCourseCommand; +import seedu.address.logic.commands.DeleteCommand; +import seedu.address.logic.commands.DeleteCourseCommand; +import seedu.address.logic.commands.EditCommand; +import seedu.address.logic.commands.EditCommand.EditStudentDescriptor; +import seedu.address.logic.commands.EditCourseCommand; +import seedu.address.logic.commands.EditCourseCommand.EditCourseDescriptor; +import seedu.address.logic.commands.ExitCommand; +import seedu.address.logic.commands.FindCommand; +import seedu.address.logic.commands.FindCourseCommand; +import seedu.address.logic.commands.HelpCommand; +import seedu.address.logic.commands.HomeCommand; +import seedu.address.logic.commands.ResetCommand; +import seedu.address.logic.commands.ResetCourseCommand; +import seedu.address.logic.commands.RemarkCommand; +import seedu.address.logic.parser.exceptions.ParseException; +import seedu.address.model.course.Course; +import seedu.address.model.course.CourseNameContainsKeywordsPredicate; +import seedu.address.model.person.Remark; +import seedu.address.model.person.Student; +import seedu.address.model.person.predicates.NameContainsKeywordsPredicate; +import seedu.address.testutil.EditCourseDescriptorBuilder; +import seedu.address.testutil.EditStudentDescriptorBuilder; +import seedu.address.testutil.CourseBuilder; +import seedu.address.testutil.CourseUtil; +import seedu.address.testutil.StudentBuilder; +import seedu.address.testutil.StudentUtil; + + +public class CodeSphereParserTest { + + private final CodeSphereParser parser = new CodeSphereParser(); + + @Test + public void parseCommand_addCourse() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + + Course course = new CourseBuilder().build(); + AddCourseCommand command = (AddCourseCommand) parser.parseCommand(CourseUtil.getAddCourseCommand(course)); + assertEquals(new AddCourseCommand(course), command); + } + + @Test + public void parseCommand_clearCourse() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertTrue(parser.parseCommand(ClearCourseCommand.COMMAND_WORD) instanceof ClearCourseCommand); + } + + @Test + public void parseCommand_deleteCourse() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + DeleteCourseCommand command = (DeleteCourseCommand) parser.parseCommand( + DeleteCourseCommand.COMMAND_WORD + " " + INDEX_FIRST_STUDENT.getOneBased()); + assertEquals(new DeleteCourseCommand(INDEX_FIRST_STUDENT), command); + } + + @Test + public void parseCommand_editCourse() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + Course course = new CourseBuilder().build(); + EditCourseDescriptor descriptor = new EditCourseDescriptorBuilder(course).build(); + EditCourseCommand command = (EditCourseCommand) parser.parseCommand( + EditCourseCommand.COMMAND_WORD + " " + INDEX_FIRST_STUDENT.getOneBased() + " " + + CourseUtil.getEditCourseDescriptorDetails(descriptor)); + assertEquals(new EditCourseCommand(INDEX_FIRST_STUDENT, descriptor), command); + } + + @Test + public void parseCommand_edit() throws Exception { + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + Student student = new StudentBuilder().build(); + EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(student).build(); + EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " + + INDEX_FIRST_STUDENT.getOneBased() + " " + StudentUtil.getEditStudentDescriptorDetails(descriptor)); + assertEquals(new EditCommand(INDEX_FIRST_STUDENT, descriptor), command); + } + + @Test + public void parseCommand_exit() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); + assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); + + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); + assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); + } + + @Test + public void parseCommand_findCourse() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + List keywords = Arrays.asList("foo", "bar", "baz"); + FindCourseCommand command = (FindCourseCommand) parser.parseCommand( + FindCourseCommand.COMMAND_WORD + " " + keywords.stream().collect(Collectors.joining(" "))); + assertEquals(new FindCourseCommand(new CourseNameContainsKeywordsPredicate(keywords)), command); + } + + @Test + public void parseCommand_find() throws Exception { + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + List keywords = Arrays.asList("foo"); + FindCommand command = (FindCommand) parser.parseCommand( + FindCommand.COMMAND_WORD + " n/" + keywords.stream().collect(Collectors.joining(" "))); + assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); + } + + @Test + public void parseCommand_help() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); + assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); + + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); + assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); + } + + @Test + public void parseCommand_resetCourses() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertTrue(parser.parseCommand(ResetCourseCommand.COMMAND_WORD) instanceof ResetCourseCommand); + } + + @Test + public void parseCommand_reset() throws Exception { + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + assertTrue(parser.parseCommand(ResetCommand.COMMAND_WORD) instanceof ResetCommand); + } + + @Test + public void parseCommand_home() throws Exception { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertTrue(parser.parseCommand(HomeCommand.COMMAND_WORD) instanceof HomeCommand); + + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + assertTrue(parser.parseCommand(ResetCommand.COMMAND_WORD) instanceof ResetCommand); + } + + @Test + public void parseCommand_remark() throws Exception { + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + final Remark remark = new Remark("Some remark."); + RemarkCommand command = (RemarkCommand) parser.parseCommand(RemarkCommand.COMMAND_WORD + " " + + INDEX_FIRST_STUDENT.getOneBased() + " " + PREFIX_REMARK + remark.value); + assertEquals(new RemarkCommand(INDEX_FIRST_STUDENT, remark), command); + } + + @Test + public void parseCommand_unrecognisedInput_throwsParseException() { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () + -> parser.parseCommand("")); + + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () + -> parser.parseCommand("")); + + } + + @Test + public void parseCommand_unknownCommand_throwsParseException() { + // set HOME stage + StageManager.getInstance().setHomeStage(); + assertThrows(ParseException.class, + MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); + + // set COURSE stage + StageManager.getInstance().setCourseStage(CS1101S); + assertThrows(ParseException.class, + MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); + + } +} diff --git a/src/test/java/seedu/address/logic/parser/CourseListParserTest.java b/src/test/java/seedu/address/logic/parser/CourseListParserTest.java deleted file mode 100644 index 22538fe23e2..00000000000 --- a/src/test/java/seedu/address/logic/parser/CourseListParserTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package seedu.address.logic.parser; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT; -import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND; -import static seedu.address.logic.parser.CliSyntax.PREFIX_REMARK; -import static seedu.address.testutil.Assert.assertThrows; -import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_STUDENT; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -import org.junit.jupiter.api.Test; - -import seedu.address.logic.commands.AddCommand; -import seedu.address.logic.commands.ClearCommand; -import seedu.address.logic.commands.DeleteCommand; -import seedu.address.logic.commands.EditCommand; -import seedu.address.logic.commands.EditCommand.EditStudentDescriptor; -import seedu.address.logic.commands.ExitCommand; -import seedu.address.logic.commands.FindCommand; -import seedu.address.logic.commands.HelpCommand; -import seedu.address.logic.commands.ResetCommand; -import seedu.address.logic.commands.RemarkCommand; -import seedu.address.logic.parser.exceptions.ParseException; -import seedu.address.model.person.Remark; -import seedu.address.model.person.Student; -import seedu.address.model.person.predicates.NameContainsKeywordsPredicate; -import seedu.address.testutil.EditStudentDescriptorBuilder; -import seedu.address.testutil.StudentBuilder; -import seedu.address.testutil.StudentUtil; - -public class CourseListParserTest { - - private final CodeSphereParser parser = new CodeSphereParser(); - - @Test - public void parseCommand_add() throws Exception { - Student student = new StudentBuilder().build(); - AddCommand command = (AddCommand) parser.parseCommand(StudentUtil.getAddCommand(student)); - assertEquals(new AddCommand(student), command); - } - - @Test - public void parseCommand_clear() throws Exception { - assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand); - assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + " 3") instanceof ClearCommand); - } - - @Test - public void parseCommand_delete() throws Exception { - DeleteCommand command = (DeleteCommand) parser.parseCommand( - DeleteCommand.COMMAND_WORD + " " + INDEX_FIRST_STUDENT.getOneBased()); - assertEquals(new DeleteCommand(INDEX_FIRST_STUDENT), command); - } - - @Test - public void parseCommand_edit() throws Exception { - Student student = new StudentBuilder().build(); - EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder(student).build(); - EditCommand command = (EditCommand) parser.parseCommand(EditCommand.COMMAND_WORD + " " - + INDEX_FIRST_STUDENT.getOneBased() + " " + StudentUtil.getEditStudentDescriptorDetails(descriptor)); - assertEquals(new EditCommand(INDEX_FIRST_STUDENT, descriptor), command); - } - - @Test - public void parseCommand_exit() throws Exception { - assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand); - assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + " 3") instanceof ExitCommand); - } - - @Test - public void parseCommand_find() throws Exception { - List keywords = Arrays.asList("foo", "bar", "baz"); - FindCommand command = (FindCommand) parser.parseCommand( - FindCommand.COMMAND_WORD + " " + keywords.stream().collect(Collectors.joining(" "))); - assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command); - } - - @Test - public void parseCommand_help() throws Exception { - assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand); - assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + " 3") instanceof HelpCommand); - } - - @Test - public void parseCommand_list() throws Exception { - assertTrue(parser.parseCommand(ResetCommand.COMMAND_WORD) instanceof ResetCommand); - assertTrue(parser.parseCommand(ResetCommand.COMMAND_WORD + " 3") instanceof ResetCommand); - } - - @Test - public void parseCommand_remark() throws Exception { - final Remark remark = new Remark("Some remark."); - RemarkCommand command = (RemarkCommand) parser.parseCommand(RemarkCommand.COMMAND_WORD + " " - + INDEX_FIRST_STUDENT.getOneBased() + " " + PREFIX_REMARK + remark.value); - assertEquals(new RemarkCommand(INDEX_FIRST_STUDENT, remark), command); - } - - @Test - public void parseCommand_unrecognisedInput_throwsParseException() { - assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), () - -> parser.parseCommand("")); - } - - @Test - public void parseCommand_unknownCommand_throwsParseException() { - assertThrows(ParseException.class, - MESSAGE_UNKNOWN_COMMAND, () -> parser.parseCommand("unknownCommand")); - } -} diff --git a/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java b/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java index 4d8d9bc631c..7065dfb7c08 100644 --- a/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java +++ b/src/test/java/seedu/address/logic/parser/EditCommandParserTest.java @@ -17,6 +17,7 @@ import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_AVERAGE; import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_GOOD; import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL; +import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME; import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure; import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess; @@ -77,6 +78,15 @@ public void parse_invalidValue_failure() { assertParseFailure(parser, "1" + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email assertParseFailure(parser, "1" + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag + // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited, + // parsing it together with a valid tag results in error + assertParseFailure(parser, "1" + TAG_DESC_GOOD + TAG_DESC_AVERAGE + TAG_EMPTY, + Messages.getErrorMessageForDuplicatePrefixes(PREFIX_TAG)); + assertParseFailure(parser, "1" + TAG_DESC_GOOD + TAG_EMPTY + TAG_DESC_AVERAGE, + Messages.getErrorMessageForDuplicatePrefixes(PREFIX_TAG)); + assertParseFailure(parser, "1" + TAG_EMPTY + TAG_DESC_GOOD + TAG_DESC_AVERAGE, + Messages.getErrorMessageForDuplicatePrefixes(PREFIX_TAG)); + // multiple invalid values, but only the first invalid value is captured assertParseFailure(parser, "1" + INVALID_NAME_DESC + INVALID_EMAIL_DESC, Name.MESSAGE_CONSTRAINTS); @@ -85,12 +95,11 @@ public void parse_invalidValue_failure() { @Test public void parse_allFieldsSpecified_success() { Index targetIndex = INDEX_SECOND_STUDENT; - String userInput = targetIndex.getOneBased() - + EMAIL_DESC_AMY + NAME_DESC_AMY + TAG_DESC_AVERAGE + PENDING_QUESTION_DESC_AMY; + String userInput = targetIndex.getOneBased() + TAG_DESC_AVERAGE + EMAIL_DESC_AMY + NAME_DESC_AMY; EditStudentDescriptor descriptor = new EditStudentDescriptorBuilder().withName(VALID_NAME_AMY) - .withEmail(VALID_EMAIL_AMY).withTags(VALID_TAG_AVERAGE) - .withPendingQuestion(VALID_PENDING_QUESTION_AMY).build(); + .withEmail(VALID_EMAIL_AMY).withTag(VALID_TAG_AVERAGE).build(); + EditCommand expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); @@ -125,7 +134,7 @@ public void parse_oneFieldSpecified_success() { // tags userInput = targetIndex.getOneBased() + TAG_DESC_GOOD; - descriptor = new EditStudentDescriptorBuilder().withTags(VALID_TAG_GOOD).build(); + descriptor = new EditStudentDescriptorBuilder().withTag(VALID_TAG_GOOD).build(); expectedCommand = new EditCommand(targetIndex, descriptor); assertParseSuccess(parser, userInput, expectedCommand); } @@ -133,7 +142,13 @@ public void parse_oneFieldSpecified_success() { @Test public void parse_multipleRepeatedFields_failure() { Index targetIndex = INDEX_FIRST_STUDENT; - String userInput; + String userInput = targetIndex.getOneBased() + EMAIL_DESC_AMY + INVALID_EMAIL_DESC; + assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL)); + + // invalid followed by valid + userInput = targetIndex.getOneBased() + INVALID_NAME_DESC + NAME_DESC_AMY; + + assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME)); // multiple valid fields repeated userInput = targetIndex.getOneBased() + EMAIL_DESC_AMY @@ -143,9 +158,10 @@ public void parse_multipleRepeatedFields_failure() { Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL, PREFIX_TAG)); // multiple invalid values - userInput = targetIndex.getOneBased() + INVALID_TAG_DESC + INVALID_EMAIL_DESC - + INVALID_TAG_DESC + INVALID_EMAIL_DESC; + userInput = targetIndex.getOneBased() + INVALID_EMAIL_DESC + INVALID_NAME_DESC + + INVALID_NAME_DESC + INVALID_EMAIL_DESC; + assertParseFailure(parser, userInput, - Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL, PREFIX_TAG)); + Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME, PREFIX_EMAIL)); } } diff --git a/src/test/java/seedu/address/storage/JsonAdaptedStudentTest.java b/src/test/java/seedu/address/storage/JsonAdaptedStudentTest.java index f61205b96bc..2ea1c1e0b17 100644 --- a/src/test/java/seedu/address/storage/JsonAdaptedStudentTest.java +++ b/src/test/java/seedu/address/storage/JsonAdaptedStudentTest.java @@ -12,6 +12,7 @@ import org.junit.jupiter.api.Test; import seedu.address.commons.exceptions.IllegalValueException; +import seedu.address.logic.parser.exceptions.*; import seedu.address.model.course.Course; import seedu.address.model.person.Email; import seedu.address.model.person.Name; @@ -20,13 +21,13 @@ public class JsonAdaptedStudentTest { private static final String INVALID_NAME = "R@chel"; private static final String INVALID_EMAIL = "example.com"; - private static final String INVALID_TAG = "#friend"; + private static final String INVALID_TAG = "not good"; private static final String VALID_NAME = BENSON.getName().toString(); private static final String VALID_EMAIL = BENSON.getEmail().toString(); private static final String VALID_REMARK = BENSON.getRemark().toString(); private static final String VALID_PENDING_QUESTION = BENSON.getPendingQuestion().toString(); - private static final Tag VALID_TAGS = BENSON.getTag(); + private static final Tag VALID_TAG = BENSON.getTag(); @Test @@ -39,7 +40,7 @@ public void toModelType_validPersonDetails_returnsPerson() throws Exception { public void toModelType_invalidName_throwsIllegalValueException() { JsonAdaptedStudent student = new JsonAdaptedStudent(INVALID_NAME, VALID_EMAIL, - VALID_REMARK, VALID_PENDING_QUESTION, VALID_TAGS.getRanking()); + VALID_REMARK, VALID_PENDING_QUESTION, VALID_TAG.getRanking()); String expectedMessage = Name.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, student::toModelType); } @@ -47,7 +48,7 @@ public void toModelType_invalidName_throwsIllegalValueException() { @Test public void toModelType_nullName_throwsIllegalValueException() { JsonAdaptedStudent student = new JsonAdaptedStudent(null, VALID_EMAIL, - VALID_REMARK, VALID_PENDING_QUESTION, VALID_TAGS.getRanking()); + VALID_REMARK, VALID_PENDING_QUESTION, VALID_TAG.getRanking()); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, student::toModelType); @@ -57,7 +58,7 @@ public void toModelType_nullName_throwsIllegalValueException() { public void toModelType_invalidEmail_throwsIllegalValueException() { JsonAdaptedStudent student = new JsonAdaptedStudent(VALID_NAME, INVALID_EMAIL, VALID_REMARK, VALID_PENDING_QUESTION, - VALID_TAGS.getRanking()); + VALID_TAG.getRanking()); String expectedMessage = Email.MESSAGE_CONSTRAINTS; assertThrows(IllegalValueException.class, expectedMessage, student::toModelType); @@ -66,20 +67,19 @@ public void toModelType_invalidEmail_throwsIllegalValueException() { @Test public void toModelType_nullEmail_throwsIllegalValueException() { JsonAdaptedStudent student = new JsonAdaptedStudent(VALID_NAME, null, VALID_REMARK, VALID_PENDING_QUESTION, - VALID_TAGS.getRanking()); + VALID_TAG.getRanking()); String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()); assertThrows(IllegalValueException.class, expectedMessage, student::toModelType); } @Test - public void toModelType_invalidTags_throwsIllegalValueException() throws IllegalValueException { - JsonAdaptedTag invalidTags = new JsonAdaptedTag(VALID_TAGS); - JsonAdaptedStudent student = - new JsonAdaptedStudent(VALID_NAME, VALID_EMAIL, VALID_REMARK, VALID_PENDING_QUESTION, - invalidTags.toModelType().getRanking()); + public void toModelType_nullTag_throwsIllegalValueException() { - assertThrows(IllegalValueException.class, student::toModelType); - } + JsonAdaptedStudent student = new JsonAdaptedStudent(VALID_NAME, VALID_EMAIL, VALID_REMARK, + VALID_PENDING_QUESTION, null); + String expectedMessage = String.format(MISSING_FIELD_MESSAGE_FORMAT, Tag.class.getSimpleName()); + assertThrows(IllegalValueException.class, expectedMessage, student::toModelType); + } } diff --git a/src/test/java/seedu/address/storage/JsonSerializableCourseListTest.java b/src/test/java/seedu/address/storage/JsonSerializableCourseListTest.java index 90f019d4c43..3760dd5fe34 100644 --- a/src/test/java/seedu/address/storage/JsonSerializableCourseListTest.java +++ b/src/test/java/seedu/address/storage/JsonSerializableCourseListTest.java @@ -18,7 +18,7 @@ public class JsonSerializableCourseListTest { private static final Path TEST_DATA_FOLDER = Paths.get("src", "test", "data", "JsonSerializableCourseListTest"); private static final Path TYPICAL_COURSE_FILE = TEST_DATA_FOLDER.resolve("typicalCoursesCourseList.json"); private static final Path INVALID_COURSE_FILE = TEST_DATA_FOLDER.resolve("invalidCourseCourseList.json"); - private static final Path DUPLICATE_COURSE_FILE = TEST_DATA_FOLDER.resolve("duplicateCoursesCourseList.json"); + private static final Path DUPLICATE_COURSE_FILE = TEST_DATA_FOLDER.resolve("duplicateCourseCourseList.json"); @Test public void toModelType_typicalCourseFile_success() throws Exception { @@ -40,7 +40,7 @@ public void toModelType_invalidCourseFile_throwsIllegalValueException() throws E public void toModelType_duplicateCourses_throwsIllegalValueException() throws Exception { JsonSerializableCourseList dataFromFile = JsonUtil.readJsonFile(DUPLICATE_COURSE_FILE, JsonSerializableCourseList.class).get(); - assertThrows(IllegalValueException.class, JsonSerializableCourseList.MESSAGE_DUPLICATE_PERSON, + assertThrows(IllegalValueException.class, JsonSerializableCourseList.MESSAGE_DUPLICATE_COURSE, dataFromFile::toModelType); } diff --git a/src/test/java/seedu/address/testutil/CourseBuilder.java b/src/test/java/seedu/address/testutil/CourseBuilder.java index 769313f8ffd..761bf071674 100644 --- a/src/test/java/seedu/address/testutil/CourseBuilder.java +++ b/src/test/java/seedu/address/testutil/CourseBuilder.java @@ -43,9 +43,7 @@ public CourseBuilder() { */ public CourseBuilder(Course courseToCopy) { courseName = courseToCopy.getCourseName(); - for (Student student : courseToCopy.getStudentList()) { - students.add(student); - } + students = courseToCopy.getStudentList(); } /** diff --git a/src/test/java/seedu/address/testutil/EditStudentDescriptorBuilder.java b/src/test/java/seedu/address/testutil/EditStudentDescriptorBuilder.java index 19ae8f14113..29ccef2afa1 100644 --- a/src/test/java/seedu/address/testutil/EditStudentDescriptorBuilder.java +++ b/src/test/java/seedu/address/testutil/EditStudentDescriptorBuilder.java @@ -77,7 +77,7 @@ public EditStudentDescriptorBuilder withPendingQuestion(String pendingQuestion) * Parses the {@code tag} into a {@code Tag} and set it to the {@code EditPersonDescriptor} * that we are building. */ - public EditStudentDescriptorBuilder withTags(StudentRank studentRank) { + public EditStudentDescriptorBuilder withTag(StudentRank studentRank) { Tag tag = new Tag(studentRank); descriptor.setTag(tag); return this; diff --git a/src/test/java/seedu/address/testutil/StudentBuilder.java b/src/test/java/seedu/address/testutil/StudentBuilder.java index ce4bafa257b..bd670a3c2b9 100644 --- a/src/test/java/seedu/address/testutil/StudentBuilder.java +++ b/src/test/java/seedu/address/testutil/StudentBuilder.java @@ -19,6 +19,8 @@ public class StudentBuilder { public static final String DEFAULT_NAME = "Amy Bee"; public static final String DEFAULT_EMAIL = "e1234567@u.nus.edu"; + public static final String DEFAULT_REMARK = "some remark"; + public static final String DEFAULT_PENDING_QUESTION = "some pending question?"; public static final StudentRank DEFAULT_STUDENT_RANK = StudentRank.GOOD; private Name name; @@ -33,8 +35,8 @@ public class StudentBuilder { public StudentBuilder() { name = new Name(DEFAULT_NAME); email = new Email(DEFAULT_EMAIL); - remark = new Remark(""); - pendingQuestion = new PendingQuestion(""); + remark = new Remark(DEFAULT_REMARK); + pendingQuestion = new PendingQuestion(DEFAULT_PENDING_QUESTION); tag = new Tag(DEFAULT_STUDENT_RANK); }