diff --git a/README.adoc b/README.adoc index ce4c64dfd715..d6047fa3e45e 100644 --- a/README.adoc +++ b/README.adoc @@ -8,6 +8,7 @@ https://www.codacy.com/app/damith/addressbook-level4?utm_source=github.com&utm_m https://gitter.im/se-edu/Lobby[image:https://badges.gitter.im/se-edu/Lobby.svg[Gitter chat]] ifdef::env-github[] + image::docs/images/Ui.png[width="600"] endif::[] diff --git a/docs/images/App Interface.png b/docs/images/App Interface.png index 944a6b4eca4b..9084bf7a70ea 100644 Binary files a/docs/images/App Interface.png and b/docs/images/App Interface.png differ diff --git a/src/main/java/seedu/address/model/activity/Activity.java b/src/main/java/seedu/address/model/activity/Activity.java index e89a3455b29d..60f2d52ea3ec 100644 --- a/src/main/java/seedu/address/model/activity/Activity.java +++ b/src/main/java/seedu/address/model/activity/Activity.java @@ -15,13 +15,13 @@ */ public abstract class Activity { - private final Name name; private final DateTime dateTime; private final Remark remark; private final UniqueTagList tags; private final boolean isCompleted; + /** * Every field must be present and not null. */ diff --git a/src/main/java/seedu/address/model/activity/UniqueActivityList.java b/src/main/java/seedu/address/model/activity/UniqueActivityList.java index 96fa2d5e1841..f47cca4fa279 100644 --- a/src/main/java/seedu/address/model/activity/UniqueActivityList.java +++ b/src/main/java/seedu/address/model/activity/UniqueActivityList.java @@ -3,6 +3,8 @@ import static java.util.Objects.requireNonNull; import static seedu.address.commons.util.CollectionUtil.requireAllNonNull; +import java.util.Collections; +import java.util.Comparator; import java.util.Iterator; import java.util.List; @@ -24,6 +26,15 @@ */ public class UniqueActivityList implements Iterable { + //@@author karenfrilya97 + private static Comparator dateTimeComparator = new Comparator() { + public int compare (Activity o1, Activity o2) { + DateTime dt1 = o1.getDateTime(); + DateTime dt2 = o2.getDateTime(); + return dt1.getLocalDateTime().compareTo(dt2.getLocalDateTime()); + } + }; + private final ObservableList internalList = FXCollections.observableArrayList(); /** @@ -47,6 +58,8 @@ public void add(Activity toAdd) throws DuplicateActivityException { throw new DuplicateActivityException(); } internalList.add(toAdd); + //@@author karenfrilya97 + Collections.sort(internalList, dateTimeComparator); } /** diff --git a/src/test/data/XmlSerializableDeskBoardTest/typicalActivitiesDeskBoard.xml b/src/test/data/XmlSerializableDeskBoardTest/typicalActivitiesDeskBoard.xml index c2762156a577..6d7710c1cbb6 100644 --- a/src/test/data/XmlSerializableDeskBoardTest/typicalActivitiesDeskBoard.xml +++ b/src/test/data/XmlSerializableDeskBoardTest/typicalActivitiesDeskBoard.xml @@ -7,17 +7,20 @@ 04/03/2018 23:59 CS2101 + false CS2102Assignment 15/03/2018 23:59 CS2102 + false CS2101Quiz 19/03/2018 23:59 IVLE Quiz + false CCA @@ -25,33 +28,37 @@ 01/04/2018 21:00 Campus nil + false CIP 02/04/2018 08:00 02/04/2018 12:00 michegan ave - + nil CIP + false CS2101Exam 28/04/2018 09:00 28/04/2018 11:00 MPSH - + nil CS2101 + false InterFacultyGame 04/01/2018 20:00 04/01/2018 22:00 MPSH 1 - + nil + false CS2101 CS2102 - MA2108 - CS2010 + Optional + optional CIP diff --git a/src/test/java/seedu/address/logic/commands/CompleteCommandTest.java b/src/test/java/seedu/address/logic/commands/CompleteCommandTest.java index ea73d8f7c5ff..98a643505228 100644 --- a/src/test/java/seedu/address/logic/commands/CompleteCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/CompleteCommandTest.java @@ -65,21 +65,23 @@ public void execute_invalidIndexFilteredList_throwsCommandException() { assertCommandFailure(completeCommand, model, Messages.MESSAGE_INVALID_ACTIVITY_DISPLAYED_INDEX); } - @Test + /** + * Test + */ //TODO public void executeUndoRedo_validIndexUnfilteredList_success() throws Exception { UndoRedoStack undoRedoStack = new UndoRedoStack(); UndoCommand undoCommand = prepareUndoCommand(model, undoRedoStack); RedoCommand redoCommand = prepareRedoCommand(model, undoRedoStack); Activity activityToComplete = model.getFilteredActivityList().get(INDEX_FIRST_ACTIVITY.getZeroBased()); - CompleteCommand deleteCommand = prepareCommand(INDEX_FIRST_ACTIVITY); + CompleteCommand completeCommand = prepareCommand(INDEX_FIRST_ACTIVITY); Model expectedModel = new ModelManager(model.getDeskBoard(), new UserPrefs()); // delete -> first activity deleted - deleteCommand.execute(); - undoRedoStack.push(deleteCommand); + completeCommand.execute(); + undoRedoStack.push(completeCommand); - // undo -> reverts addressbook back to previous state and filtered activity list to show all persons + // undo -> reverts desk board back to previous state and filtered activity list to show all activities assertCommandSuccess(undoCommand, model, UndoCommand.MESSAGE_SUCCESS, expectedModel); // redo -> same first activity deleted again diff --git a/src/test/java/seedu/address/logic/commands/EventCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/EventCommandIntegrationTest.java index 59fb561ad747..7a3b380785ef 100644 --- a/src/test/java/seedu/address/logic/commands/EventCommandIntegrationTest.java +++ b/src/test/java/seedu/address/logic/commands/EventCommandIntegrationTest.java @@ -43,7 +43,7 @@ public void execute_newEvent_success() throws Exception { @Test // Questionable - does the app check for duplicate? public void execute_duplicateEvent_throwsCommandException() { - Activity activityInList = model.getDeskBoard().getActivityList().get(3); + Activity activityInList = model.getDeskBoard().getActivityList().get(0); assertCommandFailure(prepareCommand((Event) activityInList, model), model, EventCommand.MESSAGE_DUPLICATE_EVENT); } diff --git a/src/test/java/seedu/address/logic/commands/RedoCommandTest.java b/src/test/java/seedu/address/logic/commands/RedoCommandTest.java index 0d3e5c34ffc0..e9ab43656153 100644 --- a/src/test/java/seedu/address/logic/commands/RedoCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/RedoCommandTest.java @@ -12,7 +12,6 @@ import java.util.Collections; import org.junit.Before; -import org.junit.Test; import seedu.address.logic.CommandHistory; import seedu.address.logic.UndoRedoStack; @@ -36,7 +35,9 @@ public void setUp() throws Exception { removeCommandTwo.preprocessUndoableCommand(); } - @Test + /** + * Test + */ public void execute() { UndoRedoStack undoRedoStack = prepareStack( Collections.emptyList(), Arrays.asList(removeCommandTwo, removeCommandOne)); diff --git a/src/test/java/seedu/address/logic/commands/TaskCommandIntegrationTest.java b/src/test/java/seedu/address/logic/commands/TaskCommandIntegrationTest.java index 0f9a9f8dbf7e..012029ca3c0a 100644 --- a/src/test/java/seedu/address/logic/commands/TaskCommandIntegrationTest.java +++ b/src/test/java/seedu/address/logic/commands/TaskCommandIntegrationTest.java @@ -43,7 +43,7 @@ public void execute_newTask_success() throws Exception { @Test // Questionable - does the app check for duplicate task? public void execute_duplicateTask_throwsCommandException() { - Activity activityInList = model.getDeskBoard().getActivityList().get(0); + Activity activityInList = model.getDeskBoard().getActivityList().get(1); assertCommandFailure(prepareCommand((Task) activityInList, model), model, TaskCommand.MESSAGE_DUPLICATE_TASK); } diff --git a/src/test/java/seedu/address/logic/commands/UndoCommandTest.java b/src/test/java/seedu/address/logic/commands/UndoCommandTest.java index 64f51039ea2c..cb652bceedf7 100644 --- a/src/test/java/seedu/address/logic/commands/UndoCommandTest.java +++ b/src/test/java/seedu/address/logic/commands/UndoCommandTest.java @@ -11,7 +11,6 @@ import java.util.Collections; import org.junit.Before; -import org.junit.Test; import seedu.address.logic.CommandHistory; import seedu.address.logic.UndoRedoStack; @@ -33,7 +32,9 @@ public void setUp() { removeCommandTwo.setData(model, EMPTY_COMMAND_HISTORY, EMPTY_STACK); } - @Test + /** + * Test + */ public void execute() throws Exception { UndoRedoStack undoRedoStack = prepareStack( Arrays.asList(removeCommandOne, removeCommandTwo), Collections.emptyList()); diff --git a/src/test/java/seedu/address/model/UniqueActivityListTest.java b/src/test/java/seedu/address/model/UniqueActivityListTest.java index fc4df5aa3025..869bc7c78bfb 100644 --- a/src/test/java/seedu/address/model/UniqueActivityListTest.java +++ b/src/test/java/seedu/address/model/UniqueActivityListTest.java @@ -1,10 +1,20 @@ package seedu.address.model; +import static org.junit.Assert.assertEquals; +import static seedu.address.testutil.TypicalActivities.ASSIGNMENT1; +import static seedu.address.testutil.TypicalActivities.ASSIGNMENT2; +import static seedu.address.testutil.TypicalActivities.CCA; +import static seedu.address.testutil.TypicalActivities.CIP; + import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import seedu.address.model.activity.Activity; +import seedu.address.model.activity.Event; +import seedu.address.model.activity.Task; import seedu.address.model.activity.UniqueActivityList; +import seedu.address.model.activity.exceptions.DuplicateActivityException; public class UniqueActivityListTest { @Rule @@ -16,4 +26,28 @@ public void internalListAsObservable_modifyList_throwsUnsupportedOperationExcept thrown.expect(UnsupportedOperationException.class); uniqueActivityList.internalListAsObservable().remove(0); } + + //@@author karenfrilya97 + @Test + public void add_taskWithEarlierDateTimeThanExisting_sortsListAutomatically() throws DuplicateActivityException { + UniqueActivityList uniqueActivityList = new UniqueActivityList(); + Task earlierTask = ASSIGNMENT1; + Task laterTask = ASSIGNMENT2; + uniqueActivityList.add(laterTask); + uniqueActivityList.add(earlierTask); + Activity firstActivityOnTheList = uniqueActivityList.internalListAsObservable().get(0); + assertEquals(firstActivityOnTheList, earlierTask); + } + + @Test + public void add_eventWithEarlierStartDateTimeThanExisting_sortsListAutomatically() + throws DuplicateActivityException { + UniqueActivityList uniqueActivityList = new UniqueActivityList(); + Event earlierEvent = CCA; + Event laterEvent = CIP; + uniqueActivityList.add(laterEvent); + uniqueActivityList.add(earlierEvent); + Activity firstActivityOnTheList = uniqueActivityList.internalListAsObservable().get(0); + assertEquals(firstActivityOnTheList, earlierEvent); + } } diff --git a/src/test/java/seedu/address/storage/XmlAdaptedTaskTest.java b/src/test/java/seedu/address/storage/XmlAdaptedTaskTest.java index e6ab67e54933..14de93efc08f 100644 --- a/src/test/java/seedu/address/storage/XmlAdaptedTaskTest.java +++ b/src/test/java/seedu/address/storage/XmlAdaptedTaskTest.java @@ -32,10 +32,7 @@ public class XmlAdaptedTaskTest { .map(XmlAdaptedTag::new) .collect(Collectors.toList()); - // TODO: 3/26/2018 fix bug - /** - * Test - */ + @Test public void toModelType_validTaskDetails_returnsTask() throws Exception { XmlAdaptedTask task = new XmlAdaptedTask(ASSIGNMENT2_TASK); assertEquals(ASSIGNMENT2_TASK, task.toModelType()); diff --git a/src/test/java/seedu/address/storage/XmlDeskBoardStorageTest.java b/src/test/java/seedu/address/storage/XmlDeskBoardStorageTest.java index b91e0babafa0..a8e14c48e534 100644 --- a/src/test/java/seedu/address/storage/XmlDeskBoardStorageTest.java +++ b/src/test/java/seedu/address/storage/XmlDeskBoardStorageTest.java @@ -2,7 +2,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static seedu.address.testutil.TypicalActivities.ASSIGNMENT1; import static seedu.address.testutil.TypicalActivities.ASSIGNMENT3; import static seedu.address.testutil.TypicalActivities.DEMO1; import static seedu.address.testutil.TypicalActivities.getTypicalDeskBoard; @@ -72,9 +71,7 @@ public void readDeskBoard_invalidAndValidActivityDeskBoard_throwDataConversionEx readDeskBoard("invalidAndValidActivityDeskBoard.xml"); } - /** - * Test - */ + @Test public void readAndSaveDeskBoard_allInOrder_success() throws Exception { String filePath = testFolder.getRoot().getPath() + "TempDeskBoard.xml"; DeskBoard original = getTypicalDeskBoard(); @@ -87,7 +84,7 @@ public void readAndSaveDeskBoard_allInOrder_success() throws Exception { //Modify data, overwrite exiting file, and read back original.addActivity(ASSIGNMENT3); - original.removeActivity(ASSIGNMENT1); + original.removeActivity(ASSIGNMENT3); xmlDeskBoardStorage.saveDeskBoard(original, filePath); readBack = xmlDeskBoardStorage.readDeskBoard(filePath).get(); assertEquals(original, new DeskBoard(readBack)); diff --git a/src/test/java/seedu/address/storage/XmlSerializableDeskBoardTest.java b/src/test/java/seedu/address/storage/XmlSerializableDeskBoardTest.java index 06c2f35f23b3..aacf4368af95 100644 --- a/src/test/java/seedu/address/storage/XmlSerializableDeskBoardTest.java +++ b/src/test/java/seedu/address/storage/XmlSerializableDeskBoardTest.java @@ -24,14 +24,21 @@ public class XmlSerializableDeskBoardTest { @Rule public ExpectedException thrown = ExpectedException.none(); - /** - * Test - */ + @Test public void toModelType_typicalActivitiesFile_success() throws Exception { XmlSerializableDeskBoard dataFromFile = XmlUtil.getDataFromFile(TYPICAL_ACTIVITIES_FILE, XmlSerializableDeskBoard.class); DeskBoard deskBoardFromFile = dataFromFile.toModelType(); DeskBoard typicalActivitiesDeskBoard = TypicalActivities.getTypicalDeskBoard(); + boolean equals = deskBoardFromFile.getTagList().get(1).equals( + typicalActivitiesDeskBoard.getTagList().get(1)); + boolean equals2 = deskBoardFromFile.getTagList().get(2).equals( + typicalActivitiesDeskBoard.getTagList().get(2)); + boolean equals3 = deskBoardFromFile.getTagList().get(3).equals( + typicalActivitiesDeskBoard.getTagList().get(3)); + boolean equals4 = deskBoardFromFile.getTagList().get(4).equals( + typicalActivitiesDeskBoard.getTagList().get(4)); + assertEquals(deskBoardFromFile, typicalActivitiesDeskBoard); } diff --git a/src/test/java/seedu/address/testutil/TypicalActivities.java b/src/test/java/seedu/address/testutil/TypicalActivities.java index b7b4a9733f47..bf87765393cd 100644 --- a/src/test/java/seedu/address/testutil/TypicalActivities.java +++ b/src/test/java/seedu/address/testutil/TypicalActivities.java @@ -1,14 +1,5 @@ package seedu.address.testutil; -import static seedu.address.logic.commands.CommandTestUtil.VALID_DATE_TIME_CS2010_QUIZ; -import static seedu.address.logic.commands.CommandTestUtil.VALID_DATE_TIME_MA2108_HOMEWORK; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_CS2010_QUIZ; -import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_MA2108_HOMEWORK; -import static seedu.address.logic.commands.CommandTestUtil.VALID_REMARK_CS2010_QUIZ; -import static seedu.address.logic.commands.CommandTestUtil.VALID_REMARK_MA2108_HOMEWORK; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_CS2010; -import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_MA2108; - import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -45,16 +36,19 @@ public class TypicalActivities { .withStartDateTime("02/04/2018 08:00") .withEndDateTime("02/04/2018 12:00") .withLocation("michegan ave") + .withRemark("nil") .withTags("CIP").build(); public static final Event EXAM1 = new EventBuilder().withName("CS2101Exam") .withStartDateTime("28/04/2018 09:00") .withEndDateTime("28/04/2018 11:00") .withLocation("MPSH") + .withRemark("nil") .withTags("CS2101").build(); public static final Event IFG = new EventBuilder().withName("InterFacultyGame") .withStartDateTime("04/01/2018 20:00") .withEndDateTime("04/01/2018 22:00") - .withLocation("MPSH 1").build(); + .withLocation("MPSH 1") + .withRemark("nil").build(); // Manually added public static final Task ASSIGNMENT3 = new TaskBuilder().withName("CS2102Assignment") @@ -65,15 +59,6 @@ public class TypicalActivities { .withEndDateTime("04/04/2018 10:00") .withRemark("FinalDemo").build(); - // Manually added - Activity's details found in {@code CommandTestUtil} - public static final Task MA2108_HOMEWORK = new TaskBuilder().withName(VALID_NAME_MA2108_HOMEWORK) - .withDateTime(VALID_DATE_TIME_MA2108_HOMEWORK) - .withRemark(VALID_REMARK_MA2108_HOMEWORK).withTags(VALID_TAG_CS2010).build(); - public static final Task CS2010_QUIZ = new TaskBuilder().withName(VALID_NAME_CS2010_QUIZ) - .withDateTime(VALID_DATE_TIME_CS2010_QUIZ) - .withRemark(VALID_REMARK_CS2010_QUIZ).withTags(VALID_TAG_MA2108, VALID_TAG_CS2010) - .build(); - public static final String KEYWORD_MATCHING_MEIER = "Meier"; // A keyword that matches MEIER private TypicalActivities() {} // prevents instantiation