From 33caab3a7cd82068c3d731d9201fdc239694ad75 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 5 Sep 2024 11:37:59 -0400 Subject: [PATCH 01/59] replaced all .* with specific imports --- .../coms4156/project/individualproject/Course.java | 3 ++- .../project/individualproject/Department.java | 7 +++++-- .../IndividualProjectApplication.java | 8 ++++++-- .../project/individualproject/MyFileDatabase.java | 10 ++++++++-- .../project/individualproject/RouteController.java | 12 ++++++++++-- 5 files changed, 31 insertions(+), 9 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index 272c94c9..e3165829 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -1,6 +1,7 @@ package dev.coms4156.project.individualproject; -import java.io.*; +import java.io.Serial; +import java.io.Serializable; public class Course implements Serializable { diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java index 4bab0f08..8e035cd9 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java @@ -1,7 +1,10 @@ package dev.coms4156.project.individualproject; -import java.io.*; -import java.util.*; +import java.io.Serializable; +import java.io.Serial; + +import java.util.HashMap; +import java.util.Map; /** diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java index 80860423..7187d3e0 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java @@ -1,8 +1,12 @@ package dev.coms4156.project.individualproject; import jakarta.annotation.PreDestroy; -import java.util.*; -import org.springframework.boot.*; + +import java.util.HashMap; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.CommandLineRunner; + import org.springframework.boot.autoconfigure.SpringBootApplication; /** diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java index 1f61f893..e676fd25 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java @@ -1,7 +1,13 @@ package dev.coms4156.project.individualproject; -import java.io.*; -import java.util.*; +import java.io.ObjectInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.FileOutputStream; + +import java.util.HashMap; +import java.util.Map; /** * This class represents a file-based database containing department mappings. diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 09f504dc..1f08e2f0 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -1,8 +1,16 @@ package dev.coms4156.project.individualproject; import java.util.HashMap; -import org.springframework.http.*; -import org.springframework.web.bind.annotation.*; + +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpStatus; + +// import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PatchMapping; /** * This class contains all the API routes for the system. From 8baa25a02561b61429fd7ca104880738d433190b Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 5 Sep 2024 11:48:19 -0400 Subject: [PATCH 02/59] updated order of imports to be lexicographical --- .../dev/coms4156/project/individualproject/Department.java | 4 +--- .../individualproject/IndividualProjectApplication.java | 6 ++---- .../coms4156/project/individualproject/MyFileDatabase.java | 5 ++--- .../project/individualproject/RouteController.java | 7 +++---- 4 files changed, 8 insertions(+), 14 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java index 8e035cd9..c98ee691 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java @@ -1,12 +1,10 @@ package dev.coms4156.project.individualproject; -import java.io.Serializable; import java.io.Serial; - +import java.io.Serializable; import java.util.HashMap; import java.util.Map; - /** * Represents a department within an educational institution. * This class stores information about the department, including its code, diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java index 7187d3e0..033ba660 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java @@ -1,14 +1,12 @@ package dev.coms4156.project.individualproject; import jakarta.annotation.PreDestroy; - import java.util.HashMap; - -import org.springframework.boot.SpringApplication; import org.springframework.boot.CommandLineRunner; - +import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; + /** * Class contains all the startup logic for the application. * diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java index e676fd25..b11a6233 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java @@ -1,11 +1,10 @@ package dev.coms4156.project.individualproject; -import java.io.ObjectInputStream; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import java.io.FileOutputStream; - import java.util.HashMap; import java.util.Map; diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 1f08e2f0..8fbd0c4d 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -2,15 +2,14 @@ import java.util.HashMap; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.HttpStatus; -// import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; /** * This class contains all the API routes for the system. From 1510f0f414ba2ec455ff3dbfd7245f59c365d8a4 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 5 Sep 2024 20:39:36 -0400 Subject: [PATCH 03/59] resolved all style issues for IndividualProjectApplication.java --- .../IndividualProjectApplication.java | 522 +++++++++--------- 1 file changed, 261 insertions(+), 261 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java index 033ba660..f4cc561a 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java @@ -9,296 +9,296 @@ /** * Class contains all the startup logic for the application. - * - * DO NOT MODIFY ANYTHING BELOW THIS POINT WITH REGARD TO FUNCTIONALITY + * + *

DO NOT MODIFY ANYTHING BELOW THIS POINT WITH REGARD TO FUNCTIONALITY * YOU MAY MAKE STYLE/REFACTOR MODIFICATIONS AS NEEDED */ @SpringBootApplication public class IndividualProjectApplication implements CommandLineRunner { - /** - * The main launcher for the service all it does - * is make a call to the overridden run method. - * - * @param args A {@code String[]} of any potential - * runtime arguments - */ - public static void main(String[] args) { - SpringApplication.run(IndividualProjectApplication.class, args); - } + /** + * The main launcher for the service all it does + * is make a call to the overridden run method. + * + * @param args A {@code String[]} of any potential + * runtime arguments + */ + public static void main(String[] args) { + SpringApplication.run(IndividualProjectApplication.class, args); + } - /** - * This contains all the setup logic, it will mainly be focused - * on loading up and creating an instance of the database based - * off a saved file or will create a fresh database if the file - * is not present. - * - * @param args A {@code String[]} of any potential runtime args - */ - public void run(String[] args) { - for (String arg : args) { - if (arg.equals("setup")) { - myFileDatabase = new MyFileDatabase(1, "./data.txt"); - resetDataFile(); - System.out.println("System Setup"); - return; - } - } - myFileDatabase = new MyFileDatabase(0, "./data.txt"); - System.out.println("Start up"); - } + /** + * This contains all the setup logic, it will mainly be focused + * on loading up and creating an instance of the database based + * off a saved file or will create a fresh database if the file + * is not present. + * + * @param args A {@code String[]} of any potential runtime args + */ + public void run(String[] args) { + for (String arg : args) { + if (arg.equals("setup")) { + myFileDatabase = new MyFileDatabase(1, "./data.txt"); + resetDataFile(); + System.out.println("System Setup"); + return; + } + } + myFileDatabase = new MyFileDatabase(0, "./data.txt"); + System.out.println("Start up"); + } - /** - * Overrides the database reference, used when testing. - * - * @param testData A {@code MyFileDatabase} object referencing test data. - */ - public static void overrideDatabase(MyFileDatabase testData) { - myFileDatabase = testData; - saveData = false; - } + /** + * Overrides the database reference, used when testing. + * + * @param testData A {@code MyFileDatabase} object referencing test data. + */ + public static void overrideDatabase(MyFileDatabase testData) { + myFileDatabase = testData; + saveData = false; + } - /** - * Allows for data to be reset in event of errors. - */ - public void resetDataFile() { - String[] times = {"11:40-12:55", "4:10-5:25", "10:10-11:25", "2:40-3:55"}; - String[] locations = {"417 IAB", "309 HAV", "301 URIS"}; + /** + * Allows for data to be reset in event of errors. + */ + public void resetDataFile() { + String[] times = {"11:40-12:55", "4:10-5:25", "10:10-11:25", "2:40-3:55"}; + String[] locations = {"417 IAB", "309 HAV", "301 URIS"}; - //data for coms dept - Course coms1004 = new Course("Adam Cannon", locations[0], times[0], 400); - coms1004.setEnrolledStudentCount(249); - Course coms3134 = new Course("Brian Borowski", locations[2], times[1], 250); - coms3134.setEnrolledStudentCount(242); - Course coms3157 = new Course("Jae Lee", locations[0], times[1], 400); - coms3157.setEnrolledStudentCount(311); - Course coms3203 = new Course("Ansaf Salleb-Aouissi", locations[2], times[2], 250); - coms3203.setEnrolledStudentCount(215); - Course coms3261 = new Course("Josh Alman", locations[0], times[3], 150); - coms3261.setEnrolledStudentCount(140); - Course coms3251 = new Course("Tony Dear", "402 CHANDLER", "1:10-3:40", 125); - coms3251.setEnrolledStudentCount(99); - Course coms3827 = new Course("Daniel Rubenstein", "207 Math", times[2], 300); - coms3827.setEnrolledStudentCount(283); - Course coms4156 = new Course("Gail Kaiser", "501 NWC", times[2], 120); - coms4156.setEnrolledStudentCount(109); - HashMap courses = new HashMap<>(); - courses.put("1004", coms1004); - courses.put("3134", coms3134); - courses.put("3157", coms3157); - courses.put("3203", coms3203); - courses.put("3261", coms3261); - courses.put("3251", coms3251); - courses.put("3827", coms3827); - courses.put("4156", coms4156); - Department compSci = new Department("COMS", courses, "Luca Carloni", 2700); - HashMap mapping = new HashMap<>(); - mapping.put("COMS", compSci); + //data for coms dept + Course coms1004 = new Course("Adam Cannon", locations[0], times[0], 400); + coms1004.setEnrolledStudentCount(249); + Course coms3134 = new Course("Brian Borowski", locations[2], times[1], 250); + coms3134.setEnrolledStudentCount(242); + Course coms3157 = new Course("Jae Lee", locations[0], times[1], 400); + coms3157.setEnrolledStudentCount(311); + Course coms3203 = new Course("Ansaf Salleb-Aouissi", locations[2], times[2], 250); + coms3203.setEnrolledStudentCount(215); + Course coms3261 = new Course("Josh Alman", locations[0], times[3], 150); + coms3261.setEnrolledStudentCount(140); + Course coms3251 = new Course("Tony Dear", "402 CHANDLER", "1:10-3:40", 125); + coms3251.setEnrolledStudentCount(99); + Course coms3827 = new Course("Daniel Rubenstein", "207 Math", times[2], 300); + coms3827.setEnrolledStudentCount(283); + Course coms4156 = new Course("Gail Kaiser", "501 NWC", times[2], 120); + coms4156.setEnrolledStudentCount(109); + HashMap courses = new HashMap<>(); + courses.put("1004", coms1004); + courses.put("3134", coms3134); + courses.put("3157", coms3157); + courses.put("3203", coms3203); + courses.put("3261", coms3261); + courses.put("3251", coms3251); + courses.put("3827", coms3827); + courses.put("4156", coms4156); + Department compSci = new Department("COMS", courses, "Luca Carloni", 2700); + HashMap mapping = new HashMap<>(); + mapping.put("COMS", compSci); - //data for econ dept - Course econ1105 = new Course("Waseem Noor", locations[1], times[3], 210); - econ1105.setEnrolledStudentCount(187); - Course econ2257 = new Course("Tamrat Gashaw", "428 PUP", times[2], 125); - econ2257.setEnrolledStudentCount(63); - Course econ3211 = new Course("Murat Yilmaz", "310 FAY", times[1], 96); - econ3211.setEnrolledStudentCount(81); - Course econ3213 = new Course("Miles Leahey", "702 HAM", times[1], 86); - econ3213.setEnrolledStudentCount(77); - Course econ3412 = new Course("Thomas Piskula", "702 HAM", times[0], 86); - econ3412.setEnrolledStudentCount(81); - Course econ4415 = new Course("Evan D Sadler", locations[1], times[2], 110); - econ4415.setEnrolledStudentCount(63); - Course econ4710 = new Course("Matthieu Gomez", "517 HAM", "8:40-9:55", 86); - econ4710.setEnrolledStudentCount(37); - Course econ4840 = new Course("Mark Dean", "142 URIS", times[3], 108); - econ4840.setEnrolledStudentCount(67); + //data for econ dept + Course econ1105 = new Course("Waseem Noor", locations[1], times[3], 210); + econ1105.setEnrolledStudentCount(187); + Course econ2257 = new Course("Tamrat Gashaw", "428 PUP", times[2], 125); + econ2257.setEnrolledStudentCount(63); + Course econ3211 = new Course("Murat Yilmaz", "310 FAY", times[1], 96); + econ3211.setEnrolledStudentCount(81); + Course econ3213 = new Course("Miles Leahey", "702 HAM", times[1], 86); + econ3213.setEnrolledStudentCount(77); + Course econ3412 = new Course("Thomas Piskula", "702 HAM", times[0], 86); + econ3412.setEnrolledStudentCount(81); + Course econ4415 = new Course("Evan D Sadler", locations[1], times[2], 110); + econ4415.setEnrolledStudentCount(63); + Course econ4710 = new Course("Matthieu Gomez", "517 HAM", "8:40-9:55", 86); + econ4710.setEnrolledStudentCount(37); + Course econ4840 = new Course("Mark Dean", "142 URIS", times[3], 108); + econ4840.setEnrolledStudentCount(67); - courses = new HashMap<>(); - courses.put("1105", econ1105); - courses.put("2257", econ2257); - courses.put("3211", econ3211); - courses.put("3213", econ3213); - courses.put("3412", econ3412); - courses.put("4415", econ4415); - courses.put("4710", econ4710); - courses.put("4840", econ4840); + courses = new HashMap<>(); + courses.put("1105", econ1105); + courses.put("2257", econ2257); + courses.put("3211", econ3211); + courses.put("3213", econ3213); + courses.put("3412", econ3412); + courses.put("4415", econ4415); + courses.put("4710", econ4710); + courses.put("4840", econ4840); - Department econ = new Department("ECON", courses, "Michael Woodford", 2345); - mapping.put("ECON", econ); + Department econ = new Department("ECON", courses, "Michael Woodford", 2345); + mapping.put("ECON", econ); - //data for ieor dept - Course ieor2500 = new Course("Uday Menon", "627 MUDD", times[0], 50); - ieor2500.setEnrolledStudentCount(52); - Course ieor3404 = new Course("Christopher J Dolan", "303 MUDD", times[2], 73); - ieor3404.setEnrolledStudentCount(80); - Course ieor3658 = new Course("Daniel Lacker", "310 FAY", times[2], 96); - ieor3658.setEnrolledStudentCount(87); - Course ieor4102 = new Course("Antonius B Dieker", "209 HAM", times[2], 110); - ieor4102.setEnrolledStudentCount(92); - Course ieor4106 = new Course("Kaizheng Wang", "501 NWC", times[2], 150); - ieor4106.setEnrolledStudentCount(161); - Course ieor4405 = new Course("Yuri Faenza", "517 HAV", times[0], 80); - ieor4405.setEnrolledStudentCount(19); - Course ieor4511 = new Course("Michael Robbins", "633 MUDD", "9:00-11:30", 150); - ieor4511.setEnrolledStudentCount(50); - Course ieor4540 = new Course("Krzysztof M Choromanski", "633 MUDD", "7:10-9:40", 60); - ieor4540.setEnrolledStudentCount(33); + //data for ieor dept + Course ieor2500 = new Course("Uday Menon", "627 MUDD", times[0], 50); + ieor2500.setEnrolledStudentCount(52); + Course ieor3404 = new Course("Christopher J Dolan", "303 MUDD", times[2], 73); + ieor3404.setEnrolledStudentCount(80); + Course ieor3658 = new Course("Daniel Lacker", "310 FAY", times[2], 96); + ieor3658.setEnrolledStudentCount(87); + Course ieor4102 = new Course("Antonius B Dieker", "209 HAM", times[2], 110); + ieor4102.setEnrolledStudentCount(92); + Course ieor4106 = new Course("Kaizheng Wang", "501 NWC", times[2], 150); + ieor4106.setEnrolledStudentCount(161); + Course ieor4405 = new Course("Yuri Faenza", "517 HAV", times[0], 80); + ieor4405.setEnrolledStudentCount(19); + Course ieor4511 = new Course("Michael Robbins", "633 MUDD", "9:00-11:30", 150); + ieor4511.setEnrolledStudentCount(50); + Course ieor4540 = new Course("Krzysztof M Choromanski", "633 MUDD", "7:10-9:40", 60); + ieor4540.setEnrolledStudentCount(33); - courses = new HashMap<>(); - courses.put("2500", ieor2500); - courses.put("3404", ieor3404); - courses.put("3658", ieor3658); - courses.put("4102", ieor4102); - courses.put("4106", ieor4106); - courses.put("4405", ieor4405); - courses.put("4511", ieor4511); - courses.put("4540", ieor4540); + courses = new HashMap<>(); + courses.put("2500", ieor2500); + courses.put("3404", ieor3404); + courses.put("3658", ieor3658); + courses.put("4102", ieor4102); + courses.put("4106", ieor4106); + courses.put("4405", ieor4405); + courses.put("4511", ieor4511); + courses.put("4540", ieor4540); - Department ieor = new Department("IEOR", courses, "Jay Sethuraman", 67); - mapping.put("IEOR", ieor); + Department ieor = new Department("IEOR", courses, "Jay Sethuraman", 67); + mapping.put("IEOR", ieor); - //data for chem dept - Course chem1403 = new Course("Ruben M Savizky", locations[1], "6:10-7:25", 120); - chem1403.setEnrolledStudentCount(100); - Course chem1500 = new Course("Joseph C Ulichny", "302 HAV", "6:10-9:50", 46); - chem1500.setEnrolledStudentCount(50); - Course chem2045 = new Course("Luis M Campos", "209 HAV", "1:10-2:25", 50); - chem2045.setEnrolledStudentCount(29); - Course chem2444 = new Course("Christopher Eckdahl", locations[1], times[0], 150); - chem2444.setEnrolledStudentCount(150); - Course chem2494 = new Course("Talha Siddiqui", "202 HAV", "1:10-5:00", 24); - chem2494.setEnrolledStudentCount(18); - Course chem3080 = new Course("Milan Delor", "209 HAV", times[2], 60); - chem3080.setEnrolledStudentCount(18); - Course chem4071 = new Course("Jonathan S Owen", "320 HAV", "8:40-9:55", 42); - chem4071.setEnrolledStudentCount(29); - Course chem4102 = new Course("Dalibor Sames", "320 HAV", times[2], 28); - chem4102.setEnrolledStudentCount(27); + //data for chem dept + Course chem1403 = new Course("Ruben M Savizky", locations[1], "6:10-7:25", 120); + chem1403.setEnrolledStudentCount(100); + Course chem1500 = new Course("Joseph C Ulichny", "302 HAV", "6:10-9:50", 46); + chem1500.setEnrolledStudentCount(50); + Course chem2045 = new Course("Luis M Campos", "209 HAV", "1:10-2:25", 50); + chem2045.setEnrolledStudentCount(29); + Course chem2444 = new Course("Christopher Eckdahl", locations[1], times[0], 150); + chem2444.setEnrolledStudentCount(150); + Course chem2494 = new Course("Talha Siddiqui", "202 HAV", "1:10-5:00", 24); + chem2494.setEnrolledStudentCount(18); + Course chem3080 = new Course("Milan Delor", "209 HAV", times[2], 60); + chem3080.setEnrolledStudentCount(18); + Course chem4071 = new Course("Jonathan S Owen", "320 HAV", "8:40-9:55", 42); + chem4071.setEnrolledStudentCount(29); + Course chem4102 = new Course("Dalibor Sames", "320 HAV", times[2], 28); + chem4102.setEnrolledStudentCount(27); - courses = new HashMap<>(); - courses.put("1403", chem1403); - courses.put("1500", chem1500); - courses.put("2045", chem2045); - courses.put("2444", chem2444); - courses.put("2494", chem2494); - courses.put("3080", chem3080); - courses.put("4071", chem4071); - courses.put("4102", chem4102); + courses = new HashMap<>(); + courses.put("1403", chem1403); + courses.put("1500", chem1500); + courses.put("2045", chem2045); + courses.put("2444", chem2444); + courses.put("2494", chem2494); + courses.put("3080", chem3080); + courses.put("4071", chem4071); + courses.put("4102", chem4102); - Department chem = new Department("CHEM", courses, "Laura J. Kaufman", 250); - mapping.put("CHEM", chem); + Department chem = new Department("CHEM", courses, "Laura J. Kaufman", 250); + mapping.put("CHEM", chem); - //data for phys dept - Course phys1001 = new Course("Szabolcs Marka", "301 PUP", times[3], 150); - phys1001.setEnrolledStudentCount(131); - Course phys1201 = new Course("Eric Raymer", "428 PUP", times[3], 145); - phys1201.setEnrolledStudentCount(130); - Course phys1602 = new Course("Kerstin M Perez", "428 PUP", times[2], 140); - phys1602.setEnrolledStudentCount(77); - Course phys2802 = new Course("Yury Levin", "329 PUP", "10:10-12:00", 60); - phys2802.setEnrolledStudentCount(23); - Course phys3008 = new Course("William A Zajc", "329 PUP", times[2], 75); - phys3008.setEnrolledStudentCount(60); - Course phys4003 = new Course("Frederik Denef", "214 PUP", times[1], 50); - phys4003.setEnrolledStudentCount(19); - Course phys4018 = new Course("James W McIver", "307 PUP", times[3], 30); - phys4018.setEnrolledStudentCount(18); - Course phys4040 = new Course("James C Hill", "214 PUP", times[1], 50); - phys4040.setEnrolledStudentCount(31); + //data for phys dept + Course phys1001 = new Course("Szabolcs Marka", "301 PUP", times[3], 150); + phys1001.setEnrolledStudentCount(131); + Course phys1201 = new Course("Eric Raymer", "428 PUP", times[3], 145); + phys1201.setEnrolledStudentCount(130); + Course phys1602 = new Course("Kerstin M Perez", "428 PUP", times[2], 140); + phys1602.setEnrolledStudentCount(77); + Course phys2802 = new Course("Yury Levin", "329 PUP", "10:10-12:00", 60); + phys2802.setEnrolledStudentCount(23); + Course phys3008 = new Course("William A Zajc", "329 PUP", times[2], 75); + phys3008.setEnrolledStudentCount(60); + Course phys4003 = new Course("Frederik Denef", "214 PUP", times[1], 50); + phys4003.setEnrolledStudentCount(19); + Course phys4018 = new Course("James W McIver", "307 PUP", times[3], 30); + phys4018.setEnrolledStudentCount(18); + Course phys4040 = new Course("James C Hill", "214 PUP", times[1], 50); + phys4040.setEnrolledStudentCount(31); - courses = new HashMap<>(); - courses.put("2802", phys2802); - courses.put("3008", phys3008); - courses.put("4003", phys4003); - courses.put("4018", phys4018); - courses.put("4040", phys4040); - courses.put("1602", phys1602); - courses.put("1001", phys1001); - courses.put("1201", phys1201); + courses = new HashMap<>(); + courses.put("2802", phys2802); + courses.put("3008", phys3008); + courses.put("4003", phys4003); + courses.put("4018", phys4018); + courses.put("4040", phys4040); + courses.put("1602", phys1602); + courses.put("1001", phys1001); + courses.put("1201", phys1201); - Department phys = new Department("PHYS", courses, "Dmitri N. Basov", 43); - mapping.put("PHYS", phys); + Department phys = new Department("PHYS", courses, "Dmitri N. Basov", 43); + mapping.put("PHYS", phys); - //data for elen dept - Course elen1201 = new Course("David G Vallancourt", "301 PUP", times[1], 120); - elen1201.setEnrolledStudentCount(108); - Course elen3082 = new Course("Kenneth Shepard", "1205 MUDD", "4:10-6:40", 32); - elen3082.setEnrolledStudentCount(30); - Course elen3331 = new Course("David G Vallancourt", "203 MATH", times[0], 80); - elen3331.setEnrolledStudentCount(54); - Course elen3401 = new Course("Keren Bergman", "829 MUDD", times[3], 40); - elen3401.setEnrolledStudentCount(25); - Course elen3701 = new Course("Irving Kalet", "333 URIS", times[3], 50); - elen3701.setEnrolledStudentCount(24); - Course elen4510 = new Course("Mohamed Kamaludeen", "903 SSW", "7:00-9:30", 30); - elen4510.setEnrolledStudentCount(22); - Course elen4702 = new Course("Alexei Ashikhmin", "332 URIS", "7:00-9:30", 50); - elen4702.setEnrolledStudentCount(5); - Course elen4830 = new Course("Christine P Hendon", "633 MUDD", "10:10-12:40", 60); - elen4830.setEnrolledStudentCount(22); + //data for elen dept + Course elen1201 = new Course("David G Vallancourt", "301 PUP", times[1], 120); + elen1201.setEnrolledStudentCount(108); + Course elen3082 = new Course("Kenneth Shepard", "1205 MUDD", "4:10-6:40", 32); + elen3082.setEnrolledStudentCount(30); + Course elen3331 = new Course("David G Vallancourt", "203 MATH", times[0], 80); + elen3331.setEnrolledStudentCount(54); + Course elen3401 = new Course("Keren Bergman", "829 MUDD", times[3], 40); + elen3401.setEnrolledStudentCount(25); + Course elen3701 = new Course("Irving Kalet", "333 URIS", times[3], 50); + elen3701.setEnrolledStudentCount(24); + Course elen4510 = new Course("Mohamed Kamaludeen", "903 SSW", "7:00-9:30", 30); + elen4510.setEnrolledStudentCount(22); + Course elen4702 = new Course("Alexei Ashikhmin", "332 URIS", "7:00-9:30", 50); + elen4702.setEnrolledStudentCount(5); + Course elen4830 = new Course("Christine P Hendon", "633 MUDD", "10:10-12:40", 60); + elen4830.setEnrolledStudentCount(22); - courses = new HashMap<>(); - courses.put("1201", elen1201); - courses.put("3082", elen3082); - courses.put("3331", elen3331); - courses.put("3401", elen3401); - courses.put("3701", elen3701); - courses.put("4510", elen4510); - courses.put("4702", elen4702); - courses.put("4830", elen4830); + courses = new HashMap<>(); + courses.put("1201", elen1201); + courses.put("3082", elen3082); + courses.put("3331", elen3331); + courses.put("3401", elen3401); + courses.put("3701", elen3701); + courses.put("4510", elen4510); + courses.put("4702", elen4702); + courses.put("4830", elen4830); - Department elen = new Department("ELEN", courses, "Ioannis Kymissis", 250); - mapping.put("ELEN", elen); + Department elen = new Department("ELEN", courses, "Ioannis Kymissis", 250); + mapping.put("ELEN", elen); - //data for psyc dept - Course psyc1001 = new Course("Patricia G Lindemann", "501 SCH", "1:10-2:25", 200); - psyc1001.setEnrolledStudentCount(191); - Course psyc1610 = new Course("Christopher Baldassano", "200 SCH", times[2], 45); - psyc1610.setEnrolledStudentCount(42); - Course psyc2235 = new Course("Katherine T Fox-Glassman", "501 SCH", times[0], 125); - psyc2235.setEnrolledStudentCount(128); - Course psyc2620 = new Course("Jeffrey M Cohen", "303 URIS", "1:10-3:40", 60); - psyc2620.setEnrolledStudentCount(55); - Course psyc3212 = new Course("Mayron Piccolo", "200 SCH", "2:10-4:00", 15); - psyc3212.setEnrolledStudentCount(15); - Course psyc3445 = new Course("Mariam Aly", "405 SCH", "2:10-4:00", 12); - psyc3445.setEnrolledStudentCount(12); - Course psyc4236 = new Course("Trenton Jerde", "405 SCH", "6:10-8:00", 18); - psyc4236.setEnrolledStudentCount(17); - Course psyc4493 = new Course("Jennifer Blaze", "200 SCH", "2:10-4:00", 15); - psyc4493.setEnrolledStudentCount(9); + //data for psyc dept + Course psyc1001 = new Course("Patricia G Lindemann", "501 SCH", "1:10-2:25", 200); + psyc1001.setEnrolledStudentCount(191); + Course psyc1610 = new Course("Christopher Baldassano", "200 SCH", times[2], 45); + psyc1610.setEnrolledStudentCount(42); + Course psyc2235 = new Course("Katherine T Fox-Glassman", "501 SCH", times[0], 125); + psyc2235.setEnrolledStudentCount(128); + Course psyc2620 = new Course("Jeffrey M Cohen", "303 URIS", "1:10-3:40", 60); + psyc2620.setEnrolledStudentCount(55); + Course psyc3212 = new Course("Mayron Piccolo", "200 SCH", "2:10-4:00", 15); + psyc3212.setEnrolledStudentCount(15); + Course psyc3445 = new Course("Mariam Aly", "405 SCH", "2:10-4:00", 12); + psyc3445.setEnrolledStudentCount(12); + Course psyc4236 = new Course("Trenton Jerde", "405 SCH", "6:10-8:00", 18); + psyc4236.setEnrolledStudentCount(17); + Course psyc4493 = new Course("Jennifer Blaze", "200 SCH", "2:10-4:00", 15); + psyc4493.setEnrolledStudentCount(9); - courses = new HashMap<>(); - courses.put("1001", psyc1001); - courses.put("1610", psyc1610); - courses.put("2235", psyc2235); - courses.put("2620", psyc2620); - courses.put("3212", psyc3212); - courses.put("3445", psyc3445); - courses.put("4236", psyc4236); - courses.put("4493", psyc4493); + courses = new HashMap<>(); + courses.put("1001", psyc1001); + courses.put("1610", psyc1610); + courses.put("2235", psyc2235); + courses.put("2620", psyc2620); + courses.put("3212", psyc3212); + courses.put("3445", psyc3445); + courses.put("4236", psyc4236); + courses.put("4493", psyc4493); - Department psyc = new Department("PSYC", courses, "Nim Tottenham", 437); - mapping.put("PSYC", psyc); + Department psyc = new Department("PSYC", courses, "Nim Tottenham", 437); + mapping.put("PSYC", psyc); - myFileDatabase.setMapping(mapping); - } + myFileDatabase.setMapping(mapping); + } - /** - * This contains all the overheading teardown logic, it will - * mainly be focused on saving all the created user data to a - * file, so it will be ready for the next setup. - */ - @PreDestroy - public void onTermination() { - System.out.println("Termination"); - if (saveData) { - myFileDatabase.saveContentsToFile(); - } - } + /** + * This contains all the overheading teardown logic, it will + * mainly be focused on saving all the created user data to a + * file, so it will be ready for the next setup. + */ + @PreDestroy + public void onTermination() { + System.out.println("Termination"); + if (saveData) { + myFileDatabase.saveContentsToFile(); + } + } - //Database Instance - public static MyFileDatabase myFileDatabase; - private static boolean saveData = true; + //Database Instance + public static MyFileDatabase myFileDatabase; + private static boolean saveData = true; } From da76dea10f52155191fd8cf012713acbc5611bbe Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 5 Sep 2024 20:50:14 -0400 Subject: [PATCH 04/59] fixed spacing, added comments --- .../individualproject/RouteController.java | 55 ++++++++++++++----- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 8fbd0c4d..3815ab84 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -1,11 +1,9 @@ package dev.coms4156.project.individualproject; import java.util.HashMap; - import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; - import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -71,7 +69,8 @@ public ResponseEntity retrieveDepartment(@RequestParam(value = "deptCode") St * proper response. */ @GetMapping(value = "/retrieveCourse", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode) { + public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { try { boolean doesDepartmentExists = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; if (doesDepartmentExists) { @@ -108,7 +107,8 @@ public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String * response. */ @GetMapping(value = "/isCourseFull", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity isCourseFull(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode) { + public ResponseEntity isCourseFull(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -196,7 +196,8 @@ public ResponseEntity identifyDeptChair(@RequestParam(value = "deptCode") Str * proper response. */ @GetMapping(value = "/findCourseLocation", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity findCourseLocation(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode) { + public ResponseEntity findCourseLocation(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -233,7 +234,8 @@ public ResponseEntity findCourseLocation(@RequestParam(value = "deptCode") St * response. */ @GetMapping(value = "/findCourseInstructor", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity findCourseInstructor(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode) { + public ResponseEntity findCourseInstructor(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -270,7 +272,8 @@ public ResponseEntity findCourseInstructor(@RequestParam(value = "deptCode") * indicating the proper response. */ @GetMapping(value = "/findCourseTime", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity findCourseTime(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode) { + public ResponseEntity findCourseTime(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -358,7 +361,8 @@ public ResponseEntity removeMajorFromDept(@RequestParam(value = "deptCode") S * code in tune with what has happened. */ @PatchMapping(value = "/dropStudentFromCourse", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity dropStudent(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode) { + public ResponseEntity dropStudent(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -385,9 +389,18 @@ public ResponseEntity dropStudent(@RequestParam(value = "deptCode") String de } } - + /** + * Sets the enrollment count for a specific course in a department. + * + * @param deptCode the department code for the course + * @param courseCode the course code for the specific course + * @param count the enrollment count to set + * @return a ResponseEntity containing the result of the operation + */ @PatchMapping(value = "/setEnrollmentCount", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode, @RequestParam(value = "count") int count) { + public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode, + @RequestParam(value = "count") int count) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -422,7 +435,9 @@ public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") St * successful, or an error message if the course is not found */ @PatchMapping(value = "/changeCourseTime", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity changeCourseTime(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode, @RequestParam(value = "time") String time) { + public ResponseEntity changeCourseTime(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode, + @RequestParam(value = "time") String time) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -458,7 +473,9 @@ public ResponseEntity changeCourseTime(@RequestParam(value = "deptCode") Stri * successful, or an error message if the course is not found */ @PatchMapping(value = "/changeCourseTeacher", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity changeCourseTeacher(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode, @RequestParam(value = "teacher") String teacher) { + public ResponseEntity changeCourseTeacher(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode, + @RequestParam(value = "teacher") String teacher) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; @@ -480,9 +497,19 @@ public ResponseEntity changeCourseTeacher(@RequestParam(value = "deptCode") S } } - + /** + * Changes the location of a specified course within a department. + * + * @param deptCode the department code of the course + * @param courseCode the course code of the course + * @param location the new location to assign to the course + * @return a ResponseEntity with a success message if the course location was updated, + * or an error message if the course was not found or an exception occurred + */ @PatchMapping(value = "/changeCourseLocation", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity changeCourseLocation(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "courseCode") int courseCode, @RequestParam(value = "location") String location) { + public ResponseEntity changeCourseLocation(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode, + @RequestParam(value = "location") String location) { try { boolean doesCourseExists; doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; From 32a1e3b825f8d4cdcbe650b613c8ee0a29e1750a Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 5 Sep 2024 20:55:12 -0400 Subject: [PATCH 05/59] fixed lines --- .../project/individualproject/Course.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index e3165829..3e890276 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -3,6 +3,13 @@ import java.io.Serial; import java.io.Serializable; +/** + * The Course class represents a course in a department. + * This class contains attributes and methods related to managing + * a course, including course code, location, and other relevant details. + * It implements Serializable to allow the course objects to be saved and + * retrieved from storage. + */ public class Course implements Serializable { /** @@ -21,17 +28,17 @@ public Course(String instructorName, String courseLocation, String timeSlot, int this.enrolledStudentCount = 500; } - /** + /** * Enrolls a student in the course if there is space available. * * @return true if the student is successfully enrolled, false otherwise. */ public boolean enrollStudent() { - enrolledStudentCount++; + enrolledStudentCount++; return false; } - /** + /** * Drops a student from the course if a student is enrolled. * * @return true if the student is successfully dropped, false otherwise. @@ -58,7 +65,8 @@ public String getCourseTimeSlot() { public String toString() { - return "\nInstructor: " + instructorName + "; Location: " + courseLocation + "; Time: " + courseTimeSlot; + return "\nInstructor: " + instructorName + "; Location: " + + courseLocation + "; Time: " + courseTimeSlot; } From fe2004462a14809e56951a7fb0ac661d44026f1b Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 5 Sep 2024 20:57:59 -0400 Subject: [PATCH 06/59] fixed import statements, added comments --- .../project/individualproject/CourseUnitTests.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java index 4edd00f9..dc3e505c 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java @@ -1,11 +1,17 @@ package dev.coms4156.project.individualproject; -import org.junit.jupiter.api.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; -import static org.junit.jupiter.api.Assertions.*; - +/** + * Unit tests for the Course class. + * This class contains tests to verify the behavior and functionality of the Course class. + * It uses Spring's testing framework to set up the environment and run the tests. + */ @SpringBootTest @ContextConfiguration public class CourseUnitTests { From 3b1cd692cef8838477005cc1583784ed84ffb5c3 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 10:19:48 -0400 Subject: [PATCH 07/59] feat: Added Academic Honesty Pledge (Part 4) --- honesty.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 honesty.txt diff --git a/honesty.txt b/honesty.txt new file mode 100644 index 00000000..8d270cb8 --- /dev/null +++ b/honesty.txt @@ -0,0 +1,14 @@ +I, Elifia Muthia (em3308), have read and understood the following: + +CS department's Policies and Procedures on Academic Honesty +The Course Specific Academic Honesty Policies +The assignment specs outlining the consequences of not submitting this pledge and other aspects of the policy +I affirm that I will abide by all the policies stated in the relevant materials from above. I understand that the relevant policies apply to: individual assignments, group projects, and individual examinations. + +I also affirm that I understand that all course materials, with the exception of the individual/group project, are subject to the appropriate copyrights and thus will not post them on any public forum or publicly hosted repository, this includes but is not limited to: GitHub, stackoverflow, chegg etc. + +I also affirm that I will be 100% honest when evaluating the performance of myself and my teammates when prompted by an assignment or member of the teaching staff. + +Finally I affirm that I will not attempt to find any loopholes in these policies for the benefit of myself or others enrolled in the course presently or possibly in the future. + +Signed: Elifia Muthia (em3308) September 10, 2024Ac \ No newline at end of file From 491f842f53ee340d4361a522538918f55a1a91ba Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 10:28:19 -0400 Subject: [PATCH 08/59] docs: Added citations for part 1 --- citations.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 citations.txt diff --git a/citations.txt b/citations.txt new file mode 100644 index 00000000..f4186598 --- /dev/null +++ b/citations.txt @@ -0,0 +1,4 @@ +Part 1: Code Clean Up +- https://docs.opendaylight.org/en/latest/contributor-guides/coding-guidelines/coding-guidelines-java.html +- https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html + From 04ea15bad6ec3307c72b4143be94c195a22d4c79 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 10:54:32 -0400 Subject: [PATCH 09/59] added jacoco plugin to pom.xml --- IndividualProject/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/IndividualProject/pom.xml b/IndividualProject/pom.xml index 6d87d4c9..a10ef023 100644 --- a/IndividualProject/pom.xml +++ b/IndividualProject/pom.xml @@ -107,6 +107,11 @@ + + org.jacoco + jacoco-maven-plugin + 0.8.6 + From 3c15b8e7b765e38774406bd1fb412ef779a83455 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 11:51:31 -0400 Subject: [PATCH 10/59] remove redundant plugins --- IndividualProject/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/IndividualProject/pom.xml b/IndividualProject/pom.xml index a10ef023..6d87d4c9 100644 --- a/IndividualProject/pom.xml +++ b/IndividualProject/pom.xml @@ -107,11 +107,6 @@ - - org.jacoco - jacoco-maven-plugin - 0.8.6 - From 1146ddb8b2d8bc95686a44ab4c8968eb20db6365 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 12:22:10 -0400 Subject: [PATCH 11/59] Fixed typo in academic honesty pledge --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 93e4ba9b..5c0a8b88 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ -# Welcome Students of 4156 +# COMS 4156: Individual Project -Please follow the assignment specifications on Courseworks when completing this project. +## Part 2 +To run JaCoCo, I ran the following command: +``` +mvn clean test jacoco:report +``` \ No newline at end of file From ff6329128e601f563be341392cd55d3d4e4e0e8b Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 12:25:05 -0400 Subject: [PATCH 12/59] Added readme part 2 instructions --- README.md | 5 ++--- honesty.txt | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5c0a8b88..64154cfd 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,5 @@ ## Part 2 To run JaCoCo, I ran the following command: -``` -mvn clean test jacoco:report -``` \ No newline at end of file +- `mvn clean test` +- `mvn jacoco:report` \ No newline at end of file diff --git a/honesty.txt b/honesty.txt index 8d270cb8..71a7cc10 100644 --- a/honesty.txt +++ b/honesty.txt @@ -11,4 +11,4 @@ I also affirm that I will be 100% honest when evaluating the performance of myse Finally I affirm that I will not attempt to find any loopholes in these policies for the benefit of myself or others enrolled in the course presently or possibly in the future. -Signed: Elifia Muthia (em3308) September 10, 2024Ac \ No newline at end of file +Signed: Elifia Muthia (em3308) September 10, 2024 \ No newline at end of file From a9f9ba4691ad66ca069a6ec3ff5f4287c7a9c234 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 14:46:11 -0400 Subject: [PATCH 13/59] Finished debugging Course and writing unit tests, passed --- .../project/individualproject/Course.java | 16 ++++-- .../individualproject/CourseUnitTests.java | 55 ++++++++++++++++++- 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index 3e890276..3dd3db6f 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -34,7 +34,10 @@ public Course(String instructorName, String courseLocation, String timeSlot, int * @return true if the student is successfully enrolled, false otherwise. */ public boolean enrollStudent() { - enrolledStudentCount++; + if (enrolledStudentCount + 1 <= enrollmentCapacity) { + enrolledStudentCount++; + return true; + } return false; } @@ -44,18 +47,21 @@ public boolean enrollStudent() { * @return true if the student is successfully dropped, false otherwise. */ public boolean dropStudent() { - enrolledStudentCount--; + if (enrolledStudentCount - 1 >= 0) { + enrolledStudentCount--; + return true; + } return false; } public String getCourseLocation() { - return this.instructorName; + return this.courseLocation; } public String getInstructorName() { - return this.courseLocation; + return this.instructorName; } @@ -91,7 +97,7 @@ public void setEnrolledStudentCount(int count) { public boolean isCourseFull() { - return enrollmentCapacity > enrolledStudentCount; + return enrolledStudentCount >= enrollmentCapacity; } @Serial diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java index dc3e505c..356e19df 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java @@ -3,7 +3,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; @@ -14,20 +17,70 @@ */ @SpringBootTest @ContextConfiguration +@TestMethodOrder(OrderAnnotation.class) public class CourseUnitTests { @BeforeAll public static void setupCourseForTesting() { testCourse = new Course("Griffin Newbold", "417 IAB", "11:40-12:55", 250); + testCourse.setEnrolledStudentCount(256); } - @Test + @Order(1) public void toStringTest() { String expectedResult = "\nInstructor: Griffin Newbold; Location: 417 IAB; Time: 11:40-12:55"; assertEquals(expectedResult, testCourse.toString()); } + @Test + public void isCourseFullTest() { + boolean expectedResult = true; + assertEquals(expectedResult, testCourse.isCourseFull()); + } + + @Test + public void enrollStudentTest() { + boolean expectedResult = false; + assertEquals(expectedResult, testCourse.enrollStudent()); + } + + @Test + public void dropStudentTest() { + boolean expectedResult = true; + assertEquals(expectedResult, testCourse.dropStudent()); + } + + @Test + public void reassignInstructorTest() { + String expectedResult = "Griffin Newbold"; + assertEquals(expectedResult, testCourse.getInstructorName()); + + testCourse.reassignInstructor("Spongebob Squarepants"); + expectedResult = "Spongebob Squarepants"; + assertEquals(expectedResult, testCourse.getInstructorName()); + } + + @Test + public void reassignLocationTest() { + String expectedResult = "417 IAB"; + assertEquals(expectedResult, testCourse.getCourseLocation()); + + testCourse.reassignLocation("Bikini Bottom"); + expectedResult = "Bikini Bottom"; + assertEquals(expectedResult, testCourse.getCourseLocation()); + } + + @Test + public void reassignTimeTest() { + String expectedResult = "11:40-12:55"; + assertEquals(expectedResult, testCourse.getCourseTimeSlot()); + + testCourse.reassignTime("10:00-12:00"); + expectedResult = "10:00-12:00"; + assertEquals(expectedResult, testCourse.getCourseTimeSlot()); + } + /** The test course instance used for testing. */ public static Course testCourse; } From 1df7c66abf22d9e43670ff543f17ff0a7bf31fe2 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 15:00:04 -0400 Subject: [PATCH 14/59] fixed some logic --- .../java/dev/coms4156/project/individualproject/Course.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index 3dd3db6f..cdd4f273 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -34,7 +34,7 @@ public Course(String instructorName, String courseLocation, String timeSlot, int * @return true if the student is successfully enrolled, false otherwise. */ public boolean enrollStudent() { - if (enrolledStudentCount + 1 <= enrollmentCapacity) { + if (enrolledStudentCount < enrollmentCapacity) { enrolledStudentCount++; return true; } @@ -47,14 +47,13 @@ public boolean enrollStudent() { * @return true if the student is successfully dropped, false otherwise. */ public boolean dropStudent() { - if (enrolledStudentCount - 1 >= 0) { + if (enrolledStudentCount > 0) { enrolledStudentCount--; return true; } return false; } - public String getCourseLocation() { return this.courseLocation; } From cb137f17dbae3283bda2ecda978a505b85bfac39 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 15:24:45 -0400 Subject: [PATCH 15/59] added unit tests and debugged for department --- .../project/individualproject/Department.java | 14 ++- .../DepartmentUnitTests.java | 106 ++++++++++++++++++ 2 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java index c98ee691..ce105b40 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java @@ -34,7 +34,7 @@ public Department(String deptCode, HashMap courses, String depar * @return The number of majors. */ public int getNumberOfMajors() { - return -this.numberOfMajors; + return this.numberOfMajors; } /** @@ -43,7 +43,7 @@ public int getNumberOfMajors() { * @return The name of the department chair. */ public String getDepartmentChair() { - return "this.departmentChair"; + return this.departmentChair; } /** @@ -66,7 +66,9 @@ public void addPersonToMajor() { * Decreases the number of majors in the department by one if it's greater than zero. */ public void dropPersonFromMajor() { - numberOfMajors--; + if (numberOfMajors > 0) { + numberOfMajors--; + } } /** @@ -104,10 +106,10 @@ public String toString() { for (Map.Entry entry : courses.entrySet()) { String key = entry.getKey(); Course value = entry.getValue(); - result.append(deptCode).append(" ").append(key).append(": ").append(value.toString()) - .append("\n"); + result.append(deptCode).append(" ").append(key) + .append(": ").append(value.toString()).append("\n"); } - return "result.toString()"; + return result.toString(); } @Serial diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java new file mode 100644 index 00000000..c1021f94 --- /dev/null +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java @@ -0,0 +1,106 @@ +package dev.coms4156.project.individualproject; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashMap; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; + +/** + * Unit tests for the Department class. + * This class contains tests to verify the behavior and functionality of the Department class. + * It uses Spring's testing framework to set up the environment and run the tests. + */ +@SpringBootTest +@ContextConfiguration +@TestMethodOrder(OrderAnnotation.class) +public class DepartmentUnitTests { + + /** + * Sets up test data for a {@link Department} with two {@link Course} objects. + * + *

This method runs once before all tests, creating two courses and adding them to + * a department. The department is stored in {@code testDepartment} for use in tests.

+ */ + @BeforeAll + public static void setupCourseForTesting() { + // Creating Courses + Course course1 = new Course("Henry Yuen", "HAV 209", "10:10-11:25", 80); + Course course2 = new Course("Suman Jana", "MUDD 1127", "1:10-2:25", 65); + + // Create a HashMap of courses + HashMap courses = new HashMap<>(); + courses.put("W4281", course1); + courses.put("W4181", course2); + + testDepartment = new Department("COMS", courses, "John Doe", 0); + } + + @Test + @Order(1) + public void toStringTest() { + String expectedResult = "COMS W4281: \nInstructor: Henry Yuen; Location: HAV 209; " + + "Time: 10:10-11:25\nCOMS W4181: \nInstructor: Suman Jana; " + + "Location: MUDD 1127; Time: 1:10-2:25\n"; + assertEquals(expectedResult, testDepartment.toString()); + } + + @Test + @Order(2) + public void dropPersonFromMajorTest1() { + int expectedResult = 0; + assertEquals(expectedResult, testDepartment.getNumberOfMajors()); + + testDepartment.dropPersonFromMajor(); + assertEquals(expectedResult, testDepartment.getNumberOfMajors()); + } + + @Test + @Order(3) + public void addPersonToMajorTest() { + int expectedResult = 0; + assertEquals(expectedResult, testDepartment.getNumberOfMajors()); + + expectedResult = 1; + testDepartment.addPersonToMajor(); + assertEquals(expectedResult, testDepartment.getNumberOfMajors()); + } + + @Test + @Order(4) + public void dropPersonFromMajorTest2() { + int expectedResult = 1; + assertEquals(expectedResult, testDepartment.getNumberOfMajors()); + + expectedResult = 0; + testDepartment.dropPersonFromMajor(); + assertEquals(expectedResult, testDepartment.getNumberOfMajors()); + } + + @Test + @Order(5) + public void addCreateCourseTest() { + testDepartment.createCourse("W4156", "Gail Kaiser", "Zoom", "10:10-11:25", 200); + + String result = testDepartment.toString(); + + String course1 = "COMS W4281: \nInstructor: Henry Yuen; Location: HAV 209; Time: 10:10-11:25"; + assertTrue(result.contains(course1)); + + String course2 = "COMS W4181: \nInstructor: Suman Jana; Location: MUDD 1127; Time: 1:10-2:25"; + assertTrue(result.contains(course2)); + + String course3 = "COMS W4156: \nInstructor: Gail Kaiser; Location: Zoom; Time: 10:10-11:25"; + assertTrue(result.contains(course3)); + } + + /** The test course instance used for testing. */ + public static Department testDepartment; +} + From 85192ead881f6a0616bb939516abf825d97094b6 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 15:31:05 -0400 Subject: [PATCH 16/59] extended coverage for course unit test --- .../individualproject/CourseUnitTests.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java index 356e19df..d7b40f54 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java @@ -23,7 +23,6 @@ public class CourseUnitTests { @BeforeAll public static void setupCourseForTesting() { testCourse = new Course("Griffin Newbold", "417 IAB", "11:40-12:55", 250); - testCourse.setEnrolledStudentCount(256); } @Test @@ -34,21 +33,28 @@ public void toStringTest() { } @Test - public void isCourseFullTest() { + @Order(2) + public void enrollDropWhenFullTest() { boolean expectedResult = true; assertEquals(expectedResult, testCourse.isCourseFull()); - } - - @Test - public void enrollStudentTest() { - boolean expectedResult = false; + + expectedResult = false; assertEquals(expectedResult, testCourse.enrollStudent()); + + expectedResult = true; + assertEquals(expectedResult, testCourse.dropStudent()); } @Test - public void dropStudentTest() { - boolean expectedResult = true; + @Order(3) + public void enrollDropWhenEmptyTest() { + testCourse.setEnrolledStudentCount(0); + + boolean expectedResult = false; assertEquals(expectedResult, testCourse.dropStudent()); + + expectedResult = true; + assertEquals(expectedResult, testCourse.enrollStudent()); } @Test From 93cc6f2bc85139f59d9fb407fe306aeed0919d0c Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 16:38:00 -0400 Subject: [PATCH 17/59] Cleaned up --- .../coms4156/project/individualproject/DepartmentUnitTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java index c1021f94..885bc0a6 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java @@ -29,7 +29,7 @@ public class DepartmentUnitTests { * a department. The department is stored in {@code testDepartment} for use in tests.

*/ @BeforeAll - public static void setupCourseForTesting() { + public static void setupDepartmentForTesting() { // Creating Courses Course course1 = new Course("Henry Yuen", "HAV 209", "10:10-11:25", 80); Course course2 = new Course("Suman Jana", "MUDD 1127", "1:10-2:25", 65); From 6bea8609eacb5158c30518814ac66ce4cec33e4a Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 16:59:13 -0400 Subject: [PATCH 18/59] cleaned up department.java using pmd --- .../coms4156/project/individualproject/Department.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java index ce105b40..1934208b 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java @@ -2,7 +2,6 @@ import java.io.Serial; import java.io.Serializable; -import java.util.HashMap; import java.util.Map; /** @@ -20,7 +19,7 @@ public class Department implements Serializable { * @param departmentChair The name of the department chair. * @param numberOfMajors The number of majors in the department. */ - public Department(String deptCode, HashMap courses, String departmentChair, + public Department(String deptCode, Map courses, String departmentChair, int numberOfMajors) { this.courses = courses; this.departmentChair = departmentChair; @@ -51,7 +50,7 @@ public String getDepartmentChair() { * * @return A HashMap containing courses offered by the department. */ - public HashMap getCourseSelection() { + public Map getCourseSelection() { return this.courses; } @@ -101,6 +100,7 @@ public void createCourse(String courseId, String instructorName, String courseLo * * @return A string representing the department. */ + @Override public String toString() { StringBuilder result = new StringBuilder(); for (Map.Entry entry : courses.entrySet()) { @@ -114,7 +114,7 @@ public String toString() { @Serial private static final long serialVersionUID = 234567L; - private HashMap courses; + private Map courses; private String departmentChair; private String deptCode; private int numberOfMajors; From 0f07b1b91d3d0126a8c5f11f92cb29fcd02a189f Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 17:15:58 -0400 Subject: [PATCH 19/59] cleanup --- .../project/individualproject/Course.java | 2 +- .../IndividualProjectApplication.java | 17 ++++--- .../individualproject/DatabaseUnitTests.java | 45 +++++++++++++++++++ 3 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index cdd4f273..75dd210a 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -68,7 +68,7 @@ public String getCourseTimeSlot() { return this.courseTimeSlot; } - + @Override public String toString() { return "\nInstructor: " + instructorName + "; Location: " + courseLocation + "; Time: " + courseTimeSlot; diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java index f4cc561a..653f4cae 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java @@ -2,6 +2,8 @@ import jakarta.annotation.PreDestroy; import java.util.HashMap; +import java.util.logging.Level; +import java.util.logging.Logger; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -16,6 +18,10 @@ @SpringBootApplication public class IndividualProjectApplication implements CommandLineRunner { + private static final Logger logger = Logger.getLogger( + IndividualProjectApplication.class.getName() + ); + /** * The main launcher for the service all it does * is make a call to the overridden run method. @@ -35,17 +41,18 @@ public static void main(String[] args) { * * @param args A {@code String[]} of any potential runtime args */ - public void run(String[] args) { + @Override + public void run(String... args) { for (String arg : args) { - if (arg.equals("setup")) { + if ("setup".equals(arg)) { myFileDatabase = new MyFileDatabase(1, "./data.txt"); resetDataFile(); - System.out.println("System Setup"); + logger.log(Level.INFO, "System Setup"); return; } } myFileDatabase = new MyFileDatabase(0, "./data.txt"); - System.out.println("Start up"); + logger.log(Level.INFO, "Start up"); } /** @@ -291,7 +298,7 @@ public void resetDataFile() { */ @PreDestroy public void onTermination() { - System.out.println("Termination"); + logger.log(Level.INFO, "Termination"); if (saveData) { myFileDatabase.saveContentsToFile(); } diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java new file mode 100644 index 00000000..ed16840a --- /dev/null +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java @@ -0,0 +1,45 @@ +package dev.coms4156.project.individualproject; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; + +/** + * Unit tests for the Course class. + * This class contains tests to verify the behavior and functionality of the Course class. + * It uses Spring's testing framework to set up the environment and run the tests. + */ +@SpringBootTest +@ContextConfiguration +@TestMethodOrder(OrderAnnotation.class) +public class DatabaseUnitTests { + + @Nested + @TestMethodOrder(OrderAnnotation.class) + class FlagZeroTests { + + @BeforeAll + public static void setupDatabaseFlagZeroTest() { + testDatabase = new MyFileDatabase(0, "./data.txt"); + System.out.println(testDatabase.toString()); + } + + } + + @Nested + @TestMethodOrder(OrderAnnotation.class) + class FlagOneTests { + + } + + /** The test course instance used for testing. */ + public static MyFileDatabase testDatabase; +} + From bd106983dce1660b6eb908dc305ffccc1db5c6a0 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 17:30:01 -0400 Subject: [PATCH 20/59] added plugin for pmd --- IndividualProject/pom.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/IndividualProject/pom.xml b/IndividualProject/pom.xml index 6d87d4c9..90864538 100644 --- a/IndividualProject/pom.xml +++ b/IndividualProject/pom.xml @@ -107,6 +107,16 @@ + + org.apache.maven.plugins + maven-pmd-plugin + 3.15.0 + + + category/java/bestpractices.xml + + + From b4c5cebb747668afec28a5a0319f09db44eb9d84 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 17:30:41 -0400 Subject: [PATCH 21/59] clean based on pmd violations --- .../individualproject/MyFileDatabase.java | 25 ++++--- .../individualproject/RouteController.java | 65 +++++++++++-------- 2 files changed, 52 insertions(+), 38 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java index b11a6233..bc96f0f1 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java @@ -5,14 +5,19 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import java.util.HashMap; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; /** * This class represents a file-based database containing department mappings. */ public class MyFileDatabase { + private static final Logger logger = Logger.getLogger( + MyFileDatabase.class.getName() + ); + /** * Constructs a MyFileDatabase object and loads up the data structure with * the contents of the file. @@ -32,7 +37,7 @@ public MyFileDatabase(int flag, String filePath) { * * @param mapping the mapping of department names to Department objects */ - public void setMapping(HashMap mapping) { + public void setMapping(Map mapping) { this.departmentMapping = mapping; } @@ -41,16 +46,16 @@ public void setMapping(HashMap mapping) { * * @return the deserialized department mapping */ - public HashMap deSerializeObjectFromFile() { + public Map deSerializeObjectFromFile() { try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(filePath))) { Object obj = in.readObject(); - if (obj instanceof HashMap) { - return (HashMap) obj; + if (obj instanceof Map) { + return (Map) obj; } else { throw new IllegalArgumentException("Invalid object type in file."); } } catch (IOException | ClassNotFoundException e) { - e.printStackTrace(); + logger.log(Level.SEVERE, "An exception occurred while saving contents to file", e); return null; } } @@ -62,9 +67,9 @@ public HashMap deSerializeObjectFromFile() { public void saveContentsToFile() { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath))) { out.writeObject(departmentMapping); - System.out.println("Object serialized successfully."); + logger.log(Level.INFO, "Object serialized successfully."); } catch (IOException e) { - e.printStackTrace(); + logger.log(Level.SEVERE, "An exception occurred while saving contents to file", e); } } @@ -73,7 +78,7 @@ public void saveContentsToFile() { * * @return the department mapping */ - public HashMap getDepartmentMapping() { + public Map getDepartmentMapping() { return this.departmentMapping; } @@ -97,5 +102,5 @@ public String toString() { private String filePath; /** The mapping of department names to Department objects. */ - private HashMap departmentMapping; + private Map departmentMapping; } diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 3815ab84..fa925f84 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -1,6 +1,8 @@ package dev.coms4156.project.individualproject; -import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -15,6 +17,10 @@ @RestController public class RouteController { + private static final Logger logger = Logger.getLogger( + RouteController.class.getName() + ); + /** * Redirects to the homepage. * @@ -39,7 +45,7 @@ public String index() { @GetMapping(value = "/retrieveDept", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity retrieveDepartment(@RequestParam(value = "deptCode") String deptCode) { try { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); if (!departmentMapping.containsKey(deptCode.toUpperCase())) { @@ -74,9 +80,9 @@ public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String try { boolean doesDepartmentExists = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; if (doesDepartmentExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); if (!coursesMapping.containsKey(Integer.toString(courseCode))) { @@ -114,9 +120,9 @@ public ResponseEntity isCourseFull(@RequestParam(value = "deptCode") String d doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -145,7 +151,7 @@ public ResponseEntity getMajorCtFromDept(@RequestParam(value = "deptCode") St try { boolean doesDepartmentExists = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; if (doesDepartmentExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); return new ResponseEntity<>("There are: " + -departmentMapping.get(deptCode) .getNumberOfMajors() + " majors in the department", HttpStatus.OK); @@ -171,7 +177,7 @@ public ResponseEntity identifyDeptChair(@RequestParam(value = "deptCode") Str try { boolean doesDepartmentExists = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; if (doesDepartmentExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); return new ResponseEntity<>(departmentMapping.get(deptCode).getDepartmentChair() + " is " + "the department chair.", HttpStatus.OK); @@ -203,9 +209,9 @@ public ResponseEntity findCourseLocation(@RequestParam(value = "deptCode") St doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -241,9 +247,9 @@ public ResponseEntity findCourseInstructor(@RequestParam(value = "deptCode") doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -279,13 +285,13 @@ public ResponseEntity findCourseTime(@RequestParam(value = "deptCode") String doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); - return new ResponseEntity<>("The course meets at: " + "some time ", + return new ResponseEntity<>("The course meets at: " + requestedCourse.getCourseTimeSlot(), HttpStatus.OK); } else { return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); @@ -309,7 +315,7 @@ public ResponseEntity addMajorToDept(@RequestParam(value = "deptCode") String try { boolean doesDepartmentExists = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; if (doesDepartmentExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); Department specifiedDept = departmentMapping.get(deptCode); @@ -336,7 +342,7 @@ public ResponseEntity removeMajorFromDept(@RequestParam(value = "deptCode") S try { boolean doesDepartmentExists = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; if (doesDepartmentExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); Department specifiedDept = departmentMapping.get(deptCode); @@ -368,9 +374,9 @@ public ResponseEntity dropStudent(@RequestParam(value = "deptCode") String de doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -406,9 +412,9 @@ public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") St doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -443,9 +449,9 @@ public ResponseEntity changeCourseTime(@RequestParam(value = "deptCode") Stri doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -481,9 +487,9 @@ public ResponseEntity changeCourseTeacher(@RequestParam(value = "deptCode") S doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -515,9 +521,9 @@ public ResponseEntity changeCourseLocation(@RequestParam(value = "deptCode") doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; if (doesCourseExists) { - HashMap departmentMapping; + Map departmentMapping; departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); - HashMap coursesMapping; + Map coursesMapping; coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); @@ -532,7 +538,10 @@ public ResponseEntity changeCourseLocation(@RequestParam(value = "deptCode") } private ResponseEntity handleException(Exception e) { - System.out.println(e.toString()); + if (logger.isLoggable(Level.SEVERE)) { + logger.log(Level.SEVERE, "An exception occurred: {0}", e.toString()); + } + logger.log(Level.SEVERE, "Stack trace: ", e); return new ResponseEntity<>("An Error has occurred", HttpStatus.OK); } From 0d6d7c9c536101d6ed08a745500902a2563b389c Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 21:00:26 -0400 Subject: [PATCH 22/59] started making database unit tests, pass --- .../individualproject/DatabaseUnitTests.java | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java index ed16840a..88b8d8c9 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java @@ -1,7 +1,11 @@ package dev.coms4156.project.individualproject; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.HashMap; +import java.util.Map; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; import org.junit.jupiter.api.Nested; @@ -28,14 +32,165 @@ class FlagZeroTests { @BeforeAll public static void setupDatabaseFlagZeroTest() { testDatabase = new MyFileDatabase(0, "./data.txt"); + } + + @Test + @Order(1) + public void toStringTest() { + System.out.println("Flag 0 - MyFileDatabase content:"); System.out.println(testDatabase.toString()); } + @Test + @Order(2) + public void setMappingTest() { + // english department + Course eng1 = new Course("Jane Austen", "101 SCH", "9:00-10:15", 100); + eng1.setEnrolledStudentCount(95); + Course eng2 = new Course("Mark Twain", "201 SCH", "11:00-12:15", 80); + eng2.setEnrolledStudentCount(75); + + HashMap englishCourses = new HashMap<>(); + englishCourses.put("1011", eng1); + englishCourses.put("1021", eng2); + + // math department + Course math1 = new Course("Isaac Newton", "305 MATH", "10:00-11:15", 150); + math1.setEnrolledStudentCount(140); + Course math2 = new Course("Albert Einstein", "310 MATH", "2:00-3:15", 120); + math2.setEnrolledStudentCount(110); + + HashMap mathCourses = new HashMap<>(); + mathCourses.put("1010", math1); + mathCourses.put("2035", math2); + + // history department + Course hist1 = new Course("Howard Zinn", "101 HAM", "9:00-10:30", 90); + hist1.setEnrolledStudentCount(85); + Course hist2 = new Course("Doris Kearns Goodwin", "202 HAM", "1:00-2:30", 75); + hist2.setEnrolledStudentCount(70); + + HashMap historyCourses = new HashMap<>(); + historyCourses.put("3500", hist1); + historyCourses.put("3830", hist2); + + // final map + HashMap departmentMapping = new HashMap<>(); + departmentMapping.put("ENGL", new Department("ENGL", englishCourses, + "Emily Dickinson", 500)); + departmentMapping.put("MATH", new Department("MATH", mathCourses, + "Euclid", 1000)); + departmentMapping.put("HIST", new Department("HIST", historyCourses, + "David McCullough", 300)); + + testDatabase.setMapping(departmentMapping); + } + + @Test + @Order(3) + public void newMappingTest() { + Map map = testDatabase.getDepartmentMapping(); + assertTrue(map.containsKey("HIST")); + assertFalse(map.containsKey("ELEN")); + + assertEquals(map.get("ENGL").getCourseSelection().get("1011") + .getInstructorName(), "Jane Austen"); + assertEquals(map.get("MATH").getNumberOfMajors(), 1000); + } + + @Test + @Order(4) + public void saveContentsToFileTest() { + testDatabase.saveContentsToFile(); + } + } @Nested @TestMethodOrder(OrderAnnotation.class) class FlagOneTests { + + @BeforeAll + public static void setupDatabaseFlagOneTest() { + testDatabase = new MyFileDatabase(1, "./dummy-data.txt"); + } + + @Test + @Order(1) + public void setMappingOneTest() { + // anthropology department + Course anth1 = new Course("Margaret Mead", "101 MIL", "10:00-11:15", 120); + anth1.setEnrolledStudentCount(110); + Course anth2 = new Course("Franz Boas", "201 MIL", "1:00-2:15", 80); + anth2.setEnrolledStudentCount(70); + + HashMap anthropologyCourses = new HashMap<>(); + anthropologyCourses.put("1001", anth1); + anthropologyCourses.put("1002", anth2); + + // linguistics department + Course ling1 = new Course("Noam Chomsky", "101 NWC", "9:00-10:15", 90); + ling1.setEnrolledStudentCount(85); + Course ling2 = new Course("Ferdinand de Saussure", "202 NWC", "11:00-12:15", 100); + ling2.setEnrolledStudentCount(95); + + HashMap linguisticsCourses = new HashMap<>(); + linguisticsCourses.put("1101", ling1); + linguisticsCourses.put("2202", ling2); + + // music department + Course music1 = new Course("Ludwig van Beethoven", "101 DOD", "3:00-4:15", 150); + music1.setEnrolledStudentCount(140); + Course music2 = new Course("Johann Sebastian Bach", "202 DOD", "4:30-5:45", 120); + music2.setEnrolledStudentCount(110); + + HashMap musicCourses = new HashMap<>(); + musicCourses.put("3001", music1); + musicCourses.put("3002", music2); + + // final map + HashMap departmentMapping = new HashMap<>(); + departmentMapping.put("ANTH", new Department("ANTH", anthropologyCourses, + "Claude Lévi-Strauss", 600)); + departmentMapping.put("LING", new Department("LING", linguisticsCourses, + "Edward Sapir", 700)); + departmentMapping.put("MUSI", new Department("MUSI", musicCourses, + "Wolfgang Amadeus Mozart", 500)); + + testDatabase.setMapping(departmentMapping); + } + + @Test + @Order(2) + public void newMappingOneTest() { + Map map = testDatabase.getDepartmentMapping(); + assertTrue(map.containsKey("ANTH")); + assertFalse(map.containsKey("ELEN")); + assertFalse(map.containsKey("COMS")); + assertFalse(map.containsKey("HIST")); + + assertEquals(map.get("ANTH").getCourseSelection().get("1001") + .getCourseLocation(), "101 MIL"); + assertEquals(map.get("LING").getCourseSelection().get("1101") + .getCourseTimeSlot(), "9:00-10:15"); + assertEquals(map.get("MUSI").getCourseSelection().size(), 2); + + assertEquals(map.get("MUSI").getCourseSelection().get("3002") + .getCourseLocation(), "202 DOD"); + } + + @Test + @Order(3) + public void toStringOneTest() { + System.out.println("Flag 1 - MyFileDatabase content:"); + System.out.println(testDatabase.toString()); + } + + @Test + @Order(4) + public void saveContentsOneToFileTest() { + testDatabase.saveContentsToFile(); + } } From 2209691c15c6bf34cea59c624e886848029b10ff Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 21:47:52 -0400 Subject: [PATCH 23/59] added documentation --- README.md | 21 ++++++++++++++++++--- bugs.txt | 2 ++ citations.txt | 8 ++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 bugs.txt diff --git a/README.md b/README.md index 64154cfd..98403d43 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,21 @@ # COMS 4156: Individual Project +This project is done using Java. + +To set up the project, I navigated to the IndividualProject folder and ran the following command: +```mvn spring-boot:run -Dspring-boot.run.arguments="setup"``` + +## Part 1 +To run stylecheck, I use the following command in the IndividualProject directory: +```mvn checkstyle:check``` + ## Part 2 -To run JaCoCo, I ran the following command: -- `mvn clean test` -- `mvn jacoco:report` \ No newline at end of file +To run JaCoCo, I ran the following command in the IndividualProject directory: +- `mvn test` +- `mvn jacoco:report` + +I then opened the file `IndividualProject/target/site/jacoco/index.html` to see the coverage. + +## Part 3 +I used PMD in this project as a static bug finder, executing the following command to get a report: +```mvn pmd:check``` \ No newline at end of file diff --git a/bugs.txt b/bugs.txt new file mode 100644 index 00000000..582afd99 --- /dev/null +++ b/bugs.txt @@ -0,0 +1,2 @@ +Course.java +- \ No newline at end of file diff --git a/citations.txt b/citations.txt index f4186598..c5d30f6f 100644 --- a/citations.txt +++ b/citations.txt @@ -1,4 +1,12 @@ Part 1: Code Clean Up - https://docs.opendaylight.org/en/latest/contributor-guides/coding-guidelines/coding-guidelines-java.html - https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html +- https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716 +Part 2 & 3: Test Suite Creation & Debugging +- https://mkyong.com/maven/maven-jacoco-code-coverage-example/ +- https://stackoverflow.com/questions/22836455/jacoco-report-generation-using-maven +- https://www.baeldung.com/junit-5-test-order +- https://www.geeksforgeeks.org/junit-5-test-execution-order/ +- https://www.baeldung.com/junit-5-nested-test-classes +- https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html \ No newline at end of file From 7a21e60d30742134514facf618474d917a34177b Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 22:11:11 -0400 Subject: [PATCH 24/59] made unit tests for MyFileDatabase --- IndividualProject/data.txt | Bin 0 -> 3864 bytes IndividualProject/dummy-data.txt | Bin 0 -> 991 bytes IndividualProject/invalid-object.ser | Bin 0 -> 31 bytes .../individualproject/MyFileDatabase.java | 4 + .../individualproject/CourseUnitTests.java | 39 +++-- .../individualproject/DatabaseUnitTests.java | 156 ++++++++---------- .../DepartmentUnitTests.java | 46 +++++- 7 files changed, 142 insertions(+), 103 deletions(-) create mode 100644 IndividualProject/data.txt create mode 100644 IndividualProject/dummy-data.txt create mode 100644 IndividualProject/invalid-object.ser diff --git a/IndividualProject/data.txt b/IndividualProject/data.txt new file mode 100644 index 0000000000000000000000000000000000000000..52e564eefed9f7ed22bd3f2b753539f8209f0504 GIT binary patch literal 3864 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 literal 0 HcmV?d00001 diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java index bc96f0f1..43448cb3 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/MyFileDatabase.java @@ -1,6 +1,7 @@ package dev.coms4156.project.individualproject; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; @@ -54,6 +55,9 @@ public Map deSerializeObjectFromFile() { } else { throw new IllegalArgumentException("Invalid object type in file."); } + } catch (FileNotFoundException e) { + logger.log(Level.WARNING, "File not found: {0}", filePath); + return null; } catch (IOException | ClassNotFoundException e) { logger.log(Level.SEVERE, "An exception occurred while saving contents to file", e); return null; diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java index d7b40f54..3395f0ca 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CourseUnitTests.java @@ -1,6 +1,8 @@ package dev.coms4156.project.individualproject; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.MethodOrderer.OrderAnnotation; @@ -35,14 +37,12 @@ public void toStringTest() { @Test @Order(2) public void enrollDropWhenFullTest() { - boolean expectedResult = true; - assertEquals(expectedResult, testCourse.isCourseFull()); - - expectedResult = false; - assertEquals(expectedResult, testCourse.enrollStudent()); - - expectedResult = true; - assertEquals(expectedResult, testCourse.dropStudent()); + testCourse.setEnrolledStudentCount(250); + + assertTrue(testCourse.isCourseFull()); + assertFalse(testCourse.enrollStudent()); + assertTrue(testCourse.dropStudent()); + assertTrue(testCourse.enrollStudent()); } @Test @@ -50,11 +50,8 @@ public void enrollDropWhenFullTest() { public void enrollDropWhenEmptyTest() { testCourse.setEnrolledStudentCount(0); - boolean expectedResult = false; - assertEquals(expectedResult, testCourse.dropStudent()); - - expectedResult = true; - assertEquals(expectedResult, testCourse.enrollStudent()); + assertFalse(testCourse.dropStudent()); + assertTrue(testCourse.enrollStudent()); } @Test @@ -87,6 +84,22 @@ public void reassignTimeTest() { assertEquals(expectedResult, testCourse.getCourseTimeSlot()); } + @Test + @Order(4) + public void enrollWhenOneSeatLeftTest() { + testCourse.setEnrolledStudentCount(249); + assertTrue(testCourse.enrollStudent()); + assertTrue(testCourse.isCourseFull()); + } + + @Test + @Order(5) + public void dropWhenOneStudentLeftTest() { + testCourse.setEnrolledStudentCount(1); + assertTrue(testCourse.dropStudent()); + assertFalse(testCourse.isCourseFull()); + } + /** The test course instance used for testing. */ public static Course testCourse; } diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java index 88b8d8c9..a3d27b05 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java @@ -2,8 +2,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.io.File; import java.util.HashMap; import java.util.Map; import org.junit.jupiter.api.BeforeAll; @@ -25,96 +29,80 @@ @TestMethodOrder(OrderAnnotation.class) public class DatabaseUnitTests { + private static final String VALID_FILE_PATH = "./data.txt"; + private static final String INVALID_FILE_PATH = "./invalid-object.ser"; + private static final String NON_EXISTENT_FILE_PATH = "./nonexistent.txt"; + @Nested @TestMethodOrder(OrderAnnotation.class) class FlagZeroTests { - + @BeforeAll public static void setupDatabaseFlagZeroTest() { - testDatabase = new MyFileDatabase(0, "./data.txt"); + // Initialize with a valid file path + testDatabase = new MyFileDatabase(0, VALID_FILE_PATH); } - + @Test @Order(1) - public void toStringTest() { - System.out.println("Flag 0 - MyFileDatabase content:"); - System.out.println(testDatabase.toString()); + public void deserializeValidFileTest() { + assertNotNull(testDatabase.getDepartmentMapping()); } - + @Test @Order(2) - public void setMappingTest() { - // english department - Course eng1 = new Course("Jane Austen", "101 SCH", "9:00-10:15", 100); - eng1.setEnrolledStudentCount(95); - Course eng2 = new Course("Mark Twain", "201 SCH", "11:00-12:15", 80); - eng2.setEnrolledStudentCount(75); - - HashMap englishCourses = new HashMap<>(); - englishCourses.put("1011", eng1); - englishCourses.put("1021", eng2); - - // math department - Course math1 = new Course("Isaac Newton", "305 MATH", "10:00-11:15", 150); - math1.setEnrolledStudentCount(140); - Course math2 = new Course("Albert Einstein", "310 MATH", "2:00-3:15", 120); - math2.setEnrolledStudentCount(110); - - HashMap mathCourses = new HashMap<>(); - mathCourses.put("1010", math1); - mathCourses.put("2035", math2); - - // history department - Course hist1 = new Course("Howard Zinn", "101 HAM", "9:00-10:30", 90); - hist1.setEnrolledStudentCount(85); - Course hist2 = new Course("Doris Kearns Goodwin", "202 HAM", "1:00-2:30", 75); - hist2.setEnrolledStudentCount(70); - - HashMap historyCourses = new HashMap<>(); - historyCourses.put("3500", hist1); - historyCourses.put("3830", hist2); - - // final map - HashMap departmentMapping = new HashMap<>(); - departmentMapping.put("ENGL", new Department("ENGL", englishCourses, - "Emily Dickinson", 500)); - departmentMapping.put("MATH", new Department("MATH", mathCourses, - "Euclid", 1000)); - departmentMapping.put("HIST", new Department("HIST", historyCourses, - "David McCullough", 300)); - - testDatabase.setMapping(departmentMapping); + public void handleInvalidFileFormatTest() { + assertThrows(IllegalArgumentException.class, () -> { + new MyFileDatabase(0, INVALID_FILE_PATH); + }); } - + @Test @Order(3) - public void newMappingTest() { - Map map = testDatabase.getDepartmentMapping(); - assertTrue(map.containsKey("HIST")); - assertFalse(map.containsKey("ELEN")); - - assertEquals(map.get("ENGL").getCourseSelection().get("1011") - .getInstructorName(), "Jane Austen"); - assertEquals(map.get("MATH").getNumberOfMajors(), 1000); + public void handleNonExistentFileTest() { + MyFileDatabase nonExistentDatabase = new MyFileDatabase(0, NON_EXISTENT_FILE_PATH); + assertNull(nonExistentDatabase.getDepartmentMapping(), + "Non-existent file should return null"); } - + @Test @Order(4) public void saveContentsToFileTest() { testDatabase.saveContentsToFile(); - } + File file = new File(VALID_FILE_PATH); + assertTrue(file.exists(), "File should exist"); + } + + @Test + @Order(5) + public void deserializeFileAfterSaveTest() { + MyFileDatabase reloadedDatabase = new MyFileDatabase(0, VALID_FILE_PATH); + Map loadedMapping = reloadedDatabase.getDepartmentMapping(); + + assertNotNull(loadedMapping); + assertEquals(loadedMapping.size(), testDatabase.getDepartmentMapping().size(), + "Reloaded mapping should have the same size as saved mapping"); + } + + @Test + @Order(6) + public void invalidObjectTypeInFileTest() { + testDatabase.setMapping(null); + testDatabase.saveContentsToFile(); + assertNull(testDatabase.getDepartmentMapping(), "Should return null when mapping is null."); + } } - + @Nested @TestMethodOrder(OrderAnnotation.class) class FlagOneTests { - + @BeforeAll public static void setupDatabaseFlagOneTest() { testDatabase = new MyFileDatabase(1, "./dummy-data.txt"); } - + @Test @Order(1) public void setMappingOneTest() { @@ -123,43 +111,43 @@ public void setMappingOneTest() { anth1.setEnrolledStudentCount(110); Course anth2 = new Course("Franz Boas", "201 MIL", "1:00-2:15", 80); anth2.setEnrolledStudentCount(70); - + HashMap anthropologyCourses = new HashMap<>(); anthropologyCourses.put("1001", anth1); anthropologyCourses.put("1002", anth2); - + // linguistics department Course ling1 = new Course("Noam Chomsky", "101 NWC", "9:00-10:15", 90); ling1.setEnrolledStudentCount(85); Course ling2 = new Course("Ferdinand de Saussure", "202 NWC", "11:00-12:15", 100); ling2.setEnrolledStudentCount(95); - + HashMap linguisticsCourses = new HashMap<>(); linguisticsCourses.put("1101", ling1); linguisticsCourses.put("2202", ling2); - + // music department Course music1 = new Course("Ludwig van Beethoven", "101 DOD", "3:00-4:15", 150); music1.setEnrolledStudentCount(140); Course music2 = new Course("Johann Sebastian Bach", "202 DOD", "4:30-5:45", 120); music2.setEnrolledStudentCount(110); - + HashMap musicCourses = new HashMap<>(); musicCourses.put("3001", music1); musicCourses.put("3002", music2); - + // final map HashMap departmentMapping = new HashMap<>(); - departmentMapping.put("ANTH", new Department("ANTH", anthropologyCourses, - "Claude Lévi-Strauss", 600)); - departmentMapping.put("LING", new Department("LING", linguisticsCourses, - "Edward Sapir", 700)); - departmentMapping.put("MUSI", new Department("MUSI", musicCourses, - "Wolfgang Amadeus Mozart", 500)); - + departmentMapping.put("ANTH", new Department("ANTH", anthropologyCourses, + "Claude Lévi-Strauss", 600)); + departmentMapping.put("LING", new Department("LING", linguisticsCourses, + "Edward Sapir", 700)); + departmentMapping.put("MUSI", new Department("MUSI", musicCourses, + "Wolfgang Amadeus Mozart", 500)); + testDatabase.setMapping(departmentMapping); } - + @Test @Order(2) public void newMappingOneTest() { @@ -168,30 +156,30 @@ public void newMappingOneTest() { assertFalse(map.containsKey("ELEN")); assertFalse(map.containsKey("COMS")); assertFalse(map.containsKey("HIST")); - + assertEquals(map.get("ANTH").getCourseSelection().get("1001") - .getCourseLocation(), "101 MIL"); + .getCourseLocation(), "101 MIL"); assertEquals(map.get("LING").getCourseSelection().get("1101") - .getCourseTimeSlot(), "9:00-10:15"); + .getCourseTimeSlot(), "9:00-10:15"); assertEquals(map.get("MUSI").getCourseSelection().size(), 2); - + assertEquals(map.get("MUSI").getCourseSelection().get("3002") - .getCourseLocation(), "202 DOD"); + .getCourseLocation(), "202 DOD"); } - + @Test @Order(3) public void toStringOneTest() { System.out.println("Flag 1 - MyFileDatabase content:"); System.out.println(testDatabase.toString()); } - + @Test @Order(4) public void saveContentsOneToFileTest() { testDatabase.saveContentsToFile(); } - + } /** The test course instance used for testing. */ diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java index 885bc0a6..069b66e6 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DepartmentUnitTests.java @@ -33,7 +33,7 @@ public static void setupDepartmentForTesting() { // Creating Courses Course course1 = new Course("Henry Yuen", "HAV 209", "10:10-11:25", 80); Course course2 = new Course("Suman Jana", "MUDD 1127", "1:10-2:25", 65); - + // Create a HashMap of courses HashMap courses = new HashMap<>(); courses.put("W4281", course1); @@ -46,8 +46,8 @@ public static void setupDepartmentForTesting() { @Order(1) public void toStringTest() { String expectedResult = "COMS W4281: \nInstructor: Henry Yuen; Location: HAV 209; " - + "Time: 10:10-11:25\nCOMS W4181: \nInstructor: Suman Jana; " - + "Location: MUDD 1127; Time: 1:10-2:25\n"; + + "Time: 10:10-11:25\nCOMS W4181: \nInstructor: Suman Jana; " + + "Location: MUDD 1127; Time: 1:10-2:25\n"; assertEquals(expectedResult, testDepartment.toString()); } @@ -89,17 +89,51 @@ public void addCreateCourseTest() { testDepartment.createCourse("W4156", "Gail Kaiser", "Zoom", "10:10-11:25", 200); String result = testDepartment.toString(); - + String course1 = "COMS W4281: \nInstructor: Henry Yuen; Location: HAV 209; Time: 10:10-11:25"; assertTrue(result.contains(course1)); - + String course2 = "COMS W4181: \nInstructor: Suman Jana; Location: MUDD 1127; Time: 1:10-2:25"; assertTrue(result.contains(course2)); - + String course3 = "COMS W4156: \nInstructor: Gail Kaiser; Location: Zoom; Time: 10:10-11:25"; assertTrue(result.contains(course3)); } + @Test + @Order(6) + public void addCourseTest() { + Course newCourse = new Course("Jeffrey Ullman", "Zoom", "3:10-4:25", 150); + testDepartment.addCourse("CS345", newCourse); + + assertTrue(testDepartment.getCourseSelection().containsKey("CS345")); + assertEquals("Jeffrey Ullman", + testDepartment.getCourseSelection().get("CS345").getInstructorName()); + } + + @Test + @Order(7) + public void testAddAndDropMajors() { + testDepartment.addPersonToMajor(); + testDepartment.addPersonToMajor(); + assertEquals(2, testDepartment.getNumberOfMajors()); + + testDepartment.dropPersonFromMajor(); + assertEquals(1, testDepartment.getNumberOfMajors()); + + testDepartment.dropPersonFromMajor(); + assertEquals(0, testDepartment.getNumberOfMajors()); + } + + @Test + @Order(8) + public void testNoCoursesInDepartment() { + Department emptyDepartment = new Department("PHYS", new HashMap<>(), "Albert Einstein", 50); + + assertEquals(0, emptyDepartment.getCourseSelection().size()); + assertEquals("Albert Einstein", emptyDepartment.getDepartmentChair()); + } + /** The test course instance used for testing. */ public static Department testDepartment; } From 535da5ac18142cae513df060b8fde9f702c15191 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Tue, 10 Sep 2024 22:28:46 -0400 Subject: [PATCH 25/59] added dependencies to pom.xml and fixed comments in database unit tests --- IndividualProject/pom.xml | 11 ++++++++++- .../project/individualproject/DatabaseUnitTests.java | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/IndividualProject/pom.xml b/IndividualProject/pom.xml index 90864538..d0efcc93 100644 --- a/IndividualProject/pom.xml +++ b/IndividualProject/pom.xml @@ -21,12 +21,21 @@ org.springframework.boot spring-boot-starter-web - org.springframework.boot spring-boot-starter-test test + + org.ow2.asm + asm + 9.2 + + + net.sourceforge.pmd + pmd-java + 6.40.0 + diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java index a3d27b05..2c404c66 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java @@ -20,8 +20,8 @@ import org.springframework.test.context.ContextConfiguration; /** - * Unit tests for the Course class. - * This class contains tests to verify the behavior and functionality of the Course class. + * Unit tests for the Database class. + * This class contains tests to verify the behavior and functionality of the Database class. * It uses Spring's testing framework to set up the environment and run the tests. */ @SpringBootTest From d2682a60ff0e0f2f43b063e7be3b86bc60d9c535 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 12:23:30 -0400 Subject: [PATCH 26/59] started IndividualProjectApplication unit test with mockito --- IndividualProject/pom.xml | 12 ++ .../IndividualProjectApplication.java | 2 +- ...IndividualProjectApplicationUnitTests.java | 122 ++++++++++++++++++ 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java diff --git a/IndividualProject/pom.xml b/IndividualProject/pom.xml index d0efcc93..a04d6a9c 100644 --- a/IndividualProject/pom.xml +++ b/IndividualProject/pom.xml @@ -36,6 +36,18 @@ pmd-java 6.40.0 + + org.mockito + mockito-core + 4.8.0 + test + + + org.mockito + mockito-inline + 4.8.0 + test + diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java index 653f4cae..2a5f0964 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/IndividualProjectApplication.java @@ -308,4 +308,4 @@ public void onTermination() { //Database Instance public static MyFileDatabase myFileDatabase; private static boolean saveData = true; -} +} \ No newline at end of file diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java new file mode 100644 index 00000000..2b0bbce3 --- /dev/null +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java @@ -0,0 +1,122 @@ +package dev.coms4156.project.individualproject; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.anyMap; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import java.util.logging.LogRecord; +import java.util.logging.Logger; +import java.util.logging.StreamHandler; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.boot.test.context.SpringBootTest; + +/** + * Unit tests for the IndividualProjectApplication class. + * This class contains tests to verify the behavior and functionality of the + * IndividualProjectApplication class. + * It uses Spring's testing framework to set up the environment and run the tests. + */ +@SpringBootTest +public class IndividualProjectApplicationUnitTests { + + public static IndividualProjectApplication testApplication; + public static MyFileDatabase testDatabase; + private Logger logger; + private CustomLoggerHandler logHandler; + + class CustomLoggerHandler extends StreamHandler { + private LogRecord latestLogRecord; + + @Override + public void publish(LogRecord record) { + // Store the most recent log record + latestLogRecord = record; + super.publish(record); + } + + @Override + public void flush() { + super.flush(); + } + + @Override + public void close() throws SecurityException { + super.close(); + } + + // Method to get the latest log record + public LogRecord getLatestLogRecord() { + return latestLogRecord; + } + } + + /** + * Sets up the test environment before each test. + * + *

This method initializes a new instance of the {@code IndividualProjectApplication} + * class and captures the logger output by redirecting to a + * {@code ByteArrayOutputStream}. This allows the test to verify log messages + * generated during the execution of the application. + * + *

Each test can access the logger output through the {@code logOutput} field. + */ + @BeforeEach + public void setup() { + testApplication = new IndividualProjectApplication(); + testDatabase = Mockito.mock(MyFileDatabase.class); + + logger = Logger.getLogger(IndividualProjectApplication.class.getName()); + logHandler = new CustomLoggerHandler(); + logger.addHandler(logHandler); + logger.setLevel(java.util.logging.Level.ALL); + } + + @Test + public void testOverride() { + IndividualProjectApplication.overrideDatabase(testDatabase); + assertSame(testDatabase, IndividualProjectApplication.myFileDatabase, + "myFileDatabase should refer to the mock object after overrideDatabase is called."); + } + + @Test + public void testRunWithSetupArgument() { + testApplication.run("setup"); + assertEquals("Jennifer Blaze", IndividualProjectApplication.myFileDatabase + .getDepartmentMapping().get("PSYC") + .getCourseSelection().get("4493") + .getInstructorName()); + + LogRecord record = logHandler.getLatestLogRecord(); + assertTrue(record.getMessage().contains("System Setup"), "Log should contain 'System Setup'"); + } + + @Test + public void testRunWithoutSetupArgument() { + testApplication.run(); + + LogRecord record = logHandler.getLatestLogRecord(); + assertTrue(record.getMessage().contains("Start up"), "Log should contain 'Start up'"); + } + + @Test + public void testResetDataFile() { + IndividualProjectApplication.overrideDatabase(testDatabase); + testApplication.resetDataFile(); + + verify(testDatabase, times(1)).setMapping(anyMap()); + } + + @Test + public void testOnTerminationSaveDataFalse() { + IndividualProjectApplication.overrideDatabase(testDatabase); + testApplication.onTermination(); + verify(testDatabase, times(0)).saveContentsToFile(); + } + + +} From dee3c6a66209dcf90249290d9a9d865bd2bb64a1 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 12:23:46 -0400 Subject: [PATCH 27/59] started docs on bugs and citations --- bugs.txt | 4 ++++ citations.txt | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/bugs.txt b/bugs.txt index 582afd99..b84beddf 100644 --- a/bugs.txt +++ b/bugs.txt @@ -1,2 +1,6 @@ +what the issue you fixed was, where it was, +and if it has a proper name identified by a static analyzer what that name was + + Course.java - \ No newline at end of file diff --git a/citations.txt b/citations.txt index c5d30f6f..57eac8e4 100644 --- a/citations.txt +++ b/citations.txt @@ -9,4 +9,6 @@ Part 2 & 3: Test Suite Creation & Debugging - https://www.baeldung.com/junit-5-test-order - https://www.geeksforgeeks.org/junit-5-test-execution-order/ - https://www.baeldung.com/junit-5-nested-test-classes -- https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html \ No newline at end of file +- https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html +- https://www.baeldung.com/mockito-junit-5-extension +- https://www.digitalocean.com/community/tutorials/logger-in-java-logging-example \ No newline at end of file From fbd859bebacc014439e1571a42a3076608410437 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 12:38:00 -0400 Subject: [PATCH 28/59] moved custom logger handler class to its own file --- .../CustomLoggerHandler.java | 41 +++++++++++++++++++ ...IndividualProjectApplicationUnitTests.java | 2 - 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 IndividualProject/src/test/java/dev/coms4156/project/individualproject/CustomLoggerHandler.java diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CustomLoggerHandler.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CustomLoggerHandler.java new file mode 100644 index 00000000..d0eb0825 --- /dev/null +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/CustomLoggerHandler.java @@ -0,0 +1,41 @@ +package dev.coms4156.project.individualproject; + +import java.util.logging.LogRecord; +import java.util.logging.Logger; +import java.util.logging.StreamHandler; + +/** + * Custom logger handler that captures the most recent log record. + * Helpful for unit testing. + * + *

This handler overrides the {@code publish()} method to store the latest + * {@code LogRecord} instance, allowing tests or other classes to retrieve + * the most recent log message. It extends the {@code StreamHandler} class. + * + *

The {@code getLatestLogRecord()} method provides access to the most + * recent log record. + */ +public class CustomLoggerHandler extends StreamHandler { + public Logger logger; + private LogRecord latestLogRecord; + + @Override + public void publish(LogRecord record) { + latestLogRecord = record; + super.publish(record); + } + + @Override + public void flush() { + super.flush(); + } + + @Override + public void close() throws SecurityException { + super.close(); + } + + public LogRecord getLatestLogRecord() { + return latestLogRecord; + } +} diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java index 2b0bbce3..3cab8070 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java @@ -34,7 +34,6 @@ class CustomLoggerHandler extends StreamHandler { @Override public void publish(LogRecord record) { - // Store the most recent log record latestLogRecord = record; super.publish(record); } @@ -49,7 +48,6 @@ public void close() throws SecurityException { super.close(); } - // Method to get the latest log record public LogRecord getLatestLogRecord() { return latestLogRecord; } From adc26e2afa7489807b306fdb5bd328e782cd2175 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 17:01:52 -0400 Subject: [PATCH 29/59] figured out how to test route controller --- .../individualproject/RouteController.java | 6 ++--- ...IndividualProjectApplicationUnitTests.java | 24 ------------------- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index fa925f84..c5eb71fb 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -18,7 +18,7 @@ public class RouteController { private static final Logger logger = Logger.getLogger( - RouteController.class.getName() + RouteController.class.getName() ); /** @@ -49,10 +49,10 @@ public ResponseEntity retrieveDepartment(@RequestParam(value = "deptCode") St departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); if (!departmentMapping.containsKey(deptCode.toUpperCase())) { - return new ResponseEntity<>("Department Not Found", HttpStatus.OK); + return new ResponseEntity<>("Department Not Found", HttpStatus.NOT_FOUND); } else { return new ResponseEntity<>(departmentMapping.get(deptCode.toUpperCase()).toString(), - HttpStatus.NOT_FOUND); + HttpStatus.OK); } } catch (Exception e) { diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java index 3cab8070..d0be8795 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java @@ -29,30 +29,6 @@ public class IndividualProjectApplicationUnitTests { private Logger logger; private CustomLoggerHandler logHandler; - class CustomLoggerHandler extends StreamHandler { - private LogRecord latestLogRecord; - - @Override - public void publish(LogRecord record) { - latestLogRecord = record; - super.publish(record); - } - - @Override - public void flush() { - super.flush(); - } - - @Override - public void close() throws SecurityException { - super.close(); - } - - public LogRecord getLatestLogRecord() { - return latestLogRecord; - } - } - /** * Sets up the test environment before each test. * From 0cd5b3939bf9c5444cd1b0b293f49b95affe8b5d Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 21:41:43 -0400 Subject: [PATCH 30/59] Added to pom.xml --- IndividualProject/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/IndividualProject/pom.xml b/IndividualProject/pom.xml index a04d6a9c..b72f33b3 100644 --- a/IndividualProject/pom.xml +++ b/IndividualProject/pom.xml @@ -48,6 +48,11 @@ 4.8.0 test + + org.springframework.boot + spring-boot-starter-test + test + From 1083616c3dadc5e871ebd84d3ac595021ee30883 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 22:08:07 -0400 Subject: [PATCH 31/59] finsihed unit tests for route controller --- .../individualproject/RouteController.java | 4 +- .../RouteControllerUnitTests.java | 252 ++++++++++++++++++ 2 files changed, 254 insertions(+), 2 deletions(-) create mode 100644 IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index c5eb71fb..f2b30c8f 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -89,7 +89,7 @@ public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); } else { return new ResponseEntity<>(coursesMapping.get(Integer.toString(courseCode)).toString(), - HttpStatus.FORBIDDEN); + HttpStatus.OK); } } @@ -156,7 +156,7 @@ public ResponseEntity getMajorCtFromDept(@RequestParam(value = "deptCode") St return new ResponseEntity<>("There are: " + -departmentMapping.get(deptCode) .getNumberOfMajors() + " majors in the department", HttpStatus.OK); } - return new ResponseEntity<>("Department Not Found", HttpStatus.FORBIDDEN); + return new ResponseEntity<>("Department Not Found", HttpStatus.NOT_FOUND); } catch (Exception e) { return handleException(e); } diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java new file mode 100644 index 00000000..0e2b6b7c --- /dev/null +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java @@ -0,0 +1,252 @@ +package dev.coms4156.project.individualproject; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +public class RouteControllerUnitTests { + + @Mock + private MyFileDatabase mockFileDatabase; + + @InjectMocks + private RouteController routeController; + + private Map departmentMapping; + + @BeforeEach + public void setup() { + MockitoAnnotations.openMocks(this); + + Map comsCourses = new HashMap<>(); + comsCourses.put("1004", new Course("Adam Cannon", "417 IAB", "11:40-12:55", 400)); + comsCourses.put("3134", new Course("Brian Borowski", "301 URIS", "4:10-5:25", 250)); + comsCourses.put("3157", new Course("Jae Lee", "417 IAB", "4:10-5:25", 400)); + + Map econCourses = new HashMap<>(); + econCourses.put("1105", new Course("Abraham Lincoln", "309 HAV", "2:40-3:55", 200)); + econCourses.put("2257", new Course("Thomas Jefferson", "428 PUP", "10:10-11:25", 125)); + econCourses.put("3412", new Course("Taylor Swift", "702 HAM", "8:40-9:55", 100)); + + Map ieorCourses = new HashMap<>(); + ieorCourses.put("2500", new Course("Selena Gomez", "627 MUDD", "11:40-12:55", 150)); + ieorCourses.put("3404", new Course("Justin Bieber", "303 MUDD", "4:10-5:25", 100)); + ieorCourses.put("4511", new Course("Michael Jordan", "633 MUDD", "2:40-3:55", 200)); + + Department comsDept = new Department("COMS", comsCourses, "Luca Carloni", 2700); + Department econDept = new Department("ECON", econCourses, "Alex Turner", 2500); + Department ieorDept = new Department("IEOR", ieorCourses, "Julian Casablancas", 1800); + + departmentMapping = new HashMap<>(); + departmentMapping.put("COMS", comsDept); + departmentMapping.put("ECON", econDept); + departmentMapping.put("IEOR", ieorDept); + + when(mockFileDatabase.getDepartmentMapping()).thenReturn(departmentMapping); + + IndividualProjectApplication.myFileDatabase = mockFileDatabase; + } + + @Test + public void testRetrieveDepartmentExists() { + ResponseEntity response = routeController.retrieveDepartment("COMS"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(departmentMapping.get("COMS").toString(), response.getBody()); + } + + @Test + public void testRetrieveDepartmentNotExists() { + ResponseEntity response = routeController.retrieveDepartment("MATH"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testRetrieveCourseDepartmentExists() { + ResponseEntity response = routeController.retrieveCourse("ECON", 2257); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testRetrieveCourseDepartmentNotExists() { + ResponseEntity response = routeController.retrieveCourse("MATH", 2222); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testRetrieveCourseExistsDepartmentNotExist() { + ResponseEntity response = routeController.retrieveCourse("MATH", 4511); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testRetrieveCourseNotExistsDepartmentExist() { + ResponseEntity response = routeController.retrieveCourse("IEOR", 8888); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testIsCourseFullExists() { + ResponseEntity response = routeController.isCourseFull("ECON", 3412); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testIsCourseFullNotExists() { + ResponseEntity response = routeController.isCourseFull("MATH", 3999); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testGetMajorCtFromDeptExist() { + ResponseEntity response = routeController.getMajorCtFromDept("IEOR"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testGetMajorCtFromDeptNotExist() { + ResponseEntity response = routeController.getMajorCtFromDept("HIST"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testIdentifyDeptChairExists() { + ResponseEntity response = routeController.identifyDeptChair("COMS"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testIdentifyDeptChairNotExists() { + ResponseEntity response = routeController.identifyDeptChair("ANTH"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testFindCourseLocationExist() { + ResponseEntity response = routeController.findCourseLocation("COMS", 3134); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testFindCourseLocationNotExist() { + ResponseEntity response = routeController.findCourseLocation("SOCI", 3134); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testFindCourseInstructorExist() { + ResponseEntity response = routeController.findCourseInstructor("IEOR", 2500); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testFindCourseInstructorNotExist() { + ResponseEntity response = routeController.findCourseInstructor("PHIL", 9999); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testFindCourseTimeExist() { + ResponseEntity response = routeController.findCourseTime("IEOR", 2500); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testFindCourseTimeNotExist() { + ResponseEntity response = routeController.findCourseTime("PHIL", 9999); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testAddMajorToDeptExist() { + ResponseEntity response = routeController.addMajorToDept("IEOR"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testAddMajorToDeptNotExist() { + ResponseEntity response = routeController.addMajorToDept("PHIL"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testRemoveMajorFromDeptExist() { + ResponseEntity response = routeController.removeMajorFromDept("IEOR"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testRemoveMajorFromDeptNotExist() { + ResponseEntity response = routeController.removeMajorFromDept("PHIL"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testDropStudentExist() { + ResponseEntity response = routeController.dropStudent("IEOR", 2500); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testDropStudentNotExist() { + ResponseEntity response = routeController.dropStudent("PHIL", 9999); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testSetEnrollmentCountExist() { + ResponseEntity response = routeController.setEnrollmentCount("IEOR", 2500, 300); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testSetEnrollmentCountNotExist() { + ResponseEntity response = routeController.setEnrollmentCount("PHIL", 9999, 250); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testChangeCourseTimeExist() { + ResponseEntity response = routeController.changeCourseTime("IEOR", 2500, "4:00-6:00"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testChangeCourseTimeNotExist() { + ResponseEntity response = routeController.changeCourseTime("PHIL", 9999, "4:00-6:00"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testChangeCourseTeacherExist() { + ResponseEntity response = routeController.changeCourseTeacher("IEOR", 2500, "Kevin Parker"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testChangeCourseTeacherNotExist() { + ResponseEntity response = routeController.changeCourseTeacher("PHIL", 9999, "Jakob Ogawa"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + + @Test + public void testChangeCourseLocationExist() { + ResponseEntity response = routeController.changeCourseTeacher("IEOR", 2500, "203 SCH"); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test + public void testChangeCourseLocationNotExist() { + ResponseEntity response = routeController.changeCourseTeacher("PHIL", 9999, "701 HAM"); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + +} From 48074b0d1b44869e29dcb3261dc9c64a3a08c7ac Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 22:32:38 -0400 Subject: [PATCH 32/59] fixed style issues --- .../individualproject/RouteController.java | 2 +- .../RouteControllerUnitTests.java | 24 +++++++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index f2b30c8f..9c5863ee 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -18,7 +18,7 @@ public class RouteController { private static final Logger logger = Logger.getLogger( - RouteController.class.getName() + RouteController.class.getName() ); /** diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java index 0e2b6b7c..399977df 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java @@ -1,7 +1,7 @@ package dev.coms4156.project.individualproject; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Map; @@ -13,6 +13,12 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +/** + * Unit tests for the RouteController class. + * This class contains tests to verify the behavior and functionality of the + * RouteController class. + * It uses Spring's testing framework to set up the environment and run the tests. + */ public class RouteControllerUnitTests { @Mock @@ -23,6 +29,12 @@ public class RouteControllerUnitTests { private Map departmentMapping; + /** + * Sets up the mock environment before each test. + * + *

This method is executed before each test case to initialize mock data. + * It sets up department and course data for three departments (COMS, ECON, and IEOR). + */ @BeforeEach public void setup() { MockitoAnnotations.openMocks(this); @@ -42,13 +54,15 @@ public void setup() { ieorCourses.put("3404", new Course("Justin Bieber", "303 MUDD", "4:10-5:25", 100)); ieorCourses.put("4511", new Course("Michael Jordan", "633 MUDD", "2:40-3:55", 200)); - Department comsDept = new Department("COMS", comsCourses, "Luca Carloni", 2700); - Department econDept = new Department("ECON", econCourses, "Alex Turner", 2500); - Department ieorDept = new Department("IEOR", ieorCourses, "Julian Casablancas", 1800); - departmentMapping = new HashMap<>(); + + Department comsDept = new Department("COMS", comsCourses, "Luca Carloni", 2700); departmentMapping.put("COMS", comsDept); + + Department econDept = new Department("ECON", econCourses, "Alex Turner", 2500); departmentMapping.put("ECON", econDept); + + Department ieorDept = new Department("IEOR", ieorCourses, "Julian Casablancas", 1800); departmentMapping.put("IEOR", ieorDept); when(mockFileDatabase.getDepartmentMapping()).thenReturn(departmentMapping); From ceffb83780655cdf4ea75aff177110b6889461c4 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:35:13 -0400 Subject: [PATCH 33/59] docs: Fixed README.md spacing --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 98403d43..722ab40b 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ This project is done using Java. To set up the project, I navigated to the IndividualProject folder and ran the following command: + ```mvn spring-boot:run -Dspring-boot.run.arguments="setup"``` ## Part 1 @@ -18,4 +19,4 @@ I then opened the file `IndividualProject/target/site/jacoco/index.html` to see ## Part 3 I used PMD in this project as a static bug finder, executing the following command to get a report: -```mvn pmd:check``` \ No newline at end of file +```mvn pmd:check``` From 6222dde9c6fd69d8b30bdfa42fdc5c917a21f84c Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 12 Sep 2024 22:38:39 -0400 Subject: [PATCH 34/59] fix: Remove unused import --- .../individualproject/IndividualProjectApplicationUnitTests.java | 1 - 1 file changed, 1 deletion(-) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java index d0be8795..cd78dfab 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java @@ -9,7 +9,6 @@ import java.util.logging.LogRecord; import java.util.logging.Logger; -import java.util.logging.StreamHandler; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; From 0fd5e9599d491855d671d914ed4b51c0be17386a Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:01:53 -0400 Subject: [PATCH 35/59] docs: Cleaned up README.md --- README.md | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 722ab40b..75fc4cd7 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,23 @@ # COMS 4156: Individual Project -This project is done using Java. +To run this project, navigate into the IndividualProject folder and follow the instructions below: -To set up the project, I navigated to the IndividualProject folder and ran the following command: - -```mvn spring-boot:run -Dspring-boot.run.arguments="setup"``` - -## Part 1 -To run stylecheck, I use the following command in the IndividualProject directory: -```mvn checkstyle:check``` - -## Part 2 -To run JaCoCo, I ran the following command in the IndividualProject directory: -- `mvn test` -- `mvn jacoco:report` - -I then opened the file `IndividualProject/target/site/jacoco/index.html` to see the coverage. - -## Part 3 -I used PMD in this project as a static bug finder, executing the following command to get a report: -```mvn pmd:check``` +1. To set up, run the following command and terminate execution (^C) as soon as you see `System Setup` +``` +mvn spring-boot:run -Dspring-boot.run.arguments="setup" +``` +2. To run stylecheck, run the following command +``` +mvn checkstyle:check +``` +3. I used PMD as my bug finder. Run PMD wil the following command, +``` +mvn pmd:check +``` +4. To run Jacoco and create the coverage report, I used the following commands, +``` +mvn clean test +``` +``` +mvn jacoco:report +``` From 5a67480a39497ee068e22096f336e4ba7fe27b45 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Fri, 13 Sep 2024 13:24:07 -0400 Subject: [PATCH 36/59] docs: Added descriptions to citations --- citations.txt | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/citations.txt b/citations.txt index 57eac8e4..fae37cf4 100644 --- a/citations.txt +++ b/citations.txt @@ -1,14 +1,38 @@ Part 1: Code Clean Up -- https://docs.opendaylight.org/en/latest/contributor-guides/coding-guidelines/coding-guidelines-java.html + - https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html +I wasn't familiar with writing doc comments for javadoc so I used the link above as a guide. + - https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716 +I used the link above as reference on how I should make meaningful commit messages. + + + Part 2 & 3: Test Suite Creation & Debugging + - https://mkyong.com/maven/maven-jacoco-code-coverage-example/ -- https://stackoverflow.com/questions/22836455/jacoco-report-generation-using-maven +- https://mvnrepository.com/artifact/org.jacoco/jacoco-maven-plugin/0.8.11 +I used the 2 links above to figure out how to modify my pom.xml file to integrate the correct +version of jacoco that I can use for this project. + - https://www.baeldung.com/junit-5-test-order - https://www.geeksforgeeks.org/junit-5-test-execution-order/ +I wanted to decide the order that the tests will be executed so I used this as reference. + + - https://www.baeldung.com/junit-5-nested-test-classes +I wanted to make 2 separate nested classes in the unit tests to simulate different parameters +and scenarios. + - https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html +- https://www.digitalocean.com/community/tutorials/logger-in-java-logging-example +PMD didn't like the usage of System.out so I had to replace everything with java Logger and +this was reference on how to use it. I also wanted to read from my logs so I created a +CustomLoggerHandler class to handle these scenarios, as shown in the second link above. + - https://www.baeldung.com/mockito-junit-5-extension -- https://www.digitalocean.com/community/tutorials/logger-in-java-logging-example \ No newline at end of file +- https://www.digitalocean.com/community/tutorials/mockito-injectmocks-mocks-dependency-injection +- https://www.baeldung.com/mockito-annotations +I had to use mockito to test the IndividualProjectApplication.java and RouteController.java files +so I used the links above as reference on how to use it. \ No newline at end of file From d9fba3f313369ae4ccfe7c5bd6540c0522b68a4a Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Fri, 13 Sep 2024 15:53:10 -0400 Subject: [PATCH 37/59] docs: Finish listing out all bugs/violations/warnings encountered in bugs.txt --- bugs.txt | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 98 insertions(+), 4 deletions(-) diff --git a/bugs.txt b/bugs.txt index b84beddf..d17a2f22 100644 --- a/bugs.txt +++ b/bugs.txt @@ -1,6 +1,100 @@ -what the issue you fixed was, where it was, -and if it has a proper name identified by a static analyzer what that name was +Warnings from mvn checkstyle:check -Course.java -- \ No newline at end of file +1. AvoidStarImport + - Course.java + - CourseUnitTests.java + - Department.java + - IndividualProjectApplication.java + - MyFileDatabase.java + - RouteController.java + +2. MissingJavadocType + - Course.java + - CourseUnitTests.java + +3. MissingJavadocMethod + - RouteController.java + +4. CommentsIndentation + - Course.java + +5. Indentation + - Course.java + - IndividualProjectApplication.java + +6. LineLength + - Course.java + - RouteController.java + +7. CustomImportOrder + - CourseUnitTests.java + +8. FileTabCharacter + - IndividualProjectApplication.java + +9. JavadocParagraph Formatting + - IndividualProjectApplication.java + +--- + +PMD Errors + +1. Course.java: + - MissingOverride: The method toString() is missing an @Override annotation. (Line 59-61) + +2. Department.java: + - LooseCoupling: Avoid using implementation types like HashMap; use the interface instead. (Line 22) + - LooseCoupling: Avoid using implementation types like HashMap; use the interface instead. (Line 53) + - MissingOverride: The method toString() is missing an @Override annotation. (Line 101-110) + - LooseCoupling: Avoid using implementation types like HashMap; use the interface instead. (Line 114) + - UnusedPrivateField: Avoid unused private fields such as departmentChair. (Line 115) + +3. IndividualProjectApplication.java: + - UseVarargs: Consider using varargs for methods or constructors that take an array as the last parameter. (Line 36) + - MissingOverride: The method run(String) is missing an @Override annotation. (Line 36-47) + - PositionLiteralsFirstInComparisons: Position literals first in String comparisons. (Line 38) + - SystemPrintln: System.out.println is used, replace with logging. (Lines 41, 46, 292) + +4. MyFileDatabase.java: + - LooseCoupling: Avoid using implementation types like HashMap; use the interface instead. (Line 30) + - LooseCoupling: Avoid using implementation types like HashMap; use the interface instead. (Line 39) + - AvoidPrintStackTrace: Avoid printStackTrace(), use a logger instead. (Lines 48, 62) + - SystemPrintln: System.out.println is used, replace with logging. (Line 60) + - LooseCoupling: Avoid using implementation types like HashMap; use the interface instead. (Lines 71, 95) + +5. RouteController.java: + - UnusedLocalVariable: Avoid unused local variables such as requestedCourse. (Line 277) + - SystemPrintln: System.out.println is used, replace with logging. (Line 501) + +--- + +Bugs found from unit testing (not listed from PMD violations above) + +1. Course.java + - Updated logic for enrollStudent(): return true if the student is successfully enrolled, false otherwise + - Updated logic for dropStudent(): return true if the student is successfully dropped, false otherwise + - Fixed return value for getCourseLocation(): return courseLocation not instructorName + - Fixed return value for getInstructorName(): return instructorName not courseLocation + - Changed the condition for isCourseFull(): now considers enrollmentStudentCount == enrollmentCapacity as full + +2. Department.java + - Fixed typo in return value for getNumberOfMajors() + - getDepartmentChair() initially returns the literal string "this.departmentChair" instead of its value + - Update logic for dropPersonFromMajor(): Decreases the number of majors in the department by one if it's greater than zero + - toString() initially returns the literal string "result.toString()" instead of its value + +3. IndividualProjectApplication.java + ** Changes made to this file doesn't modify any of the logic, only fixes the style to resolve PMD violations: + - Replaces all System.out statements with Logger + - Added @Override to run() + - Replace arg.equals("setup") to "setup".equals(arg) in run() because of PositionLiteralsFirstInComparisons violations + +4. MyFileDatabase.java + - deSerializeObjectFromFile(): Added catch statement for FileNotFoundException + +5. RouteController.java + - retrieveDepartment(): HttpStatus.OK and HttpStatus.NOT_FOUND was flipped + - retrieveCourse(): replace HttpStatus.FORBIDDEN with HttpStatus.OK + - getMajorCtFromDept(): replace HttpStatus.FORBIDDEN with HttpStatus.NOT_FOUND + - findCourseTime(): replace return value from "some time" to requestedCourse.getCourseTimeSlot() \ No newline at end of file From 87aa356e74edeef3ddc8c6e2e1f4db3aeb10b7e8 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Fri, 13 Sep 2024 16:05:36 -0400 Subject: [PATCH 38/59] docs: Fixed comments --- IndividualProject/invalid-object.ser | Bin 31 -> 0 bytes .../individualproject/DatabaseUnitTests.java | 15 +++------------ .../IndividualProjectApplicationUnitTests.java | 7 ++----- 3 files changed, 5 insertions(+), 17 deletions(-) delete mode 100644 IndividualProject/invalid-object.ser diff --git a/IndividualProject/invalid-object.ser b/IndividualProject/invalid-object.ser deleted file mode 100644 index cc6d0c02548f0a4886b3fa27808a69373f4d4a2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31 kcmZ4UmVvc|K_Vn0vseL$^72a*5*2(C3l#E`vQm>v0H&-8h5!Hn diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java index 2c404c66..97e13e47 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/DatabaseUnitTests.java @@ -30,7 +30,6 @@ public class DatabaseUnitTests { private static final String VALID_FILE_PATH = "./data.txt"; - private static final String INVALID_FILE_PATH = "./invalid-object.ser"; private static final String NON_EXISTENT_FILE_PATH = "./nonexistent.txt"; @Nested @@ -51,14 +50,6 @@ public void deserializeValidFileTest() { @Test @Order(2) - public void handleInvalidFileFormatTest() { - assertThrows(IllegalArgumentException.class, () -> { - new MyFileDatabase(0, INVALID_FILE_PATH); - }); - } - - @Test - @Order(3) public void handleNonExistentFileTest() { MyFileDatabase nonExistentDatabase = new MyFileDatabase(0, NON_EXISTENT_FILE_PATH); assertNull(nonExistentDatabase.getDepartmentMapping(), @@ -66,7 +57,7 @@ public void handleNonExistentFileTest() { } @Test - @Order(4) + @Order(3) public void saveContentsToFileTest() { testDatabase.saveContentsToFile(); @@ -75,7 +66,7 @@ public void saveContentsToFileTest() { } @Test - @Order(5) + @Order(4) public void deserializeFileAfterSaveTest() { MyFileDatabase reloadedDatabase = new MyFileDatabase(0, VALID_FILE_PATH); Map loadedMapping = reloadedDatabase.getDepartmentMapping(); @@ -86,7 +77,7 @@ public void deserializeFileAfterSaveTest() { } @Test - @Order(6) + @Order(5) public void invalidObjectTypeInFileTest() { testDatabase.setMapping(null); testDatabase.saveContentsToFile(); diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java index cd78dfab..3698cf7d 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/IndividualProjectApplicationUnitTests.java @@ -32,11 +32,9 @@ public class IndividualProjectApplicationUnitTests { * Sets up the test environment before each test. * *

This method initializes a new instance of the {@code IndividualProjectApplication} - * class and captures the logger output by redirecting to a - * {@code ByteArrayOutputStream}. This allows the test to verify log messages + * class and captures the logger output by using the {@code CustomLoggerHandler} class + * This allows the test to verify log messages * generated during the execution of the application. - * - *

Each test can access the logger output through the {@code logOutput} field. */ @BeforeEach public void setup() { @@ -80,7 +78,6 @@ public void testRunWithoutSetupArgument() { public void testResetDataFile() { IndividualProjectApplication.overrideDatabase(testDatabase); testApplication.resetDataFile(); - verify(testDatabase, times(1)).setMapping(anyMap()); } From 3f3a8415085e681ebbe444ad582aeeab1042dddd Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 19 Sep 2024 15:17:39 -0400 Subject: [PATCH 39/59] Added /retrieveCourses /enrollStudentInCourse --- .../individualproject/RouteController.java | 82 ++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 9c5863ee..5ef77790 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -99,6 +99,45 @@ public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String } } + /** + * Displays the details of all courses that have the desired courseCode (across all departments) + * to the user or displays the proper error message in response to the request. + * + * @param courseCode A {@code int} representing the course the user wishes + * to retrieve. + * + * @return A {@code ResponseEntity} object containing either the details of the + * course and an HTTP 200 response or, an appropriate message indicating the + * proper response. + */ + @GetMapping(value = "/retrieveCourses", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity retrieveCourses(@RequestParam(value = "courseCode") int courseCode) { + try { + StringBuilder result = new StringBuilder(); + + Map departmentMapping; + departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); + + for (Map.Entry entry : departmentMapping.entrySet()) { + ResponseEntity response = retrieveCourse(entry.getKey(), courseCode); + + if (response.getStatusCode() == HttpStatus.OK && response.getBody() != null) { + result.append(entry.getKey()).append(" ").append(courseCode) + .append(response.getBody()).append("\n"); + } + } + + if (result.length() > 0) { + return new ResponseEntity<>(result.toString(), HttpStatus.OK); + } else { + return new ResponseEntity<>("No Courses Found", HttpStatus.NOT_FOUND); + } + + } catch (Exception e) { + return handleException(e); + } + } + /** * Displays whether the course has at minimum reached its enrollmentCapacity. * @@ -355,6 +394,48 @@ public ResponseEntity removeMajorFromDept(@RequestParam(value = "deptCode") S } } + /** + * Attempts to enroll a student in a course if possible. + * + * @param deptCode A {@code String} representing the department. + * + * @param courseCode A {@code int} representing the course within the department. + * + * @return A {@code ResponseEntity} object containing an HTTP 200 + * response with an appropriate message or the proper status + * code in tune with what has happened. + */ + @PatchMapping(value = "/enrollStudentInCourse", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity enrollStudentInCourse(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "courseCode") int courseCode) { + try { + boolean doesCourseExists; + doesCourseExists = retrieveCourse(deptCode, courseCode).getStatusCode() == HttpStatus.OK; + + if (doesCourseExists) { + Map departmentMapping; + departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); + Map courseMapping; + courseMapping = departmentMapping.get(deptCode).getCourseSelection(); + + Course requestedCourse = courseMapping.get(Integer.toString(courseCode)); + boolean isStudentEnrolled = requestedCourse.enrollStudent(); + + if (isStudentEnrolled) { + return new ResponseEntity<>("Student has been enrolled.", HttpStatus.OK); + } else { + return new ResponseEntity<>("Student has been enrolled.", HttpStatus.BAD_REQUEST); + } + + } else { + return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); + } + + } catch (Exception e) { + return handleException(e); + } + } + /** * Attempts to drop a student from the specified course. * @@ -545,5 +626,4 @@ private ResponseEntity handleException(Exception e) { return new ResponseEntity<>("An Error has occurred", HttpStatus.OK); } - } \ No newline at end of file From c765acd820e4a4584b46679e01edf99bc6947ec9 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 19 Sep 2024 17:18:34 -0400 Subject: [PATCH 40/59] Added testRetreiveCourses and passes tests --- .../RouteControllerUnitTests.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java index 399977df..e9823f67 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java @@ -43,16 +43,19 @@ public void setup() { comsCourses.put("1004", new Course("Adam Cannon", "417 IAB", "11:40-12:55", 400)); comsCourses.put("3134", new Course("Brian Borowski", "301 URIS", "4:10-5:25", 250)); comsCourses.put("3157", new Course("Jae Lee", "417 IAB", "4:10-5:25", 400)); + comsCourses.put("4404", new Course("Alex Turner", "505 NWC", "10:10-11:25", 400)); Map econCourses = new HashMap<>(); econCourses.put("1105", new Course("Abraham Lincoln", "309 HAV", "2:40-3:55", 200)); econCourses.put("2257", new Course("Thomas Jefferson", "428 PUP", "10:10-11:25", 125)); - econCourses.put("3412", new Course("Taylor Swift", "702 HAM", "8:40-9:55", 100)); + econCourses.put("3412", new Course("Charles Leclerc", "702 HAM", "8:40-9:55", 100)); + econCourses.put("4404", new Course("Julian Casablancas", "125 DOD", "11:40-12:55", 100)); Map ieorCourses = new HashMap<>(); - ieorCourses.put("2500", new Course("Selena Gomez", "627 MUDD", "11:40-12:55", 150)); - ieorCourses.put("3404", new Course("Justin Bieber", "303 MUDD", "4:10-5:25", 100)); - ieorCourses.put("4511", new Course("Michael Jordan", "633 MUDD", "2:40-3:55", 200)); + ieorCourses.put("1004", new Course("Tame Impala", "627 MUDD", "11:40-12:55", 150)); + ieorCourses.put("2500", new Course("Oscar Piastri", "303 MUDD", "4:10-5:25", 100)); + ieorCourses.put("4511", new Course("Lando Norris", "633 MUDD", "2:40-3:55", 200)); + ieorCourses.put("4404", new Course("Mac DeMarco", "702 DOD", "11:40-12:55", 100)); departmentMapping = new HashMap<>(); @@ -263,4 +266,24 @@ public void testChangeCourseLocationNotExist() { assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); } + @Test + public void testRetrieveCourses() { + ResponseEntity response = routeController.retrieveCourses(1004); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + System.out.println(response.getBody()); + + response = routeController.retrieveCourses(4404); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + response = routeController.retrieveCourses(3134); + assertEquals(HttpStatus.OK, response.getStatusCode()); + + response = routeController.retrieveCourses(2233); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + + response = routeController.retrieveCourses(5774); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + } + } From fb6a833fc8262be0b9c95ac965a2577fe1a8cd92 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 19 Sep 2024 17:56:20 -0400 Subject: [PATCH 41/59] Added unit test for enrollStudentInCourse --- .../RouteControllerUnitTests.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java index e9823f67..6d337517 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java @@ -57,6 +57,9 @@ public void setup() { ieorCourses.put("4511", new Course("Lando Norris", "633 MUDD", "2:40-3:55", 200)); ieorCourses.put("4404", new Course("Mac DeMarco", "702 DOD", "11:40-12:55", 100)); + comsCourses.get("3157").setEnrolledStudentCount(425); + econCourses.get("2257").setEnrolledStudentCount(2); + departmentMapping = new HashMap<>(); Department comsDept = new Department("COMS", comsCourses, "Luca Carloni", 2700); @@ -286,4 +289,16 @@ public void testRetrieveCourses() { assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); } + @Test + public void testEnrollStudentInCourse() { + ResponseEntity response = routeController.enrollStudentInCourse("PHIL", 9999); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + + response = routeController.enrollStudentInCourse("COMS", 3157); + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + + response = routeController.enrollStudentInCourse("ECON", 2257); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + } From 0698be70a348eb2bbdaa47032015662e2af32532 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Tue, 24 Sep 2024 00:52:44 -0400 Subject: [PATCH 42/59] Create maven.yml --- .github/workflows/maven.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/maven.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 00000000..06b6aa02 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,35 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Java CI with Maven + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --file pom.xml + + # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive + - name: Update dependency graph + uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 From 5c9024b458edff5022f8ab9d674d202a8d156b39 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Tue, 24 Sep 2024 00:54:50 -0400 Subject: [PATCH 43/59] Fixed path in maven.yml --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 06b6aa02..c2637e8a 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -28,7 +28,7 @@ jobs: distribution: 'temurin' cache: maven - name: Build with Maven - run: mvn -B package --file pom.xml + run: mvn -B package --file IndividualProject/pom.xml # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - name: Update dependency graph From bb1dbfdc5942f39173e7c3b901ea62b1657b963d Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Tue, 24 Sep 2024 01:04:32 -0400 Subject: [PATCH 44/59] Specified directory for maven.yml --- .github/workflows/maven.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index c2637e8a..fff5720a 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -28,8 +28,11 @@ jobs: distribution: 'temurin' cache: maven - name: Build with Maven - run: mvn -B package --file IndividualProject/pom.xml + run: mvn -B package + working-directory: ./IndividualProject # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - name: Update dependency graph uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 + with: + working-directory: ./IndividualProject From 43d6ee49e65efc04d5619754123e52dc45319053 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Tue, 24 Sep 2024 01:07:16 -0400 Subject: [PATCH 45/59] removed optional dep from maven.yml --- .github/workflows/maven.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index fff5720a..9132983a 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -30,9 +30,3 @@ jobs: - name: Build with Maven run: mvn -B package working-directory: ./IndividualProject - - # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - - name: Update dependency graph - uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 - with: - working-directory: ./IndividualProject From 63247f311d4c66eb6d98dab1054185d04462b3f7 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Thu, 26 Sep 2024 15:25:56 -0400 Subject: [PATCH 46/59] Added README with instructions to locally test and check --- README.md | 56 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 75fc4cd7..f9a77dc5 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,63 @@ # COMS 4156: Individual Project -To run this project, navigate into the IndividualProject folder and follow the instructions below: +Developed on MacOS and ARM 64. Fall 2024. -1. To set up, run the following command and terminate execution (^C) as soon as you see `System Setup` +## Building and Running a Local Instance + +To build and run this project, you need to: +1. Clone this repo. +2. Install Maven 3.9.5 (Follow the download and installation instructions here: [https://maven.apache.org/docs/3.9.5/release-notes.html](url)). +3. Install JDK. This project was developed using JDK 17, so this version is recommended. Download the JDK for your device here: [https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html](url). +4. Install any IDE that can run a Java project. This project was developed using VS Code (Download here: [https://code.visualstudio.com/download](url)). +5. Set up the project by running the following command in the [IndividualProject](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/tree/main/IndividualProject) directory by running the command below. Terminate execution (^C) as soon as you see `System Setup`. ``` mvn spring-boot:run -Dspring-boot.run.arguments="setup" ``` -2. To run stylecheck, run the following command + +## Running a Cloud based Instance + +## Running Unit Tests + +The unit tests for this project can be found in the [IndividualProject/src/test/java/dev/coms4156/project/individualproject](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/tree/main/IndividualProject/src/test/java/dev/coms4156/project/individualproject) directory. In that directory, you will find unit tests for each of the classes developed for this project. + +To run the unit tests, you must first build the project ([see here](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/edit/docs-and-maintenance/README.md#building-and-running-a-local-instance)) and run the following command in the [IndividualProject](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/tree/main/IndividualProject) directory ``` -mvn checkstyle:check +mvn clean test ``` -3. I used PMD as my bug finder. Run PMD wil the following command, + +Running the command above will show you if all the units are successful or any errors that occurred. + +## Postman Test Documentation + +## Endpoints + +## Style Checking Report + +Style checking was done using the checkstyle tool on Maven. You can run checkstyle using the following command: ``` -mvn pmd:check +mvn checkstyle:check ``` -4. To run Jacoco and create the coverage report, I used the following commands, + +Below is the checkstyle report as of 09/26/24, showing that there are 0 checkstyle violations: +Screenshot 2024-09-26 at 14 51 23 + +## Static Code Analysis Report + +PMD is used for the static code analysis report (install here: [https://pmd.github.io/](url)). Run PMD with the following command, ``` -mvn clean test +mvn pmd:check ``` + +Below is the PMD report as of 09/26/24: + +Screenshot 2024-09-26 at 14 57 06 + +## Branch Coverage Reporting + +This project uses JaCoco to analyze branch coverage for the unit tests. Run the unit tests first ([see here](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/edit/docs-and-maintenance/README.md#running-unit-tests)), and then run the following command: ``` mvn jacoco:report ``` + +A target directory will be created (if it doesn't exist already) in IndividualProject and you can find the coverage report in IndividualProject/target/site/jacoco/index.html. Below is the coverage report as of 09/26/24: +Screenshot 2024-09-26 at 15 25 05 From 98b37764a1c672e4fca8c0450e82c75e85042f29 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 26 Sep 2024 15:45:48 -0400 Subject: [PATCH 47/59] Updated javadoc for new features implemented for I2 --- .../project/individualproject/RouteController.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 5ef77790..f5280a1c 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -106,9 +106,9 @@ public ResponseEntity retrieveCourse(@RequestParam(value = "deptCode") String * @param courseCode A {@code int} representing the course the user wishes * to retrieve. * - * @return A {@code ResponseEntity} object containing either the details of the - * course and an HTTP 200 response or, an appropriate message indicating the - * proper response. + * @return A {@code ResponseEntity} object containing the HTTP status code and an + * accompanying message (e.g., the courses as a String or indicating that + * no courses were found). */ @GetMapping(value = "/retrieveCourses", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity retrieveCourses(@RequestParam(value = "courseCode") int courseCode) { @@ -401,9 +401,9 @@ public ResponseEntity removeMajorFromDept(@RequestParam(value = "deptCode") S * * @param courseCode A {@code int} representing the course within the department. * - * @return A {@code ResponseEntity} object containing an HTTP 200 - * response with an appropriate message or the proper status - * code in tune with what has happened. + * @return A {@code ResponseEntity} object containing an HTTP status code + * response with a message indicating if the student has been + * enrolled or not or if the course is not found. */ @PatchMapping(value = "/enrollStudentInCourse", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity enrollStudentInCourse(@RequestParam(value = "deptCode") String deptCode, @@ -424,7 +424,7 @@ public ResponseEntity enrollStudentInCourse(@RequestParam(value = "deptCode") if (isStudentEnrolled) { return new ResponseEntity<>("Student has been enrolled.", HttpStatus.OK); } else { - return new ResponseEntity<>("Student has been enrolled.", HttpStatus.BAD_REQUEST); + return new ResponseEntity<>("Student has not been enrolled.", HttpStatus.BAD_REQUEST); } } else { From ee3439c7c6037d9e190a90d7b3fa9bc9141240a6 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 26 Sep 2024 23:51:39 -0400 Subject: [PATCH 48/59] Implemented some missing logic and new functionality --- .../coms4156/project/individualproject/Course.java | 8 ++++++-- .../project/individualproject/Department.java | 12 +++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index 75dd210a..7dd63ad6 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -90,8 +90,12 @@ public void reassignTime(String newTime) { } - public void setEnrolledStudentCount(int count) { - this.enrolledStudentCount = count; + public boolean setEnrolledStudentCount(int count) { + if (count >= 0) { + this.enrolledStudentCount = count; + return true; + } + return false; } diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java index 1934208b..ca9f0ea4 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java @@ -27,6 +27,14 @@ public Department(String deptCode, Map courses, String departmen this.deptCode = deptCode; } + public boolean setNumberOfMajors(int numberOfMajors) { + if (numberOfMajors >= 0) { + this.numberOfMajors = numberOfMajors; + return true; + } + return false; + } + /** * Gets the number of majors in the department. * @@ -64,10 +72,12 @@ public void addPersonToMajor() { /** * Decreases the number of majors in the department by one if it's greater than zero. */ - public void dropPersonFromMajor() { + public boolean dropPersonFromMajor() { if (numberOfMajors > 0) { numberOfMajors--; + return true; } + return false; } /** From 9eaf67d16303cfe7fe80e1d6031de883aa9a4cb6 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 26 Sep 2024 23:52:03 -0400 Subject: [PATCH 49/59] Added endpoints for new implementation --- .../individualproject/RouteController.java | 59 ++++++++++++++++--- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index f5280a1c..57ee546d 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -385,8 +385,14 @@ public ResponseEntity removeMajorFromDept(@RequestParam(value = "deptCode") S departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); Department specifiedDept = departmentMapping.get(deptCode); - specifiedDept.dropPersonFromMajor(); - return new ResponseEntity<>("Attribute was updated or is at minimum", HttpStatus.OK); + boolean successfullyDropped = specifiedDept.dropPersonFromMajor(); + if (successfullyDropped) { + return new ResponseEntity<>("Person successfully dropped from major.", HttpStatus.OK); + } + else { + return new ResponseEntity<>("Drop unsuccessful. No person to drop.", + HttpStatus.BAD_REQUEST); + } } return new ResponseEntity<>("Department Not Found", HttpStatus.NOT_FOUND); } catch (Exception e) { @@ -424,7 +430,8 @@ public ResponseEntity enrollStudentInCourse(@RequestParam(value = "deptCode") if (isStudentEnrolled) { return new ResponseEntity<>("Student has been enrolled.", HttpStatus.OK); } else { - return new ResponseEntity<>("Student has not been enrolled.", HttpStatus.BAD_REQUEST); + return new ResponseEntity<>("Course is full. Student has not been enrolled.", + HttpStatus.BAD_REQUEST); } } else { @@ -499,8 +506,14 @@ public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") St coursesMapping = departmentMapping.get(deptCode).getCourseSelection(); Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); - requestedCourse.setEnrolledStudentCount(count); - return new ResponseEntity<>("Attributed was updated successfully.", HttpStatus.OK); + boolean setEnrolled = requestedCourse.setEnrolledStudentCount(count); + + if (setEnrolled) { + return new ResponseEntity<>("New enrollment count has been set.", HttpStatus.OK); + } else { + return new ResponseEntity<>("Enrollment count requested is negative.", + HttpStatus.BAD_REQUEST); + } } else { return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); } @@ -509,6 +522,34 @@ public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") St } } + @PatchMapping(value = "/setNumberOfMajors", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity setNumberOfMajors(@RequestParam(value = "deptCode") String deptCode, + @RequestParam(value = "count") int count) { + try { + boolean doesDeptExist; + doesDeptExist = retrieveDepartment(deptCode).getStatusCode() == HttpStatus.OK; + + if (doesDeptExist) { + Map departmentMapping; + departmentMapping = IndividualProjectApplication.myFileDatabase.getDepartmentMapping(); + Department dept = departmentMapping.get(deptCode); + + boolean successfullySet = dept.setNumberOfMajors(count); + + if (successfullySet) { + return new ResponseEntity<>("New number of majors has been set.", HttpStatus.OK); + } else { + return new ResponseEntity<>("Number of majors is negative.", + HttpStatus.BAD_REQUEST); + } + } else { + return new ResponseEntity<>("Dept Not Found", HttpStatus.NOT_FOUND); + } + } catch (Exception e) { + return handleException(e); + } + } + /** * Endpoint for changing the time of a course. * This method handles PATCH requests to change the time of a course identified by @@ -537,7 +578,7 @@ public ResponseEntity changeCourseTime(@RequestParam(value = "deptCode") Stri Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); requestedCourse.reassignTime(time); - return new ResponseEntity<>("Attributed was updated successfully.", HttpStatus.OK); + return new ResponseEntity<>("Attribute was updated successfully.", HttpStatus.OK); } else { return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); } @@ -575,7 +616,7 @@ public ResponseEntity changeCourseTeacher(@RequestParam(value = "deptCode") S Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); requestedCourse.reassignInstructor(teacher); - return new ResponseEntity<>("Attributed was updated successfully.", HttpStatus.OK); + return new ResponseEntity<>("Attribute was updated successfully.", HttpStatus.OK); } else { return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); } @@ -609,7 +650,7 @@ public ResponseEntity changeCourseLocation(@RequestParam(value = "deptCode") Course requestedCourse = coursesMapping.get(Integer.toString(courseCode)); requestedCourse.reassignLocation(location); - return new ResponseEntity<>("Attributed was updated successfully.", HttpStatus.OK); + return new ResponseEntity<>("Attribute was updated successfully.", HttpStatus.OK); } else { return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); } @@ -623,7 +664,7 @@ private ResponseEntity handleException(Exception e) { logger.log(Level.SEVERE, "An exception occurred: {0}", e.toString()); } logger.log(Level.SEVERE, "Stack trace: ", e); - return new ResponseEntity<>("An Error has occurred", HttpStatus.OK); + return new ResponseEntity<>("An Error has occurred", HttpStatus.INTERNAL_SERVER_ERROR); } } \ No newline at end of file From 5135afacc910cbae188a329fdaee7c1eb5384ff9 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Thu, 26 Sep 2024 23:52:38 -0400 Subject: [PATCH 50/59] Added more unit tests for new and existing implementations --- .../RouteControllerUnitTests.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java index 6d337517..980be2ee 100644 --- a/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java +++ b/IndividualProject/src/test/java/dev/coms4156/project/individualproject/RouteControllerUnitTests.java @@ -203,18 +203,45 @@ public void testRemoveMajorFromDeptExist() { assertEquals(HttpStatus.OK, response.getStatusCode()); } + @Test + public void testRemoveMajorFromDeptInvalid() { + ResponseEntity response = routeController.setNumberOfMajors("IEOR", 0); + response = routeController.removeMajorFromDept("IEOR"); + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + } + @Test public void testRemoveMajorFromDeptNotExist() { ResponseEntity response = routeController.removeMajorFromDept("PHIL"); assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); } + @Test + public void testSetNumberOfMajors() { + ResponseEntity response = routeController.setNumberOfMajors("BIOL", 100); + assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode()); + + response = routeController.setNumberOfMajors("IEOR", -1); + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + + response = routeController.setNumberOfMajors("IEOR", 500); + assertEquals(HttpStatus.OK, response.getStatusCode()); + } + + @Test public void testDropStudentExist() { ResponseEntity response = routeController.dropStudent("IEOR", 2500); assertEquals(HttpStatus.OK, response.getStatusCode()); } + @Test + public void testDropStudentInvalid() { + ResponseEntity response = routeController.setEnrollmentCount("IEOR", 2500, 0); + response = routeController.dropStudent("IEOR", 2500); + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + } + @Test public void testDropStudentNotExist() { ResponseEntity response = routeController.dropStudent("PHIL", 9999); @@ -227,6 +254,12 @@ public void testSetEnrollmentCountExist() { assertEquals(HttpStatus.OK, response.getStatusCode()); } + @Test + public void testInvalidEnrollmentCount() { + ResponseEntity response = routeController.setEnrollmentCount("IEOR", 2500, -1); + assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode()); + } + @Test public void testSetEnrollmentCountNotExist() { ResponseEntity response = routeController.setEnrollmentCount("PHIL", 9999, 250); From d614fe91dbc5c7757448ae005ac3d2ac7fd800c8 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Thu, 26 Sep 2024 23:55:16 -0400 Subject: [PATCH 51/59] Updated new branch coverage picture for README --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f9a77dc5..eec0f37a 100644 --- a/README.md +++ b/README.md @@ -60,4 +60,5 @@ mvn jacoco:report ``` A target directory will be created (if it doesn't exist already) in IndividualProject and you can find the coverage report in IndividualProject/target/site/jacoco/index.html. Below is the coverage report as of 09/26/24: -Screenshot 2024-09-26 at 15 25 05 +Screenshot 2024-09-26 at 23 54 12 + From b697876e0abf79c0c331d223eaf126e82fbd1022 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Thu, 26 Sep 2024 23:59:35 -0400 Subject: [PATCH 52/59] Updated PMD result image in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eec0f37a..b0c7fea9 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ mvn pmd:check Below is the PMD report as of 09/26/24: -Screenshot 2024-09-26 at 14 57 06 +Screenshot 2024-09-26 at 23 58 51 ## Branch Coverage Reporting From 2512550e41043db5ddc2c4691b1149bf8f329335 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Fri, 27 Sep 2024 00:10:16 -0400 Subject: [PATCH 53/59] Updated checkstyle report in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b0c7fea9..bda318df 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ Style checking was done using the checkstyle tool on Maven. You can run checksty mvn checkstyle:check ``` -Below is the checkstyle report as of 09/26/24, showing that there are 0 checkstyle violations: -Screenshot 2024-09-26 at 14 51 23 +Below is the checkstyle report as of 09/27/24, showing that there are 0 checkstyle violations: +Screenshot 2024-09-27 at 00 09 52 ## Static Code Analysis Report From 34997109766580d70ddb292ddfdd5aad9d3a1868 Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Fri, 27 Sep 2024 00:11:43 -0400 Subject: [PATCH 54/59] Fixed checkstyle issue and added javadoc --- .../coms4156/project/individualproject/Course.java | 13 +++++++++++-- .../project/individualproject/Department.java | 12 ++++++++++++ .../project/individualproject/RouteController.java | 10 ++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java index 7dd63ad6..f7c416f7 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Course.java @@ -89,7 +89,17 @@ public void reassignTime(String newTime) { this.courseTimeSlot = newTime; } - + /** + * Sets the enrolled student count for the course. + * + * + * @param count an {@code int} representing the new enrolled student count for + * the course. The value must be greater than or equal to 0. + * + * @return {@code true} if the enrolled student count was successfully updated, + * {@code false} if the provided count was negative and the update + * was not performed. + */ public boolean setEnrolledStudentCount(int count) { if (count >= 0) { this.enrolledStudentCount = count; @@ -98,7 +108,6 @@ public boolean setEnrolledStudentCount(int count) { return false; } - public boolean isCourseFull() { return enrolledStudentCount >= enrollmentCapacity; } diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java index ca9f0ea4..a2ed40b8 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/Department.java @@ -27,6 +27,18 @@ public Department(String deptCode, Map courses, String departmen this.deptCode = deptCode; } + /** + * Sets the number of majors in the department. + * + * + * @param numberOfMajors an {@code int} representing the number of majors + * to set for the department. The value must be + * greater than or equal to 0. + * + * @return {@code true} if the number of majors was successfully updated, + * {@code false} if the provided number was negative and the + * update was not performed. + */ public boolean setNumberOfMajors(int numberOfMajors) { if (numberOfMajors >= 0) { this.numberOfMajors = numberOfMajors; diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 57ee546d..4abae37a 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -388,8 +388,7 @@ public ResponseEntity removeMajorFromDept(@RequestParam(value = "deptCode") S boolean successfullyDropped = specifiedDept.dropPersonFromMajor(); if (successfullyDropped) { return new ResponseEntity<>("Person successfully dropped from major.", HttpStatus.OK); - } - else { + } else { return new ResponseEntity<>("Drop unsuccessful. No person to drop.", HttpStatus.BAD_REQUEST); } @@ -522,6 +521,13 @@ public ResponseEntity setEnrollmentCount(@RequestParam(value = "deptCode") St } } + /** + * Sets the number of majors count for a specific department. + * + * @param deptCode the department code for the course + * @param count the enrollment count to set + * @return a ResponseEntity containing the result of the operation + */ @PatchMapping(value = "/setNumberOfMajors", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity setNumberOfMajors(@RequestParam(value = "deptCode") String deptCode, @RequestParam(value = "count") int count) { From 0ec7a609d498edb82b61a6097426301990e66a5f Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Fri, 27 Sep 2024 03:02:09 -0400 Subject: [PATCH 55/59] Uploaded GCloud Instance screenshot to root --- Google-Cloud-Instance.png | Bin 0 -> 438082 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Google-Cloud-Instance.png diff --git a/Google-Cloud-Instance.png b/Google-Cloud-Instance.png new file mode 100644 index 0000000000000000000000000000000000000000..9bcc99d507ee1c10c5e1157db77c4f304f2f30df GIT binary patch literal 438082 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⪼g z6q3tjIsRN^wZQg*n~KYz9B|*N`FxTbSrtRmOlyF&}STHN(5 z>d+Lx7`tibm8DTWQSR-5j9`XOw+lxfqUqI(IkbfuX=x<}eYj{sBJJqmn%Nw_mv&D+ ziC6hjv%#%em_Njat`Cl5#6ursZvkzVoz*p(rJSo$Fuw@|k{*kr>zu(s2M*u4lit54 z3+U6TveC;{Fa7+bvf6${8VIl+EE=Nz04o*^kAX^6%hng$E0$GP2gbX>G}h?ZI0+_4 z2s4nC9|!%<_e;)`c+vP$l2}xR;;uEfS^*KcB-Y8CVAAR6GlElV0|~8`zvI z*6aNjaknolbD>I7;k^U}(f?6RuBn1535oaXOBnEAIrapq$oI5AX~UpV!xvRn=8fQLEUe3w3sODrPHE zA39CIOFDzLH}gwH{4ta%R7IbQYl|L;?Tf9}xgJ{$-Rrsri^m3Xlo|6}p3T$HRN#Zd)f40>K2EW?16Tf<0Hb?&*G$pSOXDdm74o+IgTewnXsad5c zpRBM3kU>bjRtXT*U1!Pu8WZ0(*v9oUT-#a17kWB02c zi=c%l@DM>w1da~Zhay1*J6eqSa9;R3!86ITqpgkoKt{N9Qv>O?Z}$`U=h98~lTWGt z!KdQ0EuFZOLH6Qh)k~#9kHl{@=!*rPXbHZ51CJ4?TyO4ov+#L;YkDzQ-pz`d^!5>N z8G#w%etDmBQ(9}ui~a~n!cwAhwBiF<_X4n+lKWM~FA<|S0#5I+Y>WA}s5!_i~d#Yb(i!fC2v3YZGiek$r{D&D#G-#DEK7Ko%u8_OS@TXH`P|Gt196J z9@HIDO}s+zc4Kx3`)mqxVdK#TCuvRMbyS@4g`D(DkPd0T(!?NO6Ag67>bd`Q86FfV zpJ8(FnDfPt+8rrBX#5#Q0K7uIl4u_mgm{+^Z2MD%PTyUy5RN{*?oab;quMZE zyh-@u#ZQ;y4~@{?Jcw!@qwN8}?698U0tSe!91Q1U5TLr&%sHe!uG^fdt#sRK#qXMf zBXKd70x;5Ld>Zt3+$H3EDuyfGc71g$nDaVN9WERj&7;auzuQDVfD;s^# zE2K+yXpKgEzSDDRKX(y;t+B{E@( zwgwtZ@R7fghxkEWU!3eQFqE-e0dKwooon(Vml#@7xGmTu&mf)^j5uRmwustBTlvWN#b43K0pewpiU(Rxpn*tXoSeHUx7)Nh13DZ996Ux-YEeD zKTBV`#vvSZKcl1xZ}`AlAZP#tQwe{MRSnl0InzyVk)qYkhE#Q<;U0o2mZvWaI0T02 z@Sw^aOp?u#3{|oYtM8vfgN6ZqHY(7muOXvgR|MmhlpW0SL=e&YtAOvA7x!cq-PrYb zTiGL33$XiAJE`Y$PDg=SU)cH4mQr{*xiqUv-iM$!=(aUsKk_HUctq_59oM6xnA8;y zu>|2wbE0={W}+n7%2gi}xK7RG6>SFW!UDJA3?8hV?&*AbVgJ z$-G`LDJ5ql*}C$*OGQZG?Iu0@0Sg&9{?6y82z|YYc#B^ooA|A-kF1027Aw)S?G*C4 zt5-Ms%;n##>2j}RYkMrUVzl8IxJ)QhHwTinR~*d8(!Ryzbxr$PcL7fufg)YD6)Y6z z`IbNg+g(!6i@9NcfUCPjFa^@n7;CpqtVPh07Ut)pvQEP#NEE^o;2xYb6%|!hRtp$s z{tWse7acj0T+;6&K9;ZJo6$4iX2t-MD=+3heCkr|dF|o6+k_PT`fPWunSl^G70lY8 z2D-keRi(nMiN0YQ_E zo}SbN;y>0ruP;^McoalUoQ8&=fFG{Z$#mYLZwaYYSWc*j4X|id~gPuf z!&;x0L0EAB%Vm9R^7K{rfyu(0_uCMBg9e9OphH~;K07j2)=5si-fi+<%q4iNJ(cqC z%H3?JD=F2SR+UKNqx?*Q(cV0DjxIcD@QrkWz)0S58Y^~E1Jy& zMpO;pg*{ulI~61x(dBqMDbqvfa8POeA~Lg!JO>vAYVz>|#{uI4(Q2a&kuIj`zz;

bE5rYlSd#sV3R0{{gk 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

    n{!EnHv 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

    ~yL1;zIB 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 Date: Fri, 27 Sep 2024 03:11:04 -0400 Subject: [PATCH 56/59] Added citations for I3 --- citations.txt | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/citations.txt b/citations.txt index fae37cf4..bd1c13d8 100644 --- a/citations.txt +++ b/citations.txt @@ -1,3 +1,5 @@ +I1 +--- Part 1: Code Clean Up - https://www.oracle.com/technical-resources/articles/java/javadoc-tool.html @@ -6,9 +8,7 @@ I wasn't familiar with writing doc comments for javadoc so I used the link above - https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716 I used the link above as reference on how I should make meaningful commit messages. - - - +--- Part 2 & 3: Test Suite Creation & Debugging - https://mkyong.com/maven/maven-jacoco-code-coverage-example/ @@ -20,7 +20,6 @@ version of jacoco that I can use for this project. - https://www.geeksforgeeks.org/junit-5-test-execution-order/ I wanted to decide the order that the tests will be executed so I used this as reference. - - https://www.baeldung.com/junit-5-nested-test-classes I wanted to make 2 separate nested classes in the unit tests to simulate different parameters and scenarios. @@ -35,4 +34,28 @@ CustomLoggerHandler class to handle these scenarios, as shown in the second link - https://www.digitalocean.com/community/tutorials/mockito-injectmocks-mocks-dependency-injection - https://www.baeldung.com/mockito-annotations I had to use mockito to test the IndividualProjectApplication.java and RouteController.java files -so I used the links above as reference on how to use it. \ No newline at end of file +so I used the links above as reference on how to use it. + +--- +--- +I3 +--- +Part 1: Github Actions + +- https://github.blog/enterprise-software/ci-cd/build-ci-cd-pipeline-github-actions-four-steps/ +Setting up Github Actions + +- https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-maven +Writing yaml file for workflow + +--- +Part 3: Deploying to Google Cloud + +- https://cloud.google.com/billing/docs/how-to/edu-grants +Redeeming coupon + +- https://cloud.google.com/appengine/docs/flexible/monitoring-and-alerting-latency +To get the monitoring metrics dashboard for App Engine + +- https://cloud.google.com/appengine/docs/standard/reference/app-yaml?tab=java +Setting up app.yaml file From 90221c61c65ac10c25a8e142bddc4282cb12b08a Mon Sep 17 00:00:00 2001 From: Elifia Muthia Date: Fri, 27 Sep 2024 03:53:34 -0400 Subject: [PATCH 57/59] Fixed error message for one endpoint --- .../dev/coms4156/project/individualproject/RouteController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java index 4abae37a..6c4a5dcc 100644 --- a/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java +++ b/IndividualProject/src/main/java/dev/coms4156/project/individualproject/RouteController.java @@ -472,7 +472,7 @@ public ResponseEntity dropStudent(@RequestParam(value = "deptCode") String de if (isStudentDropped) { return new ResponseEntity<>("Student has been dropped.", HttpStatus.OK); } else { - return new ResponseEntity<>("Student has not been dropped.", HttpStatus.BAD_REQUEST); + return new ResponseEntity<>("Drop unsuccessful. No person to drop.", HttpStatus.BAD_REQUEST); } } else { return new ResponseEntity<>("Course Not Found", HttpStatus.NOT_FOUND); From 6515507c2e832e78068a4e8e6bf09a384ccd95ed Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Fri, 27 Sep 2024 04:11:39 -0400 Subject: [PATCH 58/59] Uploaded Video-Demo-Link.txt --- Video-Demo-Link.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 Video-Demo-Link.txt diff --git a/Video-Demo-Link.txt b/Video-Demo-Link.txt new file mode 100644 index 00000000..bfa7efe2 --- /dev/null +++ b/Video-Demo-Link.txt @@ -0,0 +1 @@ +https://youtu.be/4d7UBi2qjPw From 4756673625ebefd48932b368ba27eb08fb5129f7 Mon Sep 17 00:00:00 2001 From: Elifia Muthia <69394748+elifia-muthia@users.noreply.github.com> Date: Fri, 27 Sep 2024 04:37:34 -0400 Subject: [PATCH 59/59] Finished README.md --- README.md | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bda318df..9a8d0dd8 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,38 @@ mvn spring-boot:run -Dspring-boot.run.arguments="setup" ## Running a Cloud based Instance +To deploy your app on the cloud, you can use Google Cloud Platform's App Engine (overview here: [https://cloud.google.com/appengine/docs/an-overview-of-app-engine](url)). To begin, you need to: +1. Download and install the gcloud CLI (link: [https://cloud.google.com/sdk/docs/install](url)) +2. Run the following on your terminal for authentication and setting up your SDK: +``` +gcloud init +``` +3. Create a project on Google Cloud Console +4. Navigate to the [IndividualProject directory](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/tree/main/IndividualProject) in your local copy of the repo and create an `app.yaml` file containing the following: +``` +entrypoint: java -jar target/IndividualProject-0.0.1-SNAPSHOT.jar +runtime: java17 +instance_class: F1 +``` +5. Make sure that you have set up the project as described in step 5 of [this section](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/edit/docs-and-maintenance/README.md#building-and-running-a-local-instance). +6. Run the following command, replacing `PROJECT_ID` with your GCP Project ID: +``` +gcloud config set project PROJECT_ID +``` +7. Run the following command in your terminal to deploy: +``` +gcloud app deploy +``` +8. Running the following command will tell you what URL your app has been deployed in: +``` +gcloud app browse +``` +9. Test your app using [Postman](https://www.postman.com/). You can find a video demo of this app being tested on Postman in the [Video-Demo-Link.txt](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/blob/main/Video-Demo-Link.txt) of this repo's root directory. + +Voila - Your app is now fully deployed on the cloud! + +You can see what the app instance on Google Cloud looks like in the [Google-Cloud-Instance.png](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/blob/main/Google-Cloud-Instance.png) image found in the root directory of this repo. + ## Running Unit Tests The unit tests for this project can be found in the [IndividualProject/src/test/java/dev/coms4156/project/individualproject](https://github.com/elifia-muthia/4156-Miniproject-2024-Students-Java/tree/main/IndividualProject/src/test/java/dev/coms4156/project/individualproject) directory. In that directory, you will find unit tests for each of the classes developed for this project. @@ -25,11 +57,7 @@ To run the unit tests, you must first build the project ([see here](https://gith mvn clean test ``` -Running the command above will show you if all the units are successful or any errors that occurred. - -## Postman Test Documentation - -## Endpoints +Running the command above will show you if all the unit tests are successful or any errors that occurred. ## Style Checking Report