Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[CS2103T-W13-4] TutorPro #79

Open
wants to merge 579 commits into
base: master
Choose a base branch
from
Open
Changes from 13 commits
Commits
Show all changes
579 commits
Select commit Hold shift + click to select a range
588eb17
Merge branch 'master' into refactor-homework
Yufannnn Mar 30, 2023
f866c55
Refactor Homework Related Class
Yufannnn Mar 30, 2023
ebf6b82
Merge pull request #123 from Yufannnn/refactor-homework
NBQian Mar 30, 2023
e5f1c71
Merge branch 'master' into 30/03-UG,-done-value-update
NBQian Mar 30, 2023
12064df
Merge pull request #122 from NBQian/30/03-UG,-done-value-update
fahim-tazz Mar 30, 2023
b58876a
Merge pull request #26 from AY2223S2-CS2103T-W13-4/master
Yufannnn Mar 30, 2023
40781af
Update GUI section
Yufannnn Mar 30, 2023
891f03e
Merge branch 'master' into update-user-guide
Yufannnn Mar 30, 2023
ef57d61
Update UG
Yufannnn Mar 30, 2023
44eca33
Update UG GUI
Yufannnn Mar 30, 2023
c330392
Refactoring
Yufannnn Mar 30, 2023
7f20c71
Merge pull request #124 from Yufannnn/update-user-guide
szejiancheng Mar 30, 2023
d11e819
Merge pull request #27 from AY2223S2-CS2103T-W13-4/master
Yufannnn Mar 30, 2023
7b892b2
Merge branch 'master' of https://github.com/Yufannnn/tp
Yufannnn Mar 30, 2023
286811b
Add optional weightage and grade parameters to CreateExamCommand
szejiancheng Mar 30, 2023
f7c8598
Amended names of variables
szejiancheng Mar 30, 2023
a81d7a2
Added prefixes for weightage and grade
szejiancheng Mar 30, 2023
f57e073
Added functions for parsing grade and weightage
szejiancheng Mar 30, 2023
335c258
Amended CreateExamParser to accept optional weightage and grade params
szejiancheng Mar 30, 2023
83b0050
More amendments to class behaviour to support grade and weightage
szejiancheng Mar 30, 2023
1d4bd9a
Added dummy code to be amended
szejiancheng Mar 30, 2023
2881158
Merge branch 'branch-exam-enhancements'
szejiancheng Mar 30, 2023
4971ac5
Fixed Minor View Homework Issue
Yufannnn Mar 30, 2023
1706d6a
Fixed Minor UpdateHomeworkCommand
Yufannnn Mar 30, 2023
e31de3f
Update sample students' tags to reflect TutorPro tags.
Mar 30, 2023
4226a7e
Merge pull request #126 from fahim-tazz/update-sampleData
fahim-tazz Mar 30, 2023
e1447af
Fix bugs and unexpected behaviour in exam classes
szejiancheng Mar 31, 2023
d4ebc8c
Checkstyle fixes
szejiancheng Mar 31, 2023
fc39103
Merge pull request #125 from Yufannnn/fix-view-homework
szejiancheng Mar 31, 2023
a94efcb
fix exam testcase
szejiancheng Mar 31, 2023
3590687
Add view-profile command functionality
szejiancheng Mar 31, 2023
46f2561
amend testcase formatting
szejiancheng Mar 31, 2023
8aadb97
Merge pull request #127 from szejiancheng/master
Yufannnn Mar 31, 2023
f99d969
Merge pull request #128 from szejiancheng/branch-view-profile
Yufannnn Mar 31, 2023
1fb2fcb
Merge pull request #28 from AY2223S2-CS2103T-W13-4/master
Yufannnn Mar 31, 2023
408171a
Update UserGuide.md
Yufannnn Mar 31, 2023
e8aa7f3
Remove unimplemented command
szejiancheng Mar 31, 2023
47918eb
Merge pull request #129 from AY2223S2-CS2103T-W13-4/Yufannnn-update-u…
szejiancheng Mar 31, 2023
2a8c3dc
Merge branch 'master' into master
fahim-tazz Mar 31, 2023
f02777b
Merge pull request #130 from szejiancheng/master
fahim-tazz Mar 31, 2023
6f63201
Fix Bugs from PE
Yufannnn Apr 1, 2023
842a43a
Merge pull request #29 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 1, 2023
1eb4bfb
Merge branch 'master' of https://github.com/Yufannnn/tp
Yufannnn Apr 1, 2023
0a93a22
Fix Styling Issue
Yufannnn Apr 1, 2023
de09aec
fix wrong format for time for lessons in UG
Apr 1, 2023
491f182
Merge pull request #170 from Yufannnn/Yufan-PE-bug
szejiancheng Apr 1, 2023
fe4162f
Now the user cannot add a student whose name contains any existing st…
Apr 2, 2023
36c23d1
fixed bugs not fixed in the previous commit
Apr 2, 2023
8210ead
Merge branch 'master' into BOQIAN-PED-BUGS
NBQian Apr 2, 2023
7b5ce2f
Merge pull request #173 from NBQian/BOQIAN-PED-BUGS
Yufannnn Apr 3, 2023
44dddcc
Merge pull request #30 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 4, 2023
332a8cf
Fixes Confusing Listing index issue and Updates UserGuide
Yufannnn Apr 4, 2023
c3571c1
a lesson now cannot be added to a student if the tutor has another at…
Apr 5, 2023
8f48973
now cannot update the time of lesson to one that would result in time…
Apr 5, 2023
7ad1890
Merge pull request #174 from Yufannnn/lesson-exam-list-index
NBQian Apr 5, 2023
bf406ec
Change UG pdf file header from "AB-3" to "TutorPro"
Apr 5, 2023
9dda54f
Remove reference to "calculate-grade" command in UG.
Apr 5, 2023
982c2e9
Rename edit command to update-info
Apr 5, 2023
3290449
Fix tables formatting in UG.
Apr 5, 2023
08f90eb
Merge branch 'master' into PED-Fix-update-command
Apr 5, 2023
e5a5e67
Merge branch 'master' into PED-Fix-UG-bugs
Apr 5, 2023
7fb867c
Merge pull request #176 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 5, 2023
e0ea669
Attempt to fix UG table #2
Apr 5, 2023
021f091
Merge pull request #178 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 5, 2023
b209148
Fix outdated commands in UG, under `Commands` section.
Apr 5, 2023
b8ecbbd
Fixed hyperlink in Quick Start guide.
Apr 5, 2023
3942443
Merge pull request #179 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 5, 2023
5808897
Fix a logical error: when adding a lesson, we should only check if th…
Apr 5, 2023
b51057b
fix ped bug where commands consider names in a case-sensitive manner.
Apr 5, 2023
62f7037
Merge pull request #181 from NBQian/PED-Case-Sensitive-bugfix
Yufannnn Apr 6, 2023
230c0ca
Merge pull request #180 from NBQian/LWE-conflict-bug
Yufannnn Apr 6, 2023
1b5afba
Update Yufan PPP
Yufannnn Apr 6, 2023
b903485
now done/ can only be followed by either "done" or "not done". UG for…
Apr 6, 2023
2eb7455
Merge pull request #184 from NBQian/BQ-UGG
Yufannnn Apr 6, 2023
7da52ff
Merge pull request #31 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 6, 2023
7d5312f
Merge branch 'master' into Yufan-ppp
Yufannnn Apr 6, 2023
0ca700e
update PPP
Yufannnn Apr 6, 2023
1e741ab
Fix CheckStyle Issues
Yufannnn Apr 6, 2023
2fbae71
Update Search By Name Mechanism
Yufannnn Apr 6, 2023
de8e07f
Fixes TOC
Yufannnn Apr 6, 2023
839d899
Fixes Errors
Yufannnn Apr 7, 2023
6d84aa5
EDIT FIND DELETE now must be used with prefixes
Apr 7, 2023
9190c65
Merge pull request #185 from Yufannnn/Yufan-ppp
NBQian Apr 7, 2023
46ca5e6
Merge pull request #186 from Yufannnn/name-mechanism
NBQian Apr 7, 2023
5a425d5
Merge pull request #187 from NBQian/EDIT-DELETE-FIND-has-prefix
Yufannnn Apr 8, 2023
454bce6
fix the bug for lesson and exam where update does not throw error whe…
Apr 8, 2023
9dbdd91
Merge pull request #189 from NBQian/BUG-UPDATE-NON-EXIST
fahim-tazz Apr 8, 2023
fbbfe4a
Merge branch 'master' into PED-Fix-update-command
Apr 8, 2023
dc06bba
Change ```edit``` command to ```update-info```.
Apr 8, 2023
1d97577
Add delete command to UG.
Apr 8, 2023
dfccd3d
Update update-info command format in UG.
Apr 8, 2023
20ea45c
Fix examples for update-info command in UG.
Apr 8, 2023
2ab2ab1
Added View Profile command to UG.
Apr 8, 2023
d353392
Merge pull request #190 from fahim-tazz/PED-Fix-update-command
Yufannnn Apr 8, 2023
64b17ea
Merge pull request #32 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 8, 2023
8606507
Add screenshots to Profile Commands.
Apr 8, 2023
a758c72
Merge pull request #191 from fahim-tazz/PED-Fix-UG-bugs
Yufannnn Apr 8, 2023
738f34b
Update Structure
Yufannnn Apr 8, 2023
2fdcf5f
Merge pull request #33 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 8, 2023
45889ce
Merge branch 'master' into final-update-of-UG
Yufannnn Apr 8, 2023
ce49492
now if the user tries to add an exam to a student that clashes with t…
Apr 8, 2023
88e47da
huge update for UG
Yufannnn Apr 8, 2023
d878bff
Merge pull request #192 from NBQian/ADD-EXAM-LESSON-CLASH-MSG
Yufannnn Apr 8, 2023
1b24922
Fixed a bit date formating issue
Yufannnn Apr 8, 2023
cda0d64
Merge pull request #34 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 8, 2023
20e0000
Merge branch 'master' into final-update-of-UG
Yufannnn Apr 8, 2023
fd11d7d
fix emoji error
Yufannnn Apr 8, 2023
acfc621
Add changes to UG
szejiancheng Apr 8, 2023
90ad5c5
Merge pull request #193 from Yufannnn/final-update-of-UG
fahim-tazz Apr 8, 2023
8779b3d
Merge branch 'master' into UG-exam-changes
Yufannnn Apr 8, 2023
323f2d6
Merge pull request #194 from szejiancheng/UG-exam-changes
Yufannnn Apr 8, 2023
0d087ea
Merge pull request #35 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 8, 2023
5033c0f
fixes homework documentation issues
Yufannnn Apr 8, 2023
1b3dc12
Merge branch 'master' into final-update-of-UG
Yufannnn Apr 8, 2023
bf11399
Update respective part of the UG as well
Yufannnn Apr 8, 2023
0e5b1d5
Merge pull request #195 from Yufannnn/final-update-of-UG
NBQian Apr 8, 2023
58689e2
Create all necessary test classes
szejiancheng Apr 8, 2023
9696f24
no message
Apr 8, 2023
eb4f96e
Merge pull request #196 from NBQian/PPP-BQ
Yufannnn Apr 9, 2023
cea50b3
Update PPP
Yufannnn Apr 9, 2023
0a45531
Merge pull request #36 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 9, 2023
906e718
Merge branch 'master' into final-update-of-UG
Yufannnn Apr 9, 2023
6399d30
Change screenshot on landing page.
Apr 9, 2023
a0ba488
Update UML as well
Yufannnn Apr 9, 2023
75fb439
create Glossary section of DG. Update TOC for DG
Apr 9, 2023
f19494f
Merge pull request #198 from NBQian/DG-Glossary
Yufannnn Apr 9, 2023
e043814
Merge pull request #197 from Yufannnn/final-update-of-UG
NBQian Apr 9, 2023
f1924ba
Merge pull request #37 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 9, 2023
959a13a
Merge branch 'master' of https://github.com/Yufannnn/tp
Yufannnn Apr 9, 2023
b0f857e
Fixes major Storage Bug
Yufannnn Apr 9, 2023
0e1b723
Merge pull request #199 from Yufannnn/fix-storage-bug
NBQian Apr 9, 2023
3ad54bc
fix the bug where editing a student's info results in all his homewor…
Apr 9, 2023
c5fea3f
Merge pull request #200 from NBQian/EDIT-BUG-PPP
Yufannnn Apr 9, 2023
5794e88
Add testcases for JsonAdaptedExam
szejiancheng Apr 9, 2023
a73a3b3
Add JsonAdaptedLesson testcases
szejiancheng Apr 9, 2023
b3d9cd3
Add testcases for ExamDonePredicate
szejiancheng Apr 9, 2023
5350e5e
Add testcases for ExamDatePredicate
szejiancheng Apr 9, 2023
7d038ad
Add testcases for ExamPredicate
szejiancheng Apr 9, 2023
b81cf81
checkstyle changes
szejiancheng Apr 9, 2023
fd3bb98
more checkstyle fixes
szejiancheng Apr 9, 2023
f97fd7e
Merge pull request #202 from szejiancheng/branch-adding-testcases
Yufannnn Apr 10, 2023
b9c2af1
Merge pull request #38 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
4bdc830
Fixes DG bugs
Yufannnn Apr 10, 2023
39f989d
Update UG cosmetics as well
Yufannnn Apr 10, 2023
89873fa
Update UserGuide.md
Yufannnn Apr 10, 2023
fdb4e5f
Merge pull request #203 from Yufannnn/fix-DG-bug
szejiancheng Apr 10, 2023
b7dc3cb
now lessons can only be added to one student each time
Apr 10, 2023
061fd51
Merge branch 'master' into PED-Fix-UG-bugs
Apr 10, 2023
d7aeb8a
Fix Ui Bug
Yufannnn Apr 10, 2023
18f950e
Merge branch 'fix-DG-bug' of https://github.com/Yufannnn/tp into fix-…
Yufannnn Apr 10, 2023
64dcf7c
Finalize UG for submission.
Apr 10, 2023
11b3355
Fix Styling
Yufannnn Apr 10, 2023
1686fad
Update UML
Yufannnn Apr 10, 2023
8f544f8
Merge pull request #206 from Yufannnn/fix-DG-bug
NBQian Apr 10, 2023
39c8f39
Merge pull request #205 from NBQian/one-student-lesson
Yufannnn Apr 10, 2023
b682153
Merge pull request #207 from fahim-tazz/PED-Fix-UG-bugs
Yufannnn Apr 10, 2023
05814ac
fixed wrong representation for the sequence diagram of CreateLessonCo…
Apr 10, 2023
bc3146e
Add help list exit commands to Command Summary.
Apr 10, 2023
1b94dbd
Remove non-essential screenshots from UG.
Apr 10, 2023
6ec092a
Merge branch 'master' into PED-Fix-UG-bugs
Apr 10, 2023
5ceb757
Merge pull request #208 from NBQian/bq-dg-sq-diagram
Yufannnn Apr 10, 2023
76a5557
Merge pull request #39 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
c4253ae
Minor Change
Yufannnn Apr 10, 2023
f4a4671
Merge branch 'master' into fix-DG-bug
Yufannnn Apr 10, 2023
d7f16fd
Merge branch 'master' into PED-Fix-UG-bugs
Apr 10, 2023
1a79341
Add UG page breaks, attempt #1.
Apr 10, 2023
127c2a7
Merge pull request #209 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
8ea7238
Attempt 2 of adding page breaks.
Apr 10, 2023
97d65e6
Merge pull request #211 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
1120178
Merge pull request #40 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
121b269
Minor Update
Yufannnn Apr 10, 2023
837fe3e
Merge branch 'master' of https://github.com/Yufannnn/tp
Yufannnn Apr 10, 2023
84d7805
Merge branch 'master' into fix-DG-bug
Yufannnn Apr 10, 2023
b555bbe
Add Future Features
Yufannnn Apr 10, 2023
7ebb3e0
Merge pull request #212 from Yufannnn/fix-DG-bug
NBQian Apr 10, 2023
2c35d4c
Fix Minor Display Issues
Yufannnn Apr 10, 2023
8b663bc
Merge pull request #213 from AY2223S2-CS2103T-W13-4/Developer-Guide-D…
NBQian Apr 10, 2023
8096d8e
Merge pull request #41 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
54c74f8
Page break attempt 3
Apr 10, 2023
d09c8be
Merge pull request #214 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
335d81a
Merge pull request #42 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
1f1e095
Attempt 4 at fixing UG page breaks.
Apr 10, 2023
81d33b8
Merge pull request #215 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
873b158
Merge pull request #43 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
1f74aa1
Attempt 5 at UG page breaks.
Apr 10, 2023
ad7ecf7
Merge pull request #216 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
e62349e
Attempt 6 at UG page breaks.
Apr 10, 2023
a4aa1cb
Merge pull request #217 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
6e1a2b8
more test cases for Lesson
Apr 10, 2023
166c356
Attempt 8 at UG page breaks.
Apr 10, 2023
822476c
Merge pull request #219 from fahim-tazz/PED-Fix-UG-bugs
fahim-tazz Apr 10, 2023
901d69b
idk whats going on
Apr 10, 2023
134c65f
Merge pull request #218 from NBQian/bq-dg-sq-diagram
Yufannnn Apr 10, 2023
5f3742c
Merge pull request #44 from AY2223S2-CS2103T-W13-4/master
Yufannnn Apr 10, 2023
4d83892
Update Parser
Yufannnn Apr 10, 2023
586c5af
Merge branch 'master' of https://github.com/Yufannnn/tp
Yufannnn Apr 10, 2023
1ea698f
remove main
Yufannnn Apr 10, 2023
7861b52
Fix WhiteSpace
Yufannnn Apr 10, 2023
e658570
Fix wrong deletion message for Homework, Student and Lesson.
Apr 10, 2023
b93f03e
Merge pull request #220 from Yufannnn/fix-DG-bug
NBQian Apr 10, 2023
17b07f2
Merge pull request #221 from fahim-tazz/bug-fixes-before-PE
Yufannnn Apr 10, 2023
7d2479e
fix bug about date/date, and the bug where the student disappears aft…
Apr 10, 2023
fec71b5
123321
Apr 10, 2023
e131ec3
Merge branch 'bq-dg-sq-diagram' into DATE-bug-im-crying
Apr 10, 2023
62d1612
Update `AboutUs.md` to reflect Fahim's email.
Apr 10, 2023
207fb1c
add testcases for viewProfileCommand
szejiancheng Apr 10, 2023
37ec90e
checkstyle fixes
szejiancheng Apr 10, 2023
eba4ca1
Merge pull request #223 from szejiancheng/master
fahim-tazz Apr 10, 2023
7b03df4
Merge branch 'master' into DATE-bug-im-crying
NBQian Apr 10, 2023
c027d72
Update ViewLessonCommandParserTest.java
NBQian Apr 10, 2023
dfb70f8
Update User stories to reflect v1.4.
Apr 10, 2023
6cc3dd3
Merge pull request #224 from NBQian/DATE-bug-im-crying
szejiancheng Apr 10, 2023
4656e5f
123
Apr 10, 2023
c9e3c0d
bugfix
szejiancheng Apr 10, 2023
4f16aea
Merge pull request #226 from szejiancheng/branch-bug-fix-invocation-e…
szejiancheng Apr 10, 2023
5209f7d
Merge pull request #225 from fahim-tazz/fahim-PPP-aboutUs
Yufannnn Apr 10, 2023
29bd044
12345676898079
Apr 10, 2023
5a052b5
Finalize UG.
Apr 10, 2023
d2ccd5f
Merge pull request #227 from NBQian/dup-prefix-bug
fahim-tazz Apr 10, 2023
8ccef45
Merge pull request #228 from fahim-tazz/finalize-UG
NBQian Apr 10, 2023
9b65e9c
123456789
Apr 10, 2023
51d263c
Merge pull request #229 from NBQian/dup-prefix-bug
Yufannnn Apr 10, 2023
b788b44
Add reposense link to ppp.
Apr 10, 2023
c5c9853
tweaks to the dg
szejiancheng Apr 10, 2023
49c8430
Merge pull request #230 from szejiancheng/branch-DG-edits
fahim-tazz Apr 10, 2023
0160b7a
update PPP
szejiancheng Apr 10, 2023
de0e6c3
Finalized Fahim's PPP
Apr 10, 2023
934206f
hehehe
Apr 10, 2023
bdcccb9
Merge branch 'master' into finalize-PPP-fahim
fahim-tazz Apr 10, 2023
bce93cb
Merge pull request #232 from fahim-tazz/finalize-PPP-fahim
NBQian Apr 10, 2023
121804a
Merge pull request #231 from NBQian/CREDIT
szejiancheng Apr 10, 2023
c771102
changes to DG
szejiancheng Apr 10, 2023
34899f5
Merge pull request #233 from szejiancheng/master
Yufannnn Apr 10, 2023
560d555
tweaks to dg
szejiancheng Apr 10, 2023
e292a7f
Merge pull request #234 from szejiancheng/master
Yufannnn Apr 10, 2023
9285d71
Add ToC formatting.
fahim-tazz Apr 10, 2023
f25ef3b
12343546756898
Apr 10, 2023
3a73872
1234
Apr 10, 2023
bc2f6bf
Add page breaks.
fahim-tazz Apr 10, 2023
7844b16
03498170459874
Apr 10, 2023
dd454fa
Merge pull request #235 from NBQian/BQCOMMENTS
Yufannnn Apr 10, 2023
24e659f
final ppp
szejiancheng Apr 10, 2023
62655c2
tweak link to PPP
szejiancheng Apr 10, 2023
dd1a4fa
Merge pull request #236 from szejiancheng/branch-jc's-PPP
Yufannnn Apr 10, 2023
5d8e891
Update index.md
szejiancheng Apr 10, 2023
c756cf2
v1.4b
Apr 10, 2023
99fffef
Final tweaks
szejiancheng Apr 10, 2023
56fd6c8
Merge pull request #237 from NBQian/TAGGGGGGGG
Yufannnn Apr 10, 2023
824b3e4
Merge pull request #238 from szejiancheng/master
Yufannnn Apr 10, 2023
5ca3fb6
Add `Supoorted Date Formats` to ToC
fahim-tazz Apr 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/main/java/seedu/address/commons/core/Messages.java
Original file line number Diff line number Diff line change
@@ -39,6 +39,13 @@ public class Messages {
public static final String MESSAGE_EXAMS_LISTED_OVERVIEW = "%d exams from %d students listed: \n%s";
public static final String MESSAGE_ALL_EXAMS_LISTED_OVERVIEW = "%d exams from all students listed:\n%s";
public static final String MESSAGE_NO_EXAM_FOUND = "No exam is found!";
public static final String MESSAGE_EXAM_NOT_COMPLETED = "Exam is not yet completed, a grade cannot be assigned!";
public static final String MESSAGE_EXAM_UPDATED_SUCCESS = "Exam %s of student %s is updated to:\n"
+ "Exam name: %s\n"
+ "Start Time: %s\n"
+ "End Time: %s\n"
+ "Weightage: %s" + "%%" + "\n"
+ "Grade: %s\n";
public static final String MESSAGE_HOMEWORK_UPDATED_SUCCESS = "Homework %s of student %s is updated to:\n"
+ "Homework name: %s\n"
+ "Deadline: %s\n";
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@
import static seedu.address.logic.parser.CliSyntax.PREFIX_STARTTIME;
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_STUDENTS;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;

@@ -17,6 +16,7 @@
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.student.Exam;
import seedu.address.model.student.Grade;
import seedu.address.model.student.NamePredicate;
import seedu.address.model.student.Student;

@@ -45,12 +45,15 @@ public class CreateExamCommand extends Command {
private final LocalDateTime endTime;
private final NamePredicate predicate;
private final List<String> names;
private final Double weightage;
private final Grade grade;


/**
* Creates a CreateExamCommand to add the specified exam to the specified student.
*/
public CreateExamCommand(List<String> names, NamePredicate predicate, String examDescription,
LocalDateTime startTime, LocalDateTime endTime) {
LocalDateTime startTime, LocalDateTime endTime, Double weightage, Grade grade) {
requireNonNull(predicate);
requireNonNull(examDescription);
requireNonNull(startTime);
@@ -60,6 +63,9 @@ public CreateExamCommand(List<String> names, NamePredicate predicate, String exa
this.endTime = endTime;
this.predicate = predicate;
this.names = names;
this.weightage = weightage;
this.grade = grade;

}

@Override
@@ -91,21 +97,11 @@ public CommandResult execute(Model model) throws CommandException {

List<Student> studentList = model.getFilteredStudentList();

if (startTime.isBefore(LocalDateTime.now())) {
throw new CommandException("start time must be in the future.");
}

if (startTime.isAfter(endTime)) {
throw new CommandException(Messages.MESSAGE_INVALID_EXAM_TIME);
}

if (Duration.between(startTime, endTime).toMinutes() < 30 || Duration.between(startTime,
endTime).toHours() > 3) {
throw new CommandException(Messages.MESSAGE_INVALID_EXAM_DURATION);
if (endTime.isAfter(LocalDateTime.now()) && grade != null) {
throw new CommandException(Messages.MESSAGE_EXAM_NOT_COMPLETED);
}

//Todo: currently weightage is 0 for convenience, implement this where possible
Exam exam = new Exam(examDescription, startTime, endTime, 0d, null);
Exam exam = new Exam(examDescription, startTime, endTime, weightage, grade);

try {
for (Student student : studentList) {
Original file line number Diff line number Diff line change
@@ -2,13 +2,14 @@

import static java.util.Objects.requireNonNull;
import static seedu.address.logic.parser.CliSyntax.PREFIX_ENDTIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EXAM;
import static seedu.address.logic.parser.CliSyntax.PREFIX_GRADE;
import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX;
import static seedu.address.logic.parser.CliSyntax.PREFIX_LESSON;
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_STARTTIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_WEIGHT;
import static seedu.address.model.Model.PREDICATE_SHOW_ALL_STUDENTS;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@@ -20,6 +21,7 @@
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.student.Exam;
import seedu.address.model.student.Grade;
import seedu.address.model.student.NamePredicate;
import seedu.address.model.student.Student;

@@ -34,18 +36,23 @@ public class UpdateExamCommand extends Command {
+ "Parameters: "
+ PREFIX_NAME + "STUDENT_NAME "
+ PREFIX_INDEX + "EXAM_INDEX "
+ PREFIX_LESSON + "EXAM_NAME "
+ PREFIX_EXAM + "EXAM_NAME "
+ PREFIX_STARTTIME + "START TIME"
+ PREFIX_ENDTIME + "END TIME\n"
+ PREFIX_ENDTIME + "END TIME"
+ PREFIX_WEIGHT + "WEIGHTAGE"
+ PREFIX_GRADE + "GRADE\n"
+ "Example: " + COMMAND_WORD + " "
+ PREFIX_NAME + "John Doe "
+ PREFIX_INDEX + "1 "
+ PREFIX_LESSON + "Math Exam ";
+ PREFIX_EXAM + "Math Exam ";

private final Index index;
private final Optional<String> examName;
private final Optional<LocalDateTime> startTime;
private final Optional<LocalDateTime> endTime;
private final Optional<Double> weightage;
private final Optional<Grade> grade;

private final NamePredicate predicate;
private final List<String> names;

@@ -60,7 +67,8 @@ public class UpdateExamCommand extends Command {
*/
public UpdateExamCommand(List<String> names, Index index, NamePredicate predicate,
Optional<String> examName, Optional<LocalDateTime> startTime,
Optional<LocalDateTime> endTime) {
Optional<LocalDateTime> endTime, Optional<Double> weightage,
Optional<Grade> grade) {
requireNonNull(predicate);
requireNonNull(index);

@@ -70,6 +78,8 @@ public UpdateExamCommand(List<String> names, Index index, NamePredicate predicat
this.startTime = startTime;
this.endTime = endTime;
this.names = names;
this.weightage = weightage;
this.grade = grade;
}

@Override
@@ -109,22 +119,28 @@ public CommandResult execute(Model model) throws CommandException {
if (newStartTime.isAfter(newEndTime)) {
throw new CommandException(Messages.MESSAGE_INVALID_EXAM_TIME);
}

if (Duration.between(newStartTime, newEndTime).toMinutes() < 30 || Duration.between(newStartTime,
newEndTime).toHours() > 3) {
throw new CommandException(Messages.MESSAGE_INVALID_EXAM_DURATION);
if (newEndTime.isAfter(LocalDateTime.now()) && grade.isPresent()) {
throw new CommandException(Messages.MESSAGE_EXAM_NOT_COMPLETED);
}
Exam newExam = new Exam(newExamName, newStartTime, newEndTime);
Double newWeightage = this.weightage.orElse(examToUpdate.getWeightage());
Grade newGrade = this.grade.orElse(examToUpdate.getGrade());

//if (Duration.between(newStartTime, newEndTime).toMinutes() < 30 || Duration.between(newStartTime,
// newEndTime).toHours() > 3) {
// throw new CommandException(Messages.MESSAGE_INVALID_EXAM_DURATION);
//}
Exam newExam = new Exam(newExamName, newStartTime, newEndTime, newWeightage, newGrade);

try {
student.setExam(index.getZeroBased(), newExam);
} catch (Exception e) {
throw new CommandException(e.getMessage());
}

return new CommandResult(
String.format(Messages.MESSAGE_LESSON_UPDATED_SUCCESS, index.getOneBased(),
String.format(Messages.MESSAGE_EXAM_UPDATED_SUCCESS, index.getOneBased(),
student.getName().getFirstName(),
newExamName, newStartTime, newEndTime));
newExamName, newStartTime, newEndTime, newWeightage, newGrade));
}

@Override
Original file line number Diff line number Diff line change
@@ -129,15 +129,15 @@ public CommandResult execute(Model model) throws CommandException {

// Loop through each student and add their lesson to the string builder
for (Student student : studentList) {
List<Exam> lessonList = student.getFilteredExamList(examDatePredicate, examNamePredicate,
List<Exam> examList = student.getFilteredExamList(examDatePredicate, examNamePredicate,
donePredicate);
if (!lessonList.isEmpty()) {
if (!examList.isEmpty()) {
sb.append(student.getName().fullName).append(":\n");

numOfLessons += lessonList.size();
numOfLessons += examList.size();

for (int i = 0; i < lessonList.size(); i++) {
sb.append(i + 1).append(". ").append(lessonList.get(i)).append("\n");
for (int i = 0; i < examList.size(); i++) {
sb.append(i + 1).append(". ").append(examList.get(i)).append("\n");
}

sb.append("--------------------------------------------------\n");
2 changes: 2 additions & 0 deletions src/main/java/seedu/address/logic/parser/CliSyntax.java
Original file line number Diff line number Diff line change
@@ -16,6 +16,8 @@ public class CliSyntax {
public static final Prefix PREFIX_HOMEWORK = new Prefix("homework/");
public static final Prefix PREFIX_DEADLINE = new Prefix("deadline/");
public static final Prefix PREFIX_EXAM = new Prefix("exam/");
public static final Prefix PREFIX_WEIGHT = new Prefix("weightage/");
public static final Prefix PREFIX_GRADE = new Prefix("grade/");

public static final Prefix PREFIX_STATUS = new Prefix("status/");
public static final Prefix PREFIX_INDEX = new Prefix("index/");
40 changes: 40 additions & 0 deletions src/main/java/seedu/address/logic/parser/ParserUtil.java
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.student.Address;
import seedu.address.model.student.Email;
import seedu.address.model.student.Grade;
import seedu.address.model.student.Homework;
import seedu.address.model.student.Name;
import seedu.address.model.student.Phone;
@@ -392,4 +393,43 @@ public static void checkNotNullNames(List<String> names) throws ParseException {
}
}
}

/**
* parses a string and returns a double representing the percentage weightage
* @param weight string to parse
* @return Double percentage
* @throws ParseException
*/
public static double parseWeightage(String weight) throws ParseException {
if (!weight.matches("^[0-9]+(?:\\.[0-9]+)?%?$")) {
throw new ParseException("Weightage is in an invalid format!");
}
weight = weight.replace("%", ""); //removes % sign if it exists
Double res = null;
try {
res = Double.parseDouble(weight);
} catch (NumberFormatException e) {
throw new ParseException("unexpected error occurred when parsing weightage", e);
}
return res;
}

/**
* parses a string and returns a Grade object representing it
* @param grade string to parse
* @return Grade representationn
* @throws ParseException
*/
public static Grade parseGrade(String grade) throws ParseException {
if (!grade.matches("^[0-9]+/[0-9]+$")) {
throw new ParseException("Grade is in an invalid format!");
}
Grade res;
try {
res = new Grade(Double.parseDouble(grade.split("/")[0]), Double.parseDouble(grade.split("/")[1]));
} catch (IllegalArgumentException e) {
throw new ParseException(e.getMessage());
}
return res;
}
}
Original file line number Diff line number Diff line change
@@ -4,8 +4,10 @@
import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
import static seedu.address.logic.parser.CliSyntax.PREFIX_ENDTIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EXAM;
import static seedu.address.logic.parser.CliSyntax.PREFIX_GRADE;
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_STARTTIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_WEIGHT;

import java.time.LocalDateTime;
import java.util.ArrayList;
@@ -19,6 +21,7 @@
import seedu.address.logic.parser.ParserUtil;
import seedu.address.logic.parser.Prefix;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.student.Grade;
import seedu.address.model.student.NamePredicate;

/**
@@ -35,7 +38,8 @@ public CreateExamCommand parse(String args) throws ParseException {
requireNonNull(args);

ArgumentMultimap argMultimap =
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_EXAM, PREFIX_STARTTIME, PREFIX_ENDTIME);
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_EXAM, PREFIX_STARTTIME, PREFIX_ENDTIME,
PREFIX_WEIGHT, PREFIX_GRADE);

if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_EXAM, PREFIX_STARTTIME, PREFIX_ENDTIME)
|| !argMultimap.getPreamble().isEmpty()) {
@@ -52,6 +56,18 @@ public CreateExamCommand parse(String args) throws ParseException {
LocalDateTime endTime = ParserUtil.parseDeadline(argMultimap.getValue(PREFIX_ENDTIME).get());
List<String> nameKeywords = argMultimap.getAllValues(PREFIX_NAME);

Double weightage = null;
//if the weightage of an exam is provided, store the weight
if (argMultimap.getValue(PREFIX_WEIGHT).isPresent()) {
weightage = ParserUtil.parseWeightage(argMultimap.getValue(PREFIX_WEIGHT).get());
}

Grade grade = null;
//if the grade of an exam is provided, store the grade
if (argMultimap.getValue(PREFIX_GRADE).isPresent()) {
grade = ParserUtil.parseGrade(argMultimap.getValue(PREFIX_GRADE).get());
}

// for all the names, trim the name and only take the first word
for (int i = 0; i < nameKeywords.size(); i++) {
String name = nameKeywords.get(i);
@@ -69,7 +85,7 @@ public CreateExamCommand parse(String args) throws ParseException {
names = nameKeywords;

return new CreateExamCommand(names, new NamePredicate(nameKeywords),
examDescription, startTime, endTime);
examDescription, startTime, endTime, weightage, grade);
}

/**
Original file line number Diff line number Diff line change
@@ -4,9 +4,11 @@
import static seedu.address.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
import static seedu.address.logic.parser.CliSyntax.PREFIX_ENDTIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_EXAM;
import static seedu.address.logic.parser.CliSyntax.PREFIX_GRADE;
import static seedu.address.logic.parser.CliSyntax.PREFIX_INDEX;
import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_STARTTIME;
import static seedu.address.logic.parser.CliSyntax.PREFIX_WEIGHT;

import java.time.LocalDateTime;
import java.util.ArrayList;
@@ -22,6 +24,7 @@
import seedu.address.logic.parser.ParserUtil;
import seedu.address.logic.parser.Prefix;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.student.Grade;
import seedu.address.model.student.NamePredicate;

/**
@@ -40,11 +43,13 @@ public UpdateExamCommand parse(String args) throws ParseException {

ArgumentMultimap argMultimap =
ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_INDEX, PREFIX_EXAM, PREFIX_STARTTIME,
PREFIX_ENDTIME);
PREFIX_ENDTIME, PREFIX_WEIGHT, PREFIX_GRADE);

if ((!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDEX, PREFIX_EXAM)
&& !arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDEX, PREFIX_STARTTIME)
&& !arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDEX, PREFIX_ENDTIME))
&& !arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDEX, PREFIX_ENDTIME)
&& !arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDEX, PREFIX_WEIGHT)
&& !arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDEX, PREFIX_GRADE))
|| !argMultimap.getPreamble().isEmpty()) {
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT,
UpdateExamCommand.MESSAGE_USAGE));
@@ -70,10 +75,10 @@ public UpdateExamCommand parse(String args) throws ParseException {

if (nameKeywords.size() > 1) {
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT,
"Only one name is allowed for update homework command."));
"Only one name is allowed for update exam command."));
}

// if homework name is not present, set it to null, else parse it
// if exam name is not present, set it to null, else parse it
Optional<String> examName = Optional.empty();
if (argMultimap.getValue(PREFIX_EXAM).isPresent()) {
examName = Optional.of(argMultimap.getValue(PREFIX_EXAM).get());
@@ -90,8 +95,18 @@ public UpdateExamCommand parse(String args) throws ParseException {
endTime = Optional.of(ParserUtil.parseEndTime(argMultimap.getValue(PREFIX_ENDTIME).get()));
}

Optional<Double> weight = Optional.empty();
if (argMultimap.getValue(PREFIX_WEIGHT).isPresent()) {
weight = Optional.of(ParserUtil.parseWeightage(argMultimap.getValue(PREFIX_WEIGHT).get()));
}

Optional<Grade> grade = Optional.empty();
if (argMultimap.getValue(PREFIX_GRADE).isPresent()) {
grade = Optional.of(ParserUtil.parseGrade(argMultimap.getValue(PREFIX_GRADE).get()));
}

return new UpdateExamCommand(names, index, new NamePredicate(nameKeywords),
examName, startTime, endTime);
examName, startTime, endTime, weight, grade);
}

/**
76 changes: 47 additions & 29 deletions src/main/java/seedu/address/model/student/Exam.java
Original file line number Diff line number Diff line change
@@ -17,28 +17,8 @@ public class Exam {
private final LocalDateTime startTime;
private final LocalDateTime endTime;
private final Double weightage;
private Grade grade;
private final Grade grade;

/**
* Creates a new Exam with the given description, start time, end time.
*
* @param description The description of the exam.
* @param startTime The start time of the exam.
* @param endTime The end time of the exam.
*/
public Exam(String description, LocalDateTime startTime, LocalDateTime endTime) {
Objects.requireNonNull(description);
Objects.requireNonNull(startTime);
Objects.requireNonNull(endTime);
if (startTime.isAfter(endTime)) {
throw new IllegalArgumentException("Start time cannot be after end time.");
}
this.description = description;
this.startTime = startTime;
this.endTime = endTime;
this.weightage = null;
this.grade = null;
}

/**
* Creates a new Exam with the given description, start time, end time, weightage, and grade.
@@ -60,8 +40,8 @@ public Exam(String description, LocalDateTime startTime, LocalDateTime endTime,
}

if (weightage != null) {
if (weightage < 0 || weightage > 1) {
throw new IllegalArgumentException("Weightage must be between 0 and 1.");
if (weightage < 0 || weightage > 100) {
throw new IllegalArgumentException("Weightage must be a percentage between 0 and 100.");
}
}

@@ -109,6 +89,13 @@ public Double getWeightage() {
return weightage;
}

public String getStringWeightage() {
if (weightage == null) {
return "Undefined";
}
return String.format("%.2f", weightage) + "%";
}

/**
* Returns the duration of the exam in minutes.
*
@@ -125,12 +112,16 @@ public int getDurationInMinutes() {
* @throws UnsupportedOperationException If the exam is not finished.
*/
public Grade getGrade() {
// if (!status.equals(ExamStatus.Finished)) {
// throw new UnsupportedOperationException("Exam is not finished and does not have a grade.");
// }
return grade;
}

public String getStringGrade() {
if (grade == null) {
return "Undefined";
}
return grade.toString();
}

/**
* Returns true if both exams have the same description and start time.
* This defines a weaker notion of equality between two exams.
@@ -145,7 +136,34 @@ public boolean isSameExam(Exam otherExam) {

return otherExam != null
&& otherExam.getDescription().equals(getDescription())
&& otherExam.getStartTime().equals(getStartTime());
&& otherExam.getStartTime().equals(getStartTime())
&& otherExam.getEndTime().equals(getEndTime())
&& compareWeightages(otherExam.getWeightage(), getWeightage())
&& compareGrades(otherExam.getGrade(), getGrade());
}

private boolean compareWeightages(Double first, Double second) {
if (first == null && second == null) {
return true;
} else {
if (first == null || second == null) {
return false;
} else {
return Double.compare(first, second) == 0;
}
}
}

private boolean compareGrades(Grade first, Grade second) {
if (first == null && second == null) {
return true;
} else {
if (first == null || second == null) {
return false;
} else {
return first.equals(second);
}
}
}

/**
@@ -199,9 +217,9 @@ public String toString() {
.append(" End Time: ")
.append(getEndTime().format(formatter))
.append(" Weightage: ")
.append(getWeightage())
.append(getStringWeightage())
.append(" Grade: ")
.append(getGrade());
.append(getStringGrade());
return builder.toString();
}
}
20 changes: 18 additions & 2 deletions src/main/java/seedu/address/model/student/Grade.java
Original file line number Diff line number Diff line change
@@ -20,15 +20,31 @@ public class Grade {
* @param fullMarks the maximum score that could be obtained
* @throws IllegalArgumentException if the score is negative or greater than full marks
*/
public Grade(double score, double fullMarks) {
public Grade(double score, double fullMarks) throws IllegalArgumentException {
if (score < 0 || score > fullMarks) {
throw new IllegalArgumentException("Invalid grade score");
throw new IllegalArgumentException("Invalid score, score has to be positive and lesser than the "
+ "full marks achievable");
}
if (fullMarks <= 0) {
throw new IllegalArgumentException("Full marks must be positive!");
}

this.score = score;
this.fullMarks = fullMarks;
}

//Dummy code that needs to be included for json-related classes to work, I don't know why, todo understand this
//https://stackoverflow.com/questions/7625783/jsonmappingexception-no-suitable-constructor-
// found-for-type-simple-type-class

/**
* dummy code
*/
public Grade() {
score = 0;
fullMarks = 0;
}

/**
* Returns the score obtained.
* The score is guaranteed to be non-negative and less than or equal to the full marks.
8 changes: 4 additions & 4 deletions src/main/java/seedu/address/model/student/Student.java
Original file line number Diff line number Diff line change
@@ -309,14 +309,14 @@ public void setLesson(Integer target, Lesson editedLesson) {
lessonsList.setLesson(target, editedLesson);
}

public void setExam(Integer target, Exam editedLesson) {
requireAllNonNull(target, editedLesson);
public void setExam(Integer target, Exam editedExam) {
requireAllNonNull(target, editedExam);
// UniqueExamList tempExamList = examList;
// tempExamList.setExam(target, editedLesson);
// tempExamList.setExam(target, editedExam);
// if (!(tempExamList.validExams())) {
// throw new ConflictingExamsException();
// }
examList.setExam(target, editedLesson);
examList.setExam(target, editedExam);
}

/**
Original file line number Diff line number Diff line change
@@ -11,10 +11,8 @@
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import seedu.address.model.student.exceptions.ConflictingExamsException;
import seedu.address.model.student.exceptions.ConflictingLessonsException;
import seedu.address.model.student.exceptions.DuplicateEntryException;
import seedu.address.model.student.exceptions.DuplicateExamsException;
import seedu.address.model.student.exceptions.DuplicateLessonException;
import seedu.address.model.student.exceptions.EntryNotFoundException;

/**
@@ -49,7 +47,7 @@ public boolean contains(Exam toCheck) {
*
* @param toAdd the Exam to be added
*/
public void add(Exam toAdd) throws DuplicateLessonException, ConflictingLessonsException {
public void add(Exam toAdd) throws DuplicateExamsException, ConflictingExamsException {
requireNonNull(toAdd);
if (contains(toAdd)) {
throw new DuplicateExamsException();
@@ -94,9 +92,6 @@ public void remove(Exam toRemove) {
}
}

public boolean validExmas() {
return examsAreUnique(internalList);
}

/**
* Replaces the contents of this list with {@code replacement}.
4 changes: 2 additions & 2 deletions src/test/java/seedu/address/model/student/ExamTest.java
Original file line number Diff line number Diff line change
@@ -25,14 +25,14 @@ public void constructor_validInputs_success() {
public void constructor_startTimeAfterEndTime_throwsIllegalArgumentException() {
LocalDateTime startTime = LocalDateTime.of(2023, 3, 31, 13, 0);
LocalDateTime endTime = LocalDateTime.of(2023, 3, 31, 12, 59);
assertThrows(IllegalArgumentException.class, () -> new Exam("Midterm", startTime, endTime, 0.4, null));
assertThrows(IllegalArgumentException.class, () -> new Exam("Midterm", startTime, endTime, 40d, null));
}

@Test
public void constructor_invalidWeightage_throwsIllegalArgumentException() {
LocalDateTime startTime = LocalDateTime.of(2023, 3, 31, 13, 0);
LocalDateTime endTime = LocalDateTime.of(2023, 3, 31, 14, 59);
assertThrows(IllegalArgumentException.class, () -> new Exam("Midterm", startTime, endTime, 1.4, null));
assertThrows(IllegalArgumentException.class, () -> new Exam("Midterm", startTime, endTime, 104d, null));
}

@Test