diff --git a/src/main/java/softeng/g4/Main.java b/src/main/java/softeng/g4/Main.java index 9390a37a623452c1949da5f782d7d0b6ae5c5825..0b5fe87a15d7b50a9d4cb3fe66c17666670a83a2 100644 --- a/src/main/java/softeng/g4/Main.java +++ b/src/main/java/softeng/g4/Main.java @@ -56,44 +56,44 @@ public class Main { CourseList courseList; UserList userList; - // --------Uncomment all of this for the "hardcoded" version. - // Uncomment to add a new fresh userList and courseList - courseList = new CourseList(); - userList = new UserList(); - - // Uncomment here to add a new TA or Admin - // This will add false users, for checking users in the arraylist. (NECESSARY) - new Student("falseStudent", "False Student", Long.valueOf("123456789"), userList); - new TeachingAssistant("falseTA", "False TA", Long.valueOf("123456789"), userList); - new Admin("falseAdmin", "False Admin", userList); - - // Add testStudent - new Student("akuStudent", "Aku Student", Long.valueOf("123456789"), userList); - - // Add testTa with a mock calendar and schedule - TeachingAssistant testTa = new TeachingAssistant("akuTA", "Aku Asdos", Long.valueOf("123456789"), userList); - testTa.setSchedule("monday", "Free", "12:00", "17:00"); - testTa.setSchedule("tuesday", "Free", "08:00", "11:00"); - testTa.setSchedule("tuesday", "Free", "12:00", "15:00"); - testTa.setSchedule("saturday", "Busy", "07:00", "21:00"); - testTa.setSchedule("sunday", "Free", "12:00", "17:00"); - new TeachingAssistant("anotherTA", "Another TA", Long.valueOf("1"), userList); - - // Add testAdmin - new Admin("akuAdmin", "Aku Admin", userList); - - // Add false course - new Course("False Course", "FALSECOURSE", "False Professor", 0, courseList); - - // Add mock courses - new Course("Mata Kuliah", "MATKUL420", "Aku Dosen", 4, courseList); - new Course("Software Engineering", "SOFTENG2021", "Aku Professor", 3, courseList); - new Course("Fisika", "PHYS101", "Aku Dosen Fisika", 4, courseList); - - // Save the course - ListIO.saveList(courseList, userList); - - // ---------------- END OF "HARDCODED" VERSION +// // --------Uncomment all of this for the "hardcoded" version. +// // Uncomment to add a new fresh userList and courseList +// courseList = new CourseList(); +// userList = new UserList(); +// +// // Uncomment here to add a new TA or Admin +// // This will add false users, for checking users in the arraylist. (NECESSARY) +// new Student("falseStudent", "False Student", Long.valueOf("123456789"), userList); +// new TeachingAssistant("falseTA", "False TA", Long.valueOf("123456789"), userList); +// new Admin("falseAdmin", "False Admin", userList); +// +// // Add testStudent +// new Student("akuStudent", "Aku Student", Long.valueOf("123456789"), userList); +// +// // Add testTa with a mock calendar and schedule +// TeachingAssistant testTa = new TeachingAssistant("akuTA", "Aku Asdos", Long.valueOf("123456789"), userList); +// testTa.setSchedule("monday", "Free", "12:00", "17:00"); +// testTa.setSchedule("tuesday", "Free", "08:00", "11:00"); +// testTa.setSchedule("tuesday", "Free", "12:00", "15:00"); +// testTa.setSchedule("saturday", "Busy", "07:00", "21:00"); +// testTa.setSchedule("sunday", "Free", "12:00", "17:00"); +// new TeachingAssistant("anotherTA", "Another TA", Long.valueOf("1"), userList); +// +// // Add testAdmin +// new Admin("akuAdmin", "Aku Admin", userList); +// +// // Add false course +// new Course("False Course", "FALSECOURSE", "False Professor", 0, courseList); +// +// // Add mock courses +// new Course("Mata Kuliah", "MATKUL420", "Aku Dosen", 4, courseList); +// new Course("Software Engineering", "SOFTENG2021", "Aku Professor", 3, courseList); +// new Course("Fisika", "PHYS101", "Aku Dosen Fisika", 4, courseList); +// +// // Save the course +// ListIO.saveList(courseList, userList); +// +// // ---------------- END OF "HARDCODED" VERSION while (true) { diff --git a/src/test/java/softeng/g4/cli/AdminCLITest.java b/src/test/java/softeng/g4/cli/AdminCLITest.java index 02ae651ab966a3888b446ff47d5efa34ef106d17..9e23e77771141cb56200ec905bb097ed68136b4a 100644 --- a/src/test/java/softeng/g4/cli/AdminCLITest.java +++ b/src/test/java/softeng/g4/cli/AdminCLITest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import softeng.g4.Main; import softeng.g4.course.Course; import softeng.g4.course.CourseList; import softeng.g4.user.Admin; @@ -11,6 +12,8 @@ import softeng.g4.user.Student; import softeng.g4.user.TeachingAssistant; import softeng.g4.user.UserList; +import java.io.*; + import static org.junit.jupiter.api.Assertions.*; class AdminCLITest { @@ -21,8 +24,16 @@ class AdminCLITest { private TeachingAssistant testTa; private Student testStudent; + private final InputStream systemIn = System.in; + private final OutputStream systemOut = System.out; + private ByteArrayInputStream testIn; + private ByteArrayOutputStream testOut; + @BeforeEach void setUpTearDown() { + testOut = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testOut)); + userList = new UserList(); courseList = new CourseList(); @@ -36,18 +47,90 @@ class AdminCLITest { "Test Teacher", Long.parseLong("123456789"), userList); testStudent = new Student("testStudent", "Test Student", Long.valueOf("123456789"), userList); + + ListIO.saveList(courseList, userList); } @Test - void main() { + void mainLogOut() { + userInput("LOG OUT"); + AdminCLI.main(new String[] {"testAdmin"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 1], "Input: "); + } + + @Test + void mainHelp() { + userInput("HELP\nLOG OUT"); + AdminCLI.main(new String[] {"testAdmin"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 14], "Input: You are logged in as an admin (testAdmin)"); + } + + @Test + void mainAddCourse() { + userInput("ADD COURSE\ntest\ntestId\nTest Professor\n4\nLOG OUT"); + AdminCLI.main(new String[] {"testAdmin"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 2], "Successfully added a new course!"); + } + + @Test + void mainAssignTA() { + userInput("ADD COURSE\ntest\ntestId\nTest Professor\n4\n" + + "ASSIGN TA\ntestId\ntestTa\nLOG OUT"); + AdminCLI.main(new String[] {"testAdmin"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 3], "Teaching Assistant testTa has successfully assigned to course testId"); } @Test void intro() { } + private void userInput(String data) { + testIn = new ByteArrayInputStream(data.getBytes()); + System.setIn(testIn); + } + + private String getOutput() { + return testOut.toString(); + } + @AfterEach void finalTearDown() { + // Reset System Input and Output + System.setIn(systemIn); + System.setOut((PrintStream) systemOut); + courseList = new CourseList(); userList = new UserList(); diff --git a/src/test/java/softeng/g4/cli/StudentCLITest.java b/src/test/java/softeng/g4/cli/StudentCLITest.java index f8abb92f2e041eefe78a8284a4521387b4a60f28..1dae9bc207416eac91fc488c90049684b187aea7 100644 --- a/src/test/java/softeng/g4/cli/StudentCLITest.java +++ b/src/test/java/softeng/g4/cli/StudentCLITest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import softeng.g4.Main; import softeng.g4.course.Course; import softeng.g4.course.CourseList; import softeng.g4.user.Admin; @@ -11,6 +12,8 @@ import softeng.g4.user.Student; import softeng.g4.user.TeachingAssistant; import softeng.g4.user.UserList; +import java.io.*; + import static org.junit.jupiter.api.Assertions.*; class StudentCLITest { @@ -21,8 +24,16 @@ class StudentCLITest { private TeachingAssistant testTa; private Student testStudent; + private final InputStream systemIn = System.in; + private final OutputStream systemOut = System.out; + private ByteArrayInputStream testIn; + private ByteArrayOutputStream testOut; + @BeforeEach void setUpTearDown() { + testOut = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testOut)); + userList = new UserList(); courseList = new CourseList(); @@ -36,18 +47,59 @@ class StudentCLITest { "Test Teacher", Long.parseLong("123456789"), userList); testStudent = new Student("testStudent", "Test Student", Long.valueOf("123456789"), userList); + + ListIO.saveList(courseList, userList); } @Test - void main() { + void mainLogOut() { + userInput("LOG OUT"); + StudentCLI.main(new String[] {"testStudent"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 1], "Input: "); + } + + @Test + void mainHelp() { + userInput("HELP\nLOG OUT"); + StudentCLI.main(new String[] {"testStudent"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 9], "Input: You are logged in as a student (testStudent)"); } @Test void intro() { } + private void userInput(String data) { + testIn = new ByteArrayInputStream(data.getBytes()); + System.setIn(testIn); + } + + private String getOutput() { + return testOut.toString(); + } + @AfterEach void finalTearDown() { + // Reset System Input and Output + System.setIn(systemIn); + System.setOut((PrintStream) systemOut); + courseList = new CourseList(); userList = new UserList(); diff --git a/src/test/java/softeng/g4/cli/TACLITest.java b/src/test/java/softeng/g4/cli/TACLITest.java index efa29eb33130d97d4462495b9c6512f40fc5f0cf..6d2512f8d822baa0ed55c30fc31c80b092f94b93 100644 --- a/src/test/java/softeng/g4/cli/TACLITest.java +++ b/src/test/java/softeng/g4/cli/TACLITest.java @@ -11,6 +11,8 @@ import softeng.g4.user.Student; import softeng.g4.user.TeachingAssistant; import softeng.g4.user.UserList; +import java.io.*; + import static org.junit.jupiter.api.Assertions.*; class TACLITest { @@ -21,8 +23,16 @@ class TACLITest { private TeachingAssistant testTa; private Student testStudent; + private final InputStream systemIn = System.in; + private final OutputStream systemOut = System.out; + private ByteArrayInputStream testIn; + private ByteArrayOutputStream testOut; + @BeforeEach void setUpTearDown() { + testOut = new ByteArrayOutputStream(); + System.setOut(new PrintStream(testOut)); + userList = new UserList(); courseList = new CourseList(); @@ -36,16 +46,53 @@ class TACLITest { "Test Teacher", Long.parseLong("123456789"), userList); testStudent = new Student("testStudent", "Test Student", Long.valueOf("123456789"), userList); + + ListIO.saveList(courseList, userList); + } + + @Test + void mainLogOut() { + userInput("LOG OUT"); + TACLI.main(new String[] {"testTa"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 1], "Input: "); } @Test - void main() { + void mainHelp() { + userInput("HELP\nLOG OUT"); + TACLI.main(new String[] {"testTa"}); + + String output = getOutput(); + + // Remove carriage break from the print, since different environment uses different line separators + String outContentEdit = output.replaceAll("\r", ""); + // Split by \n + String[] outputs = outContentEdit.split("\n"); + // Check line output + assertEquals(outputs[outputs.length - 13], "Input: You are logged in as a teaching assistant (testTa)"); } @Test void intro() { } + private void userInput(String data) { + testIn = new ByteArrayInputStream(data.getBytes()); + System.setIn(testIn); + } + + private String getOutput() { + return testOut.toString(); + } + @AfterEach void finalTearDown() { courseList = new CourseList();