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();