From 2a1e767ecfa45bfeef50c83cbb65363da2baeedf Mon Sep 17 00:00:00 2001 From: Respirayson Date: Mon, 13 Nov 2023 19:49:11 +0800 Subject: [PATCH 1/6] Add add task to appendix --- docs/DeveloperGuide.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 9e5ac5ab146..850ece05a93 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1058,18 +1058,13 @@ testers are expected to do more *exploratory* testing. 1. Download the jar file and copy into an empty folder - 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum. - -1. Saving window preferences - - 1. Resize the window to an optimum size. Move the window to a different location. Close the window. - - 1. Re-launch the app by double-clicking the jar file.
- Expected: The most recent window size and location is retained. + 2. Double-click the jar file Expected: Shows the GUI with a set of sample data. The window size will be maximised. 1. _{ more test cases …​ }_ -### Deleting a person +### Students + +#### Deleting a student 1. Deleting a person while all persons are being shown @@ -1086,6 +1081,22 @@ testers are expected to do more *exploratory* testing. 1. _{ more test cases …​ }_ + +### Task + +#### Adding a task + +1. Adding a task with _valid parameters_ + 1. Prerequisites: + 1. There is no other task with the same name and description. + 2. Test case: `addtask tn/Prepare Lecture slides d/30/09/2023 tp/high`
+ Expected: Task is added. + +2. Adding a task with _incorrect name_ + 1. Test case: `addtask tn/Prepare Lecture slides d/30/09/2023 tp/high`
+ Expected: Task is added. + + ### Saving data 1. Dealing with missing/corrupted data files From f0e837c8ad9e8330565f6e8b36a74cb08176fce2 Mon Sep 17 00:00:00 2001 From: Respirayson Date: Mon, 13 Nov 2023 20:08:45 +0800 Subject: [PATCH 2/6] Add more manual testcases for add task into DG --- docs/DeveloperGuide.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 850ece05a93..55843ae96f0 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1089,13 +1089,24 @@ testers are expected to do more *exploratory* testing. 1. Adding a task with _valid parameters_ 1. Prerequisites: 1. There is no other task with the same name and description. - 2. Test case: `addtask tn/Prepare Lecture slides d/30/09/2023 tp/high`
+ 2. Test case: `addtask tn/finish up user guide td/please by tonight d/14/11/2023 tp/high`
Expected: Task is added. -2. Adding a task with _incorrect name_ - 1. Test case: `addtask tn/Prepare Lecture slides d/30/09/2023 tp/high`
- Expected: Task is added. +2. Adding a task with _invalid name_ + 1. Test case: `addtask tn/--`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error. Task is not added.
Reason: Name should only consist of alphanumeric characters. +3. Adding a task with _invalid description_ + 1. Test case: `addtask tn/do up developer guide td/the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error. Task is not added.
Reason: Description should be less than 100 characters. + +4. Adding a task with _invalid date_ + 1. Test case: `addtask tn/test number 4 td/test number 4 please work d/29/02/2023`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error. Task is not added.
Reason: Date should be a valid date that exists in the calendar. + +5. Adding a task with _invalid priority_ + 1. Test case: `addtask tn/test number 5 td/test number 5 please work d/27/02/2023 tp/asdasdsa`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error. Task is not added.
Reason: Priority should only be `HIGH`, `MEDIUM`, or `LOW`. ### Saving data From 2b7f91877ce048355bba96e6c0adfead60754c07 Mon Sep 17 00:00:00 2001 From: Respirayson Date: Mon, 13 Nov 2023 20:47:21 +0800 Subject: [PATCH 3/6] Add viewing tasks section in appendix of dg --- docs/DeveloperGuide.md | 54 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 55843ae96f0..b60f2d70d3c 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1084,7 +1084,7 @@ testers are expected to do more *exploratory* testing. ### Task -#### Adding a task +#### Adding tasks 1. Adding a task with _valid parameters_ 1. Prerequisites: @@ -1108,6 +1108,58 @@ testers are expected to do more *exploratory* testing. 1. Test case: `addtask tn/test number 5 td/test number 5 please work d/27/02/2023 tp/asdasdsa`
Expected: F.A.K.E.J.A.R.V.I.S. displays an error. Task is not added.
Reason: Priority should only be `HIGH`, `MEDIUM`, or `LOW`. + + +#### Viewing tasks + +1. Listing all tasks with _no filters_ + 1. Prerequisites: + 1. There are multiple tasks in the task list which have been added using the `AddTask` command. + 2. Test case: `viewtasks`
+ Expected: Displays all the tasks in the task list. + +2. Listing tasks filtered using _date filter_ + 1. Prerequisites: + 1. There are tasks that have the date `22/10/2023`. + 2. Test case: `viewtasks d/22/10/2023`
+ Expected: Displays all the tasks in the task list that have the date `22/10/2023`. + +3. Listing tasks filtered using _name filter_ + 1. Prerequisites: + 1. There are tasks that have the keywords `user guide` in the Task Name. + 2. Test case: `viewtasks tn/user guide`
+ Expected: Displays all the tasks in the task list that have `user guide` in the Task Name. + +4. Listing tasks filtered using _description filter_ + 1. Prerequisites: + 1. There are tasks that have the keywords `homework` in the Task Description. + 2. Test case: `viewtasks td/homework`
+ Expected: Displays all the tasks in the task list that have `homework` in the Task Description. + +5. Listing tasks filtered using _priority filter_ + 1. Prerequisites: + 1. There are tasks that have `HIGH` priority. + 2. Test case: `viewtasks tp/high`
+ Expected: Displays all the tasks in the task list that have `HIGH` priority. + +6. Listing tasks filtered using _progress filter_ + 1. Prerequisites: + 1. There are tasks that have `PENDING` progress. + 2. Test case: `viewtasks tprog/pending`
+ Expected: Displays all the tasks in the task list that have `PENDING` progress. + +7. Listing all tasks with no tasks in the task list + 1. Prerequisites: + 1. There are no tasks in the task list. + 2. Test case: `viewtasks tprog/pending`
+ Expected: No tasks will be shown. + +8. Listing all tasks with _invalid parameters_ + 1. Test case: `viewtasks tprog/asdasdasd` + Expected: F.A.K.E.J.A.R.V.I.S. displays an error.
Reason: Progress should only be `NOT_STARTED`, `PENDING`, or `DONE`. Furthermore, the constraints of the parameters detailed in `AddTask` also apply here. + + + ### Saving data 1. Dealing with missing/corrupted data files From 8612fa357e3ab2ce552fbcb7fc59eb4c3f7bfcc9 Mon Sep 17 00:00:00 2001 From: Respirayson Date: Mon, 13 Nov 2023 23:01:49 +0800 Subject: [PATCH 4/6] Add deletetask and updateprogress manual testing to DG --- docs/DeveloperGuide.md | 86 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 96477164b5c..993a043f486 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -1279,25 +1279,103 @@ testers are expected to do more *exploratory* testing. 5. Listing tasks filtered using _priority filter_ 1. Prerequisites: 1. There are tasks that have `HIGH` priority. - 2. Test case: `viewtasks tp/high`
+ 2. Test case: `viewtasks tp/HIGH`
Expected: Displays all the tasks in the task list that have `HIGH` priority. 6. Listing tasks filtered using _progress filter_ 1. Prerequisites: 1. There are tasks that have `PENDING` progress. - 2. Test case: `viewtasks tprog/pending`
+ 2. Test case: `viewtasks tprog/PENDING`
Expected: Displays all the tasks in the task list that have `PENDING` progress. 7. Listing all tasks with no tasks in the task list 1. Prerequisites: 1. There are no tasks in the task list. - 2. Test case: `viewtasks tprog/pending`
+ 2. Test case: `viewtasks tprog/PENDING`
Expected: No tasks will be shown. 8. Listing all tasks with _invalid parameters_ 1. Test case: `viewtasks tprog/asdasdasd` Expected: F.A.K.E.J.A.R.V.I.S. displays an error.
Reason: Progress should only be `NOT_STARTED`, `PENDING`, or `DONE`. Furthermore, the constraints of the parameters detailed in `AddTask` also apply here. - + + +#### Updating progress of tasks + +1. Updating progress of a task as _pending_ + 1. Prerequisites: + 1. There is at least one task in the task list currently shown. + 2. Test case: `updateprogress 1 tprog/PENDING`
+ Expected: Updates the task's progress to `PENDING`. + +2. Updating progress of a task as _not_started_ + 1. Prerequisites: + 1. There is at least one task in the task list currently shown. + 2. Test case: `updateprogress 1 tprog/NOT_STARTED`
+ Expected: Updates the task's progress to `NOT_STARTED`. + +3. Updating progress of a task as _done_ + 1. Prerequisites: + 1. There is at least one task in the task list currently shown. + 2. Test case: `updateprogress 1 tprog/DONE`
+ Expected: Updates the task's progress to `DONE`. + +4. Updating progress of a task as an _invalid parameter_ + 1. Prerequisites: + 1. There is at least one task in the task list currently shown. + 2. Test case: `updateprogress 1 tprog/asdasdasdsad`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error. Progress is not updated.
Reason: Progress should only be `NOT_STARTED`, `PENDING`, or `DONE`. + +5. Updating progress of a task with a non-integer index. + 1. Test case: `updateprogress abcd tprog/DONE`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid command format. Progress is not updated.
Reason: Index must be a positive integer. + +6. Updating progress of a task with a negative index. + 1. Prerequisite: + 1. There is at least one task in the task list currently shown. + 2. Test case: `updateprogress -1 tprog/DONE`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid command format. Progress is not updated.
Reason: Index must be an integer. + +7. Updating progress of a task with an out-of-bounds index. + 1. Prerequisite: + 1. There is at least one task in the task list currently shown. For this test, assume there are `X` number of tasks in the task list. + 2. Test case: `updateprogress [X + 1] tprog/DONE`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid index. Progress is not updated.
Reason: Index must be within the range of the size of the task list. + +8. Updating progress of a task without an index. + 1. Test case: `updateprogress tprog/DONE`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid command format. Progress is not updated.
Reason: Index must not be blank. + + +#### Deleting a task + +1. Deleting the first task currently shown in the task list. + 1. Prerequisite: + 1. There is at least one task in the task list currently shown. + 2. Test case: `deletetask 1`
+ Expected: First task is deleted. + +2. Deleting the task with a non-integer index. + 1. Prerequisite: + 1. There is at least one task in the task list currently shown. + 2. Test case: `deletetask wasd`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid command format. Task is not deleted.
Reason: Index must be an integer. + +3. Deleting the task with an out-of-bounds index. + 1. Prerequisite: + 1. There is at least one task in the task list currently shown. For this test, assume there are `X` number of tasks in the task list. + 2. Test case: `deletetask [X + 1]`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid index. Task is not deleted.
Reason: Index must be within the range of the size of the task list. + +4. Deleting the task with a negative index. + 1. Prerequisite: + 1. There is at least one task in the task list currently shown. + 2. Test case: `deletetask -1`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid command format. Task is not deleted.
Reason: Index must be a positive integer. + +5. Deleting the task without an index. + 1. Test case: `deletetask`
+ Expected: F.A.K.E.J.A.R.V.I.S. displays an error invalid command format. Task is not deleted.
Reason: Index must not be blank. + ### Saving data From 5a823c66d05fe22e03ef189f71a8bdb0af9e38d2 Mon Sep 17 00:00:00 2001 From: Respirayson Date: Tue, 14 Nov 2023 03:29:44 +0800 Subject: [PATCH 5/6] Update Model UML Diagram --- docs/DeveloperGuide.md | 4 +- docs/diagrams/ModelClassDiagram.puml | 59 ++++++++-------------------- 2 files changed, 18 insertions(+), 45 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 993a043f486..f40b819325f 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -117,12 +117,12 @@ How the parsing works: ### Model component **API** : [`Model.java`](https://github.com/AY2324S1-CS2103T-T15-1/tp/tree/master/src/main/java/seedu/address/model/Model.java) - + The `Model` component, -* stores the F.A.K.E.J.A.R.V.I.S. data i.e., all `Person`, `Task`, `Session`, `GradedTest` and `Consultation` objects (which are contained in a `UniquePersonList`, `TaskList`, `SessionList`, `GradedTestList` and `ConsultationList` objects respectively). +* stores the F.A.K.E.J.A.R.V.I.S. data i.e., all `Person`, `Task`, `Session`, `GradedTest` and `Consultation` objects (which are contained in a `UniquePersonList`, `TaskList`, `SessionList`, `GradedTestList` and `ConsultationList` object respectively. The `XYZ` here is used as a placeholder to denote the Components that handle `Person`, `Session` and `Consultation`). * stores the currently 'selected' `Person`, `Task`, `Session`, `GradedTest` and `Consultation` objects (e.g., results of a search query) as separate _filtered_ lists which are exposed to outsiders as unmodifiable `ObservableList` that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change. * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` object. * does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components) diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index 6646225727f..b171f96e195 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -5,22 +5,17 @@ skinparam arrowColor MODEL_COLOR skinparam classBackgroundColor MODEL_COLOR Package Model as ModelPackage <>{ -Class "<>\nReadOnlyAddressBook" as ReadOnlyAddressBook Class "<>\nReadOnlyTaskList" as ReadOnlyTaskList Class "<>\nReadOnlyGradedTestList" as ReadOnlyGradedTestList -Class "<>\nReadOnlyConsultationList" as ReadOnlyConsultationList -Class "<>\nReadOnlySessionList" as ReadOnlySessionList +Class "<>\nReadOnlyXYZList" as ReadOnlyXYZList Class "<>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs Class "<>\nModel" as Model -Class AddressBook Class TaskListBook -Class SessionListBook -Class ConsultationListBook +Class XYZListBook Class GradedTestListBook Class ModelManager Class UserPrefs -Class UniquePersonList Class Person Class TelegramHandle Class Email @@ -32,11 +27,8 @@ Class GradedTest Class TaskList Class Task -Class ConsultationList -Class Consultation - -Class SessionList -Class Session +Class XYZList +Class XYZ Class GradedTestList Class GradedTest @@ -46,38 +38,26 @@ Class AssignmentMap Class I #FFFFFF Class J #FFFFFF Class K #FFFFFF -Class S #FFFFFF -Class T #FFFFFF } Class HiddenOutside #FFFFFF HiddenOutside ..> Model -AddressBook .up.|> ReadOnlyAddressBook TaskListBook .up.|> ReadOnlyTaskList GradedTestListBook .up.|> ReadOnlyGradedTestList -SessionListBook .up.|> ReadOnlySessionList -ConsultationListBook .up.|> ReadOnlyConsultationList +XYZListBook .up.|> ReadOnlyXYZList ModelManager .up.|> Model Model .right.> ReadOnlyUserPrefs -Model .left.> ReadOnlyAddressBook Model .left.> ReadOnlyTaskList Model .left.> ReadOnlyGradedTestList -Model .left.> ReadOnlySessionList -Model .left.> ReadOnlyConsultationList -ModelManager -left-> "1" AddressBook +Model .left.> ReadOnlyXYZList ModelManager -down-> "1" TaskListBook ModelManager -down-> "1" GradedTestListBook -ModelManager -down-> "1" ConsultationListBook -ModelManager -down-> "1" SessionListBook +ModelManager -down-> "1" XYZListBook ModelManager -right-> "1" UserPrefs UserPrefs .up.|> ReadOnlyUserPrefs -AddressBook *--> "1" UniquePersonList -UniquePersonList --> "~* all" Person -Person -[hidden]up--> I -UniquePersonList -[hidden]right-> I Person *--> Name Person *--> Phone @@ -90,25 +70,19 @@ Person *--> AssignmentMap TaskListBook *--> "1" TaskList TaskList --> "~* all" Task -Task -[hidden]up--> T -TaskList -[hidden]right-> T +Task -[hidden]up--> J +TaskList -[hidden]right-> J GradedTestListBook *--> "1" GradedTestList GradedTestList --> "~* all" GradedTest GradedTest -[hidden]up--> K -GradedTestList -[hidden]right-> J - -ConsultationListBook *--> "1" ConsultationList -ConsultationList --> "~* all" Consultation -Consultation --> "*" Person -Consultation -[hidden]up--> K -ConsultationList -[hidden]right-> J +GradedTestList -[hidden]right-> K -SessionListBook *--> "1" SessionList -SessionList --> "~* all" Session -Session --> "*" Person -Session -[hidden]up--> S -SessionList -[hidden]right-> K +XYZListBook *--> "1" XYZList +XYZList --> "~* all" XYZ +XYZ --> "*" Person +XYZ -[hidden]up--> I +XYZList -[hidden]right-> I Name -[hidden]right-> Phone Phone -[hidden]right-> TelegramHandle @@ -116,7 +90,6 @@ TelegramHandle -[hidden]right-> Email ModelManager --> "~* filtered" Person ModelManager --> "~* filtered" Task -ModelManager --> "~* filtered" Session +ModelManager --> "~* filtered" XYZ ModelManager --> "~* filtered" GradedTest -ModelManager --> "~* filtered" Consultation @enduml From e3939d10e9c5b9b7aeff48064cddd3c4e27daccc Mon Sep 17 00:00:00 2001 From: Respirayson Date: Tue, 14 Nov 2023 04:03:42 +0800 Subject: [PATCH 6/6] Update Storage section in DG --- docs/DeveloperGuide.md | 2 +- docs/diagrams/ModelClassDiagram.puml | 10 +++-- docs/diagrams/StorageClassDiagram.puml | 52 +++++++++++++++++++++----- 3 files changed, 51 insertions(+), 13 deletions(-) diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index f40b819325f..6d0fe30dbfd 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -136,7 +136,7 @@ The `Model` component, The `Storage` component, -* can save both F.A.K.E.J.A.R.V.I.S. data and user preference data in JSON format, and read them back into corresponding objects. +* can save both F.A.K.E.J.A.R.V.I.S. data and user preference data in JSON format, and read them back into corresponding objects. (`XYZ` is a placeholder that denotes `ConsultationList`, `AddressBook` and `SessionList`) * inherits from `AddressBookStorage`, `ConsultationListStorage`, `GradedTestListStorage`, `SessionListStorage`, `TaskListStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed). * depends on some classes in the `Model` component (because the `Storage` component's job is to save/retrieve objects that belong to the `Model`) * contains data that is separated into distinct files, each catering to specific functionalities, which minimises the impact of potential corruption. Corruption in one set of data does not propagate to others, reinforcing the integrity of the data. diff --git a/docs/diagrams/ModelClassDiagram.puml b/docs/diagrams/ModelClassDiagram.puml index b171f96e195..040ce2c5c1f 100644 --- a/docs/diagrams/ModelClassDiagram.puml +++ b/docs/diagrams/ModelClassDiagram.puml @@ -12,6 +12,10 @@ Class "<>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs Class "<>\nModel" as Model Class TaskListBook Class XYZListBook +note right + XYZ denotes Consultation, + Person and Session +end note Class GradedTestListBook Class ModelManager Class UserPrefs @@ -75,13 +79,13 @@ TaskList -[hidden]right-> J GradedTestListBook *--> "1" GradedTestList GradedTestList --> "~* all" GradedTest -GradedTest -[hidden]up--> K -GradedTestList -[hidden]right-> K +GradedTest -[hidden]up--> I +GradedTestList -[hidden]right-> I XYZListBook *--> "1" XYZList XYZList --> "~* all" XYZ XYZ --> "*" Person -XYZ -[hidden]up--> I +XYZ -[hidden]up--> K XYZList -[hidden]right-> I Name -[hidden]right-> Phone diff --git a/docs/diagrams/StorageClassDiagram.puml b/docs/diagrams/StorageClassDiagram.puml index a821e06458c..2f80de04dab 100644 --- a/docs/diagrams/StorageClassDiagram.puml +++ b/docs/diagrams/StorageClassDiagram.puml @@ -14,12 +14,33 @@ Class JsonUserPrefsStorage Class "<>\nStorage" as Storage Class StorageManager -package "AddressBook Storage" #F4F6F6{ -Class "<>\nAddressBookStorage" as AddressBookStorage -Class JsonAddressBookStorage -Class JsonSerializableAddressBook +package "XYZ Storage" #F4F6F6{ +Class "<>\nXYZStorage" as XYZStorage +note right + XYZ denotes AddressBook, + ConsultationList and + SessionList +end note +Class JsonXYZStorage +Class JsonSerializableXYZ Class JsonAdaptedPerson Class JsonAdaptedTag +Class JsonAdaptedAssignment +Class JsonAdaptedAssignmentMap +} + +package "TaskList Storage" #F4F6F6{ +Class "<>\nTaskListStorage" as TaskListStorage +Class JsonTaskListStorage +Class JsonSerializableTaskList +Class JsonAdaptedTask +} + +package "GradedTestList Storage" #F4F6F6{ +Class "<>\nGradedTestListStorage" as GradedTestListStorage +Class JsonGradedTestListStorage +Class JsonSerializableGradedTestList +Class JsonAdaptedGradedTest } } @@ -29,15 +50,28 @@ HiddenOutside ..> Storage StorageManager .up.|> Storage StorageManager -up-> "1" UserPrefsStorage -StorageManager -up-> "1" AddressBookStorage +StorageManager -up-> "1" XYZStorage +StorageManager -down-> "1" TaskListStorage +StorageManager -down-> "1" GradedTestListStorage Storage -left-|> UserPrefsStorage -Storage -right-|> AddressBookStorage +Storage -right-|> XYZStorage JsonUserPrefsStorage .up.|> UserPrefsStorage -JsonAddressBookStorage .up.|> AddressBookStorage -JsonAddressBookStorage ..> JsonSerializableAddressBook -JsonSerializableAddressBook --> "*" JsonAdaptedPerson +JsonXYZStorage .up.|> XYZStorage +JsonTaskListStorage .up.|> TaskListStorage +JsonGradedTestListStorage .up.|> GradedTestListStorage + +JsonXYZStorage ..> JsonSerializableXYZ +JsonSerializableXYZ --> "*" JsonAdaptedPerson +JsonTaskListStorage ..> JsonSerializableTaskList +JsonSerializableTaskList --> "*" JsonAdaptedTask +JsonGradedTestListStorage ..> JsonSerializableGradedTestList +JsonSerializableGradedTestList --> "*" JsonAdaptedGradedTest + JsonAdaptedPerson --> "*" JsonAdaptedTag +JsonAdaptedPerson --> "1" JsonAdaptedAssignmentMap +JsonAdaptedPerson --> "*" JsonAdaptedGradedTest +JsonAdaptedAssignmentMap --> "*" JsonAdaptedAssignment @enduml