PROJECT: Naggy Joel


Overview

Naggy Joel is a desktop application used by University students to manage social life. The user interacts with it using a CLI, and it has a GUI created with JavaFX.

It is an application that allows users to manage all aspects of their social life, ranging from your different social circles and contacts, to events, all without compromising on academic life.

Summary of contributions

Major enhancement:

  • Added the ability to add/edit/delete note commands for each contact

    • What it does: Allows the user to add multiple notes, edit the added notes, or delete the added notes.

    • Justification: This feature improves the product significantly because a user can add in additional information to a contact that they wish to remember/ is deemed important.

    • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives.

    • Credits: {reused the original RemarkCommand}

  • Added the ability to add/edit/delete note commands for each restaurant

    • What it does: Allows the user to add multiple notes, edit the added notes, or delete the added notes.

    • Justification: This feature improves the product significantly because a user can add additional information to a restaurant in order to keep track of the dishes' reviews.

    • Highlights: Each restaurant has 3 food notes that can be added, edited, or deleted. Multiple addition/deletion of notes require a detailed validity check of the command since the inputs are dependent.

    • Credits: {referenced from RemarkCommand}

  • Added the ability to retrieve a single particular contact.

    • What it does: This allows the user to view the information of a particular contact in full detail.

    • Justification: As we added in more fields to a person in the Address Book, we cut down the information displayed on the Address Book list command. Thus, this command allows the user to view the rest of the information.

    • Highlights:

      • This enhancement requires the understanding of how the filtering of the Address Book contacts are done, and to display it on the application.

      • Independent filtering is required. To retrieve a single contact information on a third display panel, the filtering of the Address Book contacts should not affect the original contact list on the second panel.

Minor enhancement:

  • Added the ability to sort assignments

    • What it does: This allows the user to sort the assignments by deadline or estimated number of hours to be completed, or by the assignment’s title in alphabetical order.

    • Justification: As our application allows user to keep track of the assignments that they have to complete, providing a sorting feature allows for prioritisation of assignments based on the criteria (deadline/time needed) the user prefers.

    • Highlights: Uncompleted assignments, assignments with the most recent deadline and take a longer time to complete will be listed first.

  • Ensure that the filtered search results remains after editing of contacts/restaurants

    • What it does: After a user enters (ab)find or (rt)find and wish to edit information of the contacts/restaurants in this search result, the filtered search result will still remain on the second panel even with the edits.

    • Justification: This helps to complement the commands and allows the user to have the option to return to the full list of contacts/remain the filtered search results after any edits.

  • Code contributed: [Summary of code contributions]

  • Other contributions:

    • Project management:

    • Enhancements to existing features:

      • Edited the help command to display all commands on the user interface.

      • Edited the GUI of the application (Pull requests #53, #142, #175)

      • Wrote additional tests for existing features to increase coverage (Pull requests #46)

    • Documentation:

      • Contributed to the User Guide and Developer Guide of this project

    • Community:

      • Reported bugs and suggestions for other teams in the module (PED)

    • Team-based Contributions:

      • Reviewed PRs, provided suggestions for my teammates and comments to improve/clarify (Reviews)

      • Created PRs for approvals (Pull requests)

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Store additional information about contacts using the Note Taker: (ab)addnote

Store additional information about contacts using the Note Taker
Format: (ab)addnote INDEX i/INFO…​

  • INDEX must be a positive integer. It refers to the index of the respective contact as shown in the displayed person list.

  • There should be at least one i/INFO specified.

Example:

  • (ab)addnote 1 i/Like to swim i/Likes cheese
    Adds the notes 'Like to swim' and 'Likes cheese' to the first person in the displayed person list.

Edit additional information about contacts : (ab)editnote

Edit additional information about contacts using the Note Taker
Format: (ab)editnote INDEX l/LINE_NUMBER i/INFO

  • INDEX must be a positive integer. It refers to the index of the respective contact as displayed in the LIST function.

  • l/LINE_NUMBER Line number of information to be replaced.

  • Only one information can be edited each time.

Example:

  • (ab)editnote 1 l/5 i/Likes having fun
    Replaces the 5th note of the 1st person to 'Likes having fun'.

Delete additional information about contacts : (ab)deletenote

Delete additional information about contacts using the Note Taker
Format: (ab)deletenote INDEX l/LINE_NUMBER…​

  • INDEX must be a positive integer. It refers to the index of the respective contact as displayed in the LIST function.

  • l/LINE_NUMBER Line number of information to be deleted

Example:

  • (ab)deletenote 1 l/4 l/5
    Deletes the 4th and 5th note from the first person.

Add notes to a restaurant : (rt)addnote

Adds a new note to a restaurant
Format: (rt)addnote INDEX [r/RECOMMENDED_FOOD]…​ [g/GOOD_FOOD]…​ [b/BAD_FOOD] …​

  • INDEX must be a positive integer. It refers to the index of the respective restaurant as displayed in the LIST function.

  • There should be at least either one r/RECOMMENDED_FOOD, one g/GOOD_FOOD, or one b/BAD_FOOD specified.

Examples:

  • (rt)addnote 5 r/chicken chop g/truffle fries b/risotto
    Add notes to the restaurant at index 5 with recommended food Chicken Chop, good food Truffle Fries, and bad food Risotto.

  • (rt)addnote 2 g/Cheese baked rice
    Adds a note to the restaurant at index 2 with good food Cheese baked rice.

  • (rt)addnote 1 b/Fried rice b/Latte
    Add notes to the restaurant at index 1 with bad food Fried rice and Latte.

Edit notes to a restaurant : (rt)editnote

Edits a note to a restaurant
Format: (rt)editnote INDEX [rl/LINE_NUMBER] [r/RECOMMENDED_FOOD] [gl/LINE_NUMBER] [g/GOOD_FOOD] [bl/BAD_FOOD] [b/BAD_FOOD]

  • INDEX must be a positive integer. It refers to the index of the respective restaurant as displayed in the LIST function.

  • There should be at least either one r/RECOMMENDED_FOOD, one g/GOOD_FOOD, or one b/BAD_FOOD specified to be edited.

  • For each of the food notes, at most one can be edited each time.

  • Line number for the respective food notes to be edited should be present.

Examples:

  • (rt)editnote 1 rl/2 r/Lobster pasta gl/1 g/Mushroom soup bl/3 b/Salad
    Edit notes to the restaurant at index 1 with recommend food Lobster pasta at line number 2, good food Mushroom soup at line number 1, and bad food Salad at line number 3.

  • (rt)editnote 2 gl/2 g/Chicken chop
    Edits note to the restaurant at index 2 with good food Chicken chop.

Delete notes to a restaurant : (rt)deletenote

Deletes a note to a restaurant
Format: (rt)deletenote INDEX [rl/LINE_NUMBER1]…​ [gl/LINE_NUMBER]…​ [bl/BAD_FOOD]…​

  • INDEX must be a positive integer. It refers to the index of the respective restaurant as displayed in the LIST function.

  • There should be at least either one rl/LINE_NUMBER, one gl/LINE_NUMBER, or one bl/LINE_NUMBER specified to be deleted from the respective notes.

Examples:

  • (rt)deletenote 1 rl/2 gl/1 bl/3
    Delete notes to the restaurant at index 1, at line number 2 of recommended food notes, at line number 1 of good food notes, at line number 3 of bad food notes.

  • (rt)deletenote 2 gl/1 gl/2
    Deletes a note to the restaurant at index 2, at line numbers 1 and 2 of good food notes.

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

(Kwan Xin Jie: 3.3, 3.4, 3.5)

Detailed Contact Viewer

Implementation

The detailed contact viewer is facilitated by AddressBook. This feature allows a user to view a particular contact details in entirety.

Given below is an example usage scenario and how the get mechanism behaves at each step.

Step 1. The user launches the application for the first time. The AddressBook will be initialized with the initial state, which is an empty list.

Step 2. The user executes the (ab)add n/David p/12345 …​ command to add a new person.

Step 3. The user executes the (ab)get 1 command to get the detailed contact of the first person in the AddressBook list.

detailedContact

The following sequence diagram shows how the get operation works within the Logic component:

getCommand

Design Considerations

Aspect: What information to display
  • Alternative 1 (current choice): Set a limit on details that has a potential long list (such as NoteTaker) and display them on the detailed contact viewer.

    • Pros: All information are displayed for easier viewing/access.

    • Cons: AddressBook list might be long and hard to view.

  • Alternative 2: Display selective information on the AddressBook list and the full information under get command.

    • Pros: AddressBook list is less cluttered.

    • Cons: Omits certain information.

Sorting of Assignments

Implementation

The sorting of assignments is facilitated by AssignmentList. This feature allows a user to sort assignments by deadline or estimated completion time.

Given below is an example usage scenario and how the sort mechanism behaves at each step.

Step 1. The user launches the application for the first time. The 'AssignmentList' will be initialized with the initial state, which is an empty list.

Step 2. The user executes the following commands to add new assignments.

  • 1. (st)add t/CS2103 Project d/2020-04-18 23:59 e/180

  • 2. (st)add t/DBA3702 Project d/2020-04-19 19:00 e/150

  • 3. (st)add t/CS2106 Lab d/2020-04-11 20:00 e/20

Step 3. The user executes the (st)list -d command to sort the assignments by deadline.

The following sequence diagram shows how the list assignment operation works within the Logic component:

listAssgnCommand

Design Considerations

Aspect: How to sort assignment by estimated completion time
  • Alternative 1 (Current choice): Descending order

    • Pros: User can prioritise by doing the assignment which takes the longer first.

    • Cons: User may spend too much time on assignments that take much longer.

  • Alternative 2: Ascending order

    • Pros: User can clear more assignments faster, by completing those that takes a shorter amount of time first.

    • Cons: User may delay starting on assignments that take longer and risk having uncompleted assignments at the deadline.

Editing of Restaurant Notes

Implementation

The editing of restaurant notes is facilitated by RestaurantBook. This feature allows a user to edit existing notes of a restaurant in the list.

Given below is an example usage scenario and how the editing of note mechanism behaves at each step.

Step 1: The user launches the application for the first time. The RestaurantBook will be initialized with the initial state, which is an empty list.

Step 2: The user executes the following commands to add notes to a restaurant.

  • 1. (rt)add n/Ameens l/Clementi v/No o/0900:2300 p/$ c/Indian

  • 2. (rt)addnote r/Cheese fries

Step 3: The user executes the (rt)editnote 1 rl/1 r/Butter chicken command to edit the first recommended food of the restaurant at index 1, to Butter chicken.

The following sequence diagram shows how the edit restaurant note operation works within the Logic component.

addRestNote

Design Considerations

Aspect: How to execute the command for edit note, given 3 editable notes for a restaurant.
  • Alternative 1 (chosen): Have one command that allows user to choose any note to edit.

    • Pros: Easy for user to use, without switching between different commands.

    • Cons: As line number of the relevant note needs to be indicated, many levels of checking of the user input is required, and is thus more prone to errors.

  • Alternative 2: Have 3 separate edit commands, one for each restaurant’s note.

    • Pros: Easier to implement.

    • Cons: Not user-friendly since different notes cannot be edited in a single command.

Adding a person

  1. Test case: (ab)add n/John p/12345 o/NUS n/05-20
    Expected: A new contact with the name John, phone number 12345, and birthday 20 May is added to the list. Details of the added contact shown in the status message.

Deleting a person

  1. Deleting a person while all persons are listed

    1. Prerequisites: List all persons using the (ab)list command. Multiple persons in the list.

    2. Test case: (ab)delete 1
      Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message.

    3. Test case: (ab)delete 0
      Expected: No person is deleted. Error details shown in the status message.

    4. Other incorrect delete commands to try: (ab)delete, (ab)delete x (where x is larger than the list size)
      Expected: Similar to previous.

  2. Deleting a person while finding contacts that meet certain criteria

    1. Prerequisites: List subset of contacts using the (ab)find command. Persons who meet the criteria are listed.

    2. Test case: (ab)delete x (where x is larger than the filtered list size but smaller than the size of the full contact list)
      Expected: No person is deleted. Error details shown in the status message.

Editing a person

  1. Editing a person while all persons listed

    1. Prerequisites: List all persons using the (ab)list command. Multiple persons in the list.

    2. Test case: (ab)edit 2 t/BFF -t/Friends
      Expected: Second contact in the list is edited, with tag "Friends" deleted, and tag "BFF" added. Details of the edited contact shown in the status message.

  2. Editing a person while finding contacts that meet certain criteria

    1. Prerequisites: List subset of contacts using the (ab)find command. Persons who meet the criteria are listed.

    2. Test case: (ab)edit x b/06-22 (where x is larger than the filtered list size but smaller than the size of the full contact list)
      Expected: No person is edited. Error details shown in the status message.

Adding additional information to a person

  1. Adds note(s) to a person while all persons listed

    1. Prerequisites: List all persons using the (ab)list command. Multiple persons in the list.

    2. Test case: (ab)addnote 2 i/Likes red i/Lives in Jurong i/Cycles
      Expected: Second contact in the list has 3 new notes, "Likes red", "Lives in Jurong" and "Cycles", added. Details of the edited contact shown in the status message.

  2. Add note(s) to a person while finding contacts that meet certain criteria

    1. Prerequisites: List subset of contacts using the (ab)find command. Persons who meet the criteria are listed.

    2. Test case: (ab)addnote x i/Can’t take spicy (where x is larger than the filtered list size but smaller than the size of the full contact list)
      Expected: No new note is added to a person. Error details shown in the status message.

Editing additional information for a person

  1. Editing an existing note of person while all persons listed

    1. Prerequisites: List all persons using the (ab)list command. Multiple persons in the list.

    2. Test case: (ab)editnote 2 l/2 i/Likes matcha
      Expected: Edits the second note of the second contact in the list to "Likes matcha". Details of the edited contact shown in the status message.

    3. Test case: (ab)editnote x i/Likes red (where x is larger than the number of existing notes of a person)
      Expected: No note is edited for the person. Error details shown in the status message.

    4. Other incorrect commands to try: (ab)editnote 2 l/aaa i/Likes cats (where line number is not an integer)
      Expected: Similar to previous

  2. Editing an existing note of a person while finding contacts that meet certain criteria

    1. Prerequisites: List subset of contacts using the (ab)find command. Persons who meet the criteria are listed.

    2. Test case: (ab)editnote x l/3 i/Can’t take spicy (where x is larger than the filtered list size but smaller than the size of the full contact list)
      Expected: No note is edited for a person. Error details shown in the status message.

Deleting additional information of a person

  1. Delete note(s) of a person while all persons listed

    1. Prerequisites: List all persons using the (ab)list command. Multiple persons in the list.

    2. Test case: (ab)deletenote 2 l/1 l/3
      Expected: Deletes the first and third note of the second contact in the list. Details of the edited contact shown in the status message.

    3. Test case: (ab)deletenote 2 l/x (where x is larger than the number of existing notes of a person)
      Expected: No note is deleted for the person. Error details shown in the status message.

    4. Other incorrect commands to try: (ab)deletenote 2 l/2 l/aaa (where line number is not an integer)
      Expected: Similar to previous

  2. Editing a person while finding contacts that meet certain criteria

    1. Prerequisites: List subset of contacts using the (ab)find command. Persons who meet the criteria are listed.

    2. Test case: (ab)deletenote x l/2 (where x is larger than the filtered list size but smaller than the size of the full contact list)
      Expected: No note is deleted for a person. Error details shown in the status message.

Finding a specific contact/specific set of contacts

  1. Finding person(s) by organization, name or tag.

    1. Test case: (ab)find o/NUS n/Lim
      Expected: If person(s) with the organization "NUS" and have the word "Lim" in the name, person(s) will be listed. The number of person listed shown in the status message.

Retrieving a specific contact and view in full details

  1. Retrieves a person contact while all persons listed

    1. Prerequisites: List all persons using the (ab)list command. Multiple persons in the list.

    2. Test case: (ab)get 2
      Expected: Display the second person in the full contact list. The number of person listed shown in the status message.

    3. Test case: (ab)get x (where x is larger than the number of contacts in the list)
      Expected: No detailed view of contact is displayed. Error details shown in the status message.

  2. Retrieves a person contact while finding contacts that meet certain criteria

    1. Prerequisites: List subset of contacts using the (ab)find command. Persons who meet the criteria are listed.

    2. Test case: (ab)get x (where x is larger than the filtered list size but smaller than the size of the full contact list)
      Expected: No detailed view of contact is displayed. Error details shown in the status message.

List contacts with upcoming birthdays

  1. All persons are listed

    1. (ab)birthday
      Expected: All contacts with birthdays in the next 5 days (current day included) should be listed.

Adding a restaurant

  1. Test case: (rt)add n/Ameens l/Clementi v/No o/0900:2300 p/$ c/Indian
    Expected: Adds a new restaurant called Ameens at Clementi with 1 dollar sign price point, opens from 9am to 11pm, with cuisine Indian and has yet to be visited.

List all restaurants saved

  1. (rt)list
    Expected: All restaurants added should be displayed.

Editing a restaurant

  1. Editing a restaurant while all restaurants are listed

    1. Prerequisites: List all restaurants using the (rt)list command. Multiple restaurants in the list.

    2. Test case: (rt)edit 1 v/Yes o/0900:2200
      Expected: Edits the first restaurant visited status to "Yes" and operating hours to "0900:2200".

  2. Editing a restaurant while finding restaurants that meet certain criteria

    1. Prerequisites: List subset of restaurants using the (rt)find command. Restaurants that meet the criteria are listed.

    2. Test case: (rt)edit x (where x is larger than the filtered list size but smaller than the size of the full restaurant list)
      Expected: No restaurant edited. Error details shown in the status message.

Deleting a restaurant

  1. Deletes a restaurant while all restaurants are listed

    1. Prerequisites: List all restaurants using the (rt)list command. Multiple restaurants in the list.

    2. Test case: (rt)delete 2
      Expected: Deletes the second restaurant in the restaurant list. Details of the deleted restaurant shown in the status message.

    3. Test case: (rt)delete x (where x is larger than the size of the restaurant list)
      Expected: No restaurant is deleted. Error details shown in the status message.

  2. Deleting a restaurant while finding restaurants that meet certain criteria

    1. Prerequisites: List subset of restaurants using the (rt)find command. Restaurants that meet the criteria are listed.

    2. Test case: (rt)delete x (where x is larger than the filtered list size but smaller than the size of the full restaurant list)
      Expected: No restaurant deleted. Error details shown in the status message.

Adding food note(s) to a restaurant

  1. Add food note(s) to a restaurant while all restaurants are listed

    1. Prerequisites: List all restaurants using the (rt)list command. Multiple restaurants in the list.

    2. Test case: (rt)addnote 1 r/Chicken Chop g/Truffle Fries b/Risotto b/Lobster Pasta
      Expected: Add notes to the restaurant at index 1 with recommended food Chicken Chop, good food Truffle Fries, and bad food Risotto and Lobster Pasta. Details of the edited restaurant shown in the status message.

Editing food note(s) of a restaurant

  1. Edit food note(s) to a restaurant while all restaurants are listed

    1. Prerequisites: List all restaurants using the (rt)list command. Multiple restaurants in the list.

    2. Test case: (rt)editnote 1 rl/1 r/Fish and Chip gl/1 g/Mushroom soup bl/2 b/Salad
      Expected: Edit notes to the restaurant at index 3 with recommend food Fish and Chip at line number 1, good food Mushroom soup at line number 1, and bad food Salad at line number 2. Details of the edited restaurant shown in the status message.

    3. Test case: (rt)editnote 2 rl/aaa r/Fried Rice gl/1 g/Tomato soup (Non-integer line number for recommended food notes)
      Expected: No restaurant’s food notes is edited. Error details shown in the status message.

Deleting food note(s) of a restaurant

  1. Delete food note(s) to a restaurant while all restaurants are listed

    1. Prerequisites: List all restaurants using the (rt)list command. Multiple restaurants in the list.

    2. Test case: (rt)deletenote 1 rl/1 gl/1 bl/2
      Expected: Delete notes to the restaurant at index 1, at line number 1 of recommended food notes, at line number 1 of good food notes, at line number 2 of bad food notes.

    3. Test case (rt)deletenote 1 rl/1 gl/x bl/aaa (where x is larger than the size of good food notes, and non-integer line number for bad food notes)
      Expected: No restaurant’s bad notes is edited. Error details shown in the status message.

Search for restaurants based on a number of criteria

  1. (rt)find l/Clementi
    Expected: Searches and display restaurants in the Clementi area. Number of restaurants displayed shown in the status message.

Adding an assignment

  1. Test case: (st)add t/CS2103 post lecture quiz d/2020-11-11 23:59 e/2
    Expected: Adds an assignment titled CS2103 post lecture quiz to the Schoolwork Tracker, due 11 Nov 2020 23:59 PM and which takes an estimated two hours to complete. Details of the added assignment shown in the status message.

  2. Test case: (st)add t/CS2105 lab d/DEADLINE e/5 (where DEADLINE is before the current date and time)
    Expected: No assignment is added. Error details shown in the status message.

List current assignments

  1. Test case: (st)list -d
    Expected: Assignments will be shown in chronological order, with respect to the deadline, with all completed assignments at the bottom of the list.

  2. Test case: (st)list -e
    Expected: Assignments will be shown according to the estimated completed time in descending order with all completed assignments at the bottom of the list.

  3. Test case: (st)list -d -e
    Expected: Assignments will not be sorted. Error details shown in the status message.

Deleting an assignment

  1. Deletes an assignment while all assignments are listed

    1. Prerequisites: List all assignments using the (st)list command. Multiple assignments in the list.

    2. Test case: (st)delete 1
      Expected: Deletes the first assignment in the Schoolwork Tracker. Details of the deleted assignment shown in the status message.

    3. Test case: (st)delete x (where x is larger than the size of Schoolwork Tracker)
      Expected: No assignment is deleted. Error details shown in the status message.

Editing an assignment

  1. Edits an assignment while all assignments are listed

    1. Prerequisites: List all assignments using the (st)list command. Multiple assignments in the list.

    2. Test case: (st)edit 1 t/CS2103 Quiz e/1
      Expected: Changes the title of the first assignment to 'CS2103 Quiz' and estimated completion time to 1 hour. Details of the edited assignment shown in the status message.

    3. Test case: (st)edit 1 s/Completed
      Expected: Marks the first assignment in the Schoolwork Tracker as completed. Details of the edited assignment shown in the status message.

    4. Test case: (st)edit 1 s/Uncompleted
      Expected: Marks the first assignment in the Schoolwork Tracker as uncompleted. Details of the edited assignment shown in the status message.

    5. Test case: (st)edit d/DEADLINE (where DEADLINE is before the current date and time)
      Expected: No assignment is edited. Error details shown in the status message.

    6. Other incorrect commands to try: (st)edit x (where x is larger than the size of Schoolwork Tracker)
      Expected: Same as above

Generating schedule

  1. Generates the user’s schedule

    1. Prerequisites: There are assignments added to the SchoolworkTracker

    2. Test case: (st)schedule n/5
      Expected: The user’s schedule for the next 5 days is displayed. For the query date, the total allocated hours should not exceed the amount of time remaining on query date. For each assignment, the amount of time allocated to the day it is due should not exceed the amount of time the user has on that day before the time of submission. For each assignment, the total amount of time scheduled and unscheduled should equals the estimated workload of that assignment.

    3. Test case: (st)schedule n/-1
      Expected: No schedule is displayed. Error details shown in the status message.

Adding a social event

  1. Test case: (ev)add t/Facebook job interview d/2020-05-18 10:00 h/3 p/Facebook APAC HQ
    Expected: Adds a new social event with title "Facebook job interview", event date 2020-05-18, duration of 3 hours and location at "Facebook APAC HQ".

  2. Test case: (ev)add t/Birthday party d/DATETIME h/3 p/Clementi (where DATETIME is after the current date and time)
    Expected: No social event is added. Error details shown in the status message.

Listing all events

  1. (ev)list
    Expected: List all added social events in the Event Schedule.

Editing a social event

  1. Edits a social event while all social events are listed

    1. Prerequisites: List all social events using the (ev)list command. Multiple social events in the list.

    2. Test case: (ev)edit 1 d/2020-04-09 11:00 h/2
      Expected: Edits the first event in the Event Schedule by changing the timing to 11AM on the 9th of April and the estimated duration to be 2 hours.

    3. Test case: (ev)edit d/DATETIME (where DATETIME is after the current date and time)
      Expected: No social event is edited. Error details shown in the status message.

Deleting a social event

  1. Deletes a social event while all social events are listed

    1. Prerequisites: List all social events using the (ev)list command. Multiple social events in the list.

    2. Test case: (ev)delete 1
      Expected: Deletes the first social event in the Event Schedule.

    3. Test case: (ev)delete x (where x is larger than the size of Event Schedule)
      Expected: No social event is deleted. Error details shown in the status message.