From a3a8fb55197de67d00795511f5716bc2d7b2ed6a Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Wed, 4 Oct 2023 13:48:40 -0400 Subject: [PATCH 01/12] merge conflicts --- App/controllers/student.py | 88 +++++++++++++++----------------------- 1 file changed, 35 insertions(+), 53 deletions(-) diff --git a/App/controllers/student.py b/App/controllers/student.py index 853065b0b..45935db7d 100644 --- a/App/controllers/student.py +++ b/App/controllers/student.py @@ -1,13 +1,8 @@ from App.models import Student, CoursePlan, Program from App.database import db -<<<<<<< HEAD -def create_student(file_path): - new_student = Student(file_path) -======= def create_student(student_id, password, name): new_student = Student(username=student_id, password=password, name=name) ->>>>>>> development db.session.add(new_student) db.session.commit() return new_student @@ -15,6 +10,9 @@ def create_student(student_id, password, name): def get_student_by_username(username): return Student.query.filter_by(username=username).first() +def get_student(id): + return Student.query.get(id) + def get_all_students(): return Student.query.all() @@ -25,15 +23,14 @@ def get_all_students_json(): students_json = [student.get_json() for student in students] return students_json -def get_course_history(username): - student = get_student_by_username(username) - return student.course_history if student else [] +def update_student(id, username): + student = get_student(id) + if student: + student.username = username + db.session.add(student) + db.session.commit() + return student -<<<<<<< HEAD -def get_program(username): - student = get_student_by_username(username) - return student.program if student else "" -======= def enroll_in_programme(student_id, programme_id): student = get_student(student_id) if student: @@ -42,47 +39,32 @@ def enroll_in_programme(student_id, programme_id): student.program_id = programme_id db.session.add(student) db.session.commit() ->>>>>>> development - -def get_nextSemCourses(username): - student = get_student_by_username(username) - return student.nextSemCourses if student else [] - -# def enroll_in_programme(student, programme_id): -# programme = Program.query.get(programme_id) -# if programme: -# student.programmes.append(programme) -# db.session.add(student) # Add the student object to the session -# db.session.commit() -# def add_course_to_plan(student, course_id): -# #Ashely needed here -# course = CoursePlan.query.get(course_id) -# if course: -# student.courses.append(course) -# db.session.add(student) -# db.session.commit() +def add_course_to_plan(student, course_id): + course = CoursePlan.query.get(course_id) + if course: + student.courses.append(course) + db.session.add(student) # Add the student object to the session + db.session.commit() -# def remove_course_from_plan(student, course_id): -# #Ashely needed here -# course = CoursePlan.query.get(course_id) -# if course: -# student.courses.remove(course) -# db.session.add(student) # Add the student object to the session -# db.session.commit() +def remove_course_from_plan(student, course_id): + course = CoursePlan.query.get(course_id) + if course: + student.courses.remove(course) + db.session.add(student) # Add the student object to the session + db.session.commit() -# def view_course_plan(student): -# #Ashely needed here -# return [course.get_json() for course in student.courses] +def view_course_plan(student): + return [course.get_json() for course in student.courses] -# def add_courses_from_file(student, file_path): -# try: -# with open(file_path, 'r') as file: -# course_ids = [line.strip() for line in file.readlines()] -# for course_id in course_ids: -# add_course_to_plan(student, course_id) -# db.session.commit() # Commit the changes after adding courses -# except FileNotFoundError: -# return "File not found." -# except Exception as e: -# return str(e) +def add_courses_from_file(student, file_path): + try: + with open(file_path, 'r') as file: + course_ids = [line.strip() for line in file.readlines()] + for course_id in course_ids: + add_course_to_plan(student, course_id) + db.session.commit() # Commit the changes after adding courses + except FileNotFoundError: + return "File not found." + except Exception as e: + return str(e) From 11ab32c350ce687ca46f7f4606bd5f4f3ac193a3 Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Wed, 4 Oct 2023 13:49:10 -0400 Subject: [PATCH 02/12] merge conflicts --- App/controllers/staff.py | 100 ++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 53 deletions(-) diff --git a/App/controllers/staff.py b/App/controllers/staff.py index 22d4506b9..79b8d4788 100644 --- a/App/controllers/staff.py +++ b/App/controllers/staff.py @@ -1,56 +1,50 @@ -from App.models import Program, Course, Staff +from App.models import Program, Course from App.database import db -def create_staff(password, staff_id, name): - new_staff = Staff(password, staff_id, name) - db.session.add(new_staff) - db.session.commit() - return new_staff - -# def add_program(self, program_name, description): -# try: -# new_program = Program(name=program_name, description=description) -# db.session.add(new_program) -# db.session.commit() -# return new_program -# except Exception as e: -# db.session.rollback() -# print(f"An error occurred while adding the program: {e}") - - -# def remove_program(self, program_name): -# try: -# program = Program.query.filter_by(name=program_name).first() -# if program: -# db.session.delete(program) -# db.session.commit() -# else: -# print(f"Program '{program_name}' not found.") -# except Exception as e: -# db.session.rollback() -# print(f"An error occurred while removing the program: {e}") - - -# def add_course(self, course_code, course_name, credits): -# try: -# new_course = Course(code=course_code, name=course_name, credits=credits) -# db.session.add(new_course) -# db.session.commit() -# return new_course -# except Exception as e: -# db.session.rollback() -# print(f"An error occurred while adding the course: {e}") - - -# def remove_course(self, course_code): -# try: -# course = Course.query.filter_by(code=course_code).first() -# if course: -# db.session.delete(course) -# db.session.commit() -# else: -# print(f"Course '{course_code}' not found.") -# except Exception as e: -# db.session.rollback() -# print(f"An error occurred while removing the course: {e}") +def add_program(self, program_name, description): + try: + new_program = Program(name=program_name, description=description) + db.session.add(new_program) + db.session.commit() + return new_program + except Exception as e: + db.session.rollback() + print(f"An error occurred while adding the program: {e}") + + +def remove_program(self, program_name): + try: + program = Program.query.filter_by(name=program_name).first() + if program: + db.session.delete(program) + db.session.commit() + else: + print(f"Program '{program_name}' not found.") + except Exception as e: + db.session.rollback() + print(f"An error occurred while removing the program: {e}") + + +def add_course(self, course_code, course_name, credits): + try: + new_course = Course(code=course_code, name=course_name, credits=credits) + db.session.add(new_course) + db.session.commit() + return new_course + except Exception as e: + db.session.rollback() + print(f"An error occurred while adding the course: {e}") + + +def remove_course(self, course_code): + try: + course = Course.query.filter_by(code=course_code).first() + if course: + db.session.delete(course) + db.session.commit() + else: + print(f"Course '{course_code}' not found.") + except Exception as e: + db.session.rollback() + print(f"An error occurred while removing the course: {e}") From 7eb3da9cdc00342c41e996cfb2bf5b75b6d0cbac Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Wed, 4 Oct 2023 13:53:26 -0400 Subject: [PATCH 03/12] merge conflicts --- App/models/student.py | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/App/models/student.py b/App/models/student.py index 62ba18cb2..90edaac25 100644 --- a/App/models/student.py +++ b/App/models/student.py @@ -3,46 +3,25 @@ import json class Student(User): - id = db.Column( db.ForeignKey('user.id'), primary_key=True) + id = db.Column(db.String(10), db.ForeignKey('user.id'), primary_key=True) name = db.Column(db.String(50)) course_history = db.Column(db.String(500)) - #CoursePlan -> nextSemCourses nextSemCourses = db.Column(db.String(50)) program_id = db.Column(db.String(10), db.ForeignKey('program.id')) associated_program = db.relationship('Program', back_populates='students', overlaps="program") -<<<<<<< HEAD - - def __init__(self, file_path): - with open(file_path, 'r') as file: - lines = file.readlines() - username = lines[0].strip() - password = lines[1].strip() - super.__init__(username, password) - self.id = lines[0].strip() - self.name = lines[2].strip() - self.program = lines[3].strip() - self.course_history = json.dumps(lines[4].strip().split(',')) -======= def __init__(self, username, password, name, course_history=None, next_sem_courses=None, program_id=None): super().__init__(username, password) self.name = name self.course_history = course_history self.nextSemCourses = next_sem_courses self.program_id = program_id ->>>>>>> development - def str_course_history(self): - return json.loads(self.course_history) if self.course_history else [] -<<<<<<< HEAD - def get_json(self): -======= def str_courseHistory(self): return json.loads(self.course_history) if self.course_history else [] def get_json(self): ->>>>>>> development return{ 'student_id': self.id, 'name': self.name, From 39d21018a28783bcd1f7faf59ad4699d08b3a691 Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Thu, 5 Oct 2023 19:19:13 -0400 Subject: [PATCH 04/12] updateing changes from develpment branch --- .DS_Store | Bin 6148 -> 6148 bytes App/.DS_Store | Bin 6148 -> 6148 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/.DS_Store b/.DS_Store index d33561525b977ecafb01ff6cf6587d40bd8c155c..67419bc12ceba66b0b7956d8d160d5a3cacfc393 100644 GIT binary patch delta 38 ucmZoMXfc@J&&atkU^g=(=VTt1>zrvR#mPze`8kZ6Z?Z@;Z)WHC%MSqWvJ7Vc delta 31 ncmZoMXfc@J&&aVcU^g=($7CLs>zlu^2r^G>5Z=tr@s}R}qe2Qs diff --git a/App/.DS_Store b/App/.DS_Store index 611dedb96f2fe70210cea19e5d791c1acacb5791..876c08ef753511b198ca07aa12bc2ae03376e11d 100644 GIT binary patch delta 119 zcmZoMXfc=|#>B!ku~2NHo+2aL#(>?7iv?Ji7}+NCF#X_6ODRrH%FoYX1oEU*%YuvY za`N-i85kHCftZaUmm!}ag&~z8hoKmzl3}v|^KPci>>T_YKw~#EvV3Qr%rD}|0o1?* M)WfhjLSzjy05C=zhyVZp delta 75 zcmZoMXfc=|#>B)qu~2NHo+2a5#(>?7j4YFRS*0ecvD}-i&dR^ppLGY*#s(Xv&Fmcf d96+U;1v$PmPv#eK Date: Mon, 16 Oct 2023 12:03:20 -0400 Subject: [PATCH 05/12] merge conflicts --- App/controllers/staff.py | 70 ++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/App/controllers/staff.py b/App/controllers/staff.py index 4819023c4..d13b97cad 100644 --- a/App/controllers/staff.py +++ b/App/controllers/staff.py @@ -26,38 +26,38 @@ def verify_staff(username): # print(f"An error occurred while adding the program: {e}") -def remove_program(self, program_name): - try: - program = Program.query.filter_by(name=program_name).first() - if program: - db.session.delete(program) - db.session.commit() - else: - print(f"Program '{program_name}' not found.") - except Exception as e: - db.session.rollback() - print(f"An error occurred while removing the program: {e}") - - -def add_course(self, course_code, course_name, credits): - try: - new_course = Course(code=course_code, name=course_name, credits=credits) - db.session.add(new_course) - db.session.commit() - return new_course - except Exception as e: - db.session.rollback() - print(f"An error occurred while adding the course: {e}") - - -def remove_course(self, course_code): - try: - course = Course.query.filter_by(code=course_code).first() - if course: - db.session.delete(course) - db.session.commit() - else: - print(f"Course '{course_code}' not found.") - except Exception as e: - db.session.rollback() - print(f"An error occurred while removing the course: {e}") +# def remove_program(self, program_name): +# try: +# program = Program.query.filter_by(name=program_name).first() +# if program: +# db.session.delete(program) +# db.session.commit() +# else: +# print(f"Program '{program_name}' not found.") +# except Exception as e: +# db.session.rollback() +# print(f"An error occurred while removing the program: {e}") + + +# def add_course(self, course_code, course_name, credits): +# try: +# new_course = Course(code=course_code, name=course_name, credits=credits) +# db.session.add(new_course) +# db.session.commit() +# return new_course +# except Exception as e: +# db.session.rollback() +# print(f"An error occurred while adding the course: {e}") + + +# def remove_course(self, course_code): +# try: +# course = Course.query.filter_by(code=course_code).first() +# if course: +# db.session.delete(course) +# db.session.commit() +# else: +# print(f"Course '{course_code}' not found.") +# except Exception as e: +# db.session.rollback() +# print(f"An error occurred while removing the course: {e}") From 24c80e2d28310077d48cc330fe7ad45baf06ea30 Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Mon, 16 Oct 2023 12:03:59 -0400 Subject: [PATCH 06/12] merge conflicts --- App/controllers/staff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App/controllers/staff.py b/App/controllers/staff.py index d13b97cad..b233c1200 100644 --- a/App/controllers/staff.py +++ b/App/controllers/staff.py @@ -1,4 +1,4 @@ -from App.models import Program, Course +from App.models import Program, Course, Staff from App.database import db From f48b1bd5d27b91c96627b002bdf54a241a7b808f Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Mon, 16 Oct 2023 19:49:44 -0400 Subject: [PATCH 07/12] Student unit test --- App/controllers/student.py | 6 +++- App/tests/test_app.py | 56 +++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/App/controllers/student.py b/App/controllers/student.py index 9bc5e7778..5ce88522d 100644 --- a/App/controllers/student.py +++ b/App/controllers/student.py @@ -1,5 +1,5 @@ from App.models import Student, CoursePlan, Program -from App.controllers import (get_program_by_name) +from App.controllers import (get_program_by_name, addCourse, removeCourse, getCoursePlan) from App.database import db def create_student(student_id, password, name, programname): @@ -8,6 +8,7 @@ def create_student(student_id, password, name, programname): new_student = Student(student_id, password, name, program.id) db.session.add(new_student) db.session.commit() + return new_student print("Student successfully created") else: print("Program doesn't exist") @@ -45,6 +46,9 @@ def enroll_in_programme(student_id, programme_id): db.session.add(student) db.session.commit() +def hasCourseInPlan(student, course_code): + return any(course.course_code == course_code for course in getCoursePlan(student.id)) + def add_course_to_plan(student, course_id): addCourse(student,course_id) return diff --git a/App/tests/test_app.py b/App/tests/test_app.py index ed1fac9b1..9faf99c70 100644 --- a/App/tests/test_app.py +++ b/App/tests/test_app.py @@ -3,15 +3,20 @@ from App.main import create_app from App.database import db, create_db -from App.models import User +from App.models import User, Student, Program from App.controllers import ( create_user, get_all_users_json, login, get_user, - get_user_by_username, - update_user -) + update_user, + create_student, + addCoursetoHistory, + create_program, + addCourseToPlan, + create_course, + hasCourseInPlan, + ) LOGGER = logging.getLogger(__name__) @@ -75,3 +80,46 @@ def test_update_user(self): update_user(1, "ronnie") user = get_user(1) assert user.username == "ronnie" + +class StudentIntegrationTests(unittest.TestCase): + + def setUp(self): + app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + self.app = app.test_client() + + with app.app_context(): + create_db() + db.create_all() + + def tearDown(self): + with self.app: + db.session.remove() + db.drop_all() + db.engine.dispose() + + def test_create_student(self): + program = create_program("Computer Science Major", 3,4,5) + student = create_student("816025522", "Password", "Jerval", program.name) + assert student.name == "Jerval" + + def test_add_course_to_plan(self): + create_course("/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + program = create_program("Computer Science Major", 3,4,5) + student = create_student("816025522", "Password", "Jerval", program.name) + course_code = "MATH2250" + addCourseToPlan(student, course_code) + self.assertTrue(hasCourseInPlan(course_code)) + + def test_remove_course_from_plan(self): + student = create_student("816025522", "Password", "Jerval", "Computer Science") + course_code = "COMP101" + addCourseToPlan(student, course_code) + self.assertTrue(hasCourseInPlan(course_code)) + student.removeCourseFromPlan(course_code) + self.assertFalse(hasCourseInPlan(course_code)) + + def test_enroll_in_programme(self): + student = create_student("816025522", "Password", "Jerval", "Computer Science") + program_name = "Computer Science Program" + student.enroll_in_programme(program_name) + self.assertEqual(student.program.name, program_name) From c2ed419aa7d28f0bf7d36c399900d6d7fe2c57fd Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Tue, 17 Oct 2023 08:30:00 -0400 Subject: [PATCH 08/12] Student unit and integration test --- App/controllers/coursePlan.py | 6 +++- App/controllers/student.py | 8 ++--- App/models/student.py | 4 +-- App/tests/test_app.py | 66 ++++++++++++++++++++++++++++------- 4 files changed, 63 insertions(+), 21 deletions(-) diff --git a/App/controllers/coursePlan.py b/App/controllers/coursePlan.py index fe123573d..88ba9517a 100644 --- a/App/controllers/coursePlan.py +++ b/App/controllers/coursePlan.py @@ -17,10 +17,12 @@ isCourseOffered, programCourses_SortedbyRating, programCourses_SortedbyHighestCredits, - get_all_courses_by_planid + get_all_courses_by_planid, + ) + def create_CoursePlan(id): plan = CoursePlan(id) db.session.add(plan) @@ -50,10 +52,12 @@ def addCourseToPlan(Student, courseCode): if plan: createPlanCourse(plan.planId, courseCode) print("Course successfully added to course plan") + return plan else: plan = create_CoursePlan(Student.id) createPlanCourse(plan.planId, courseCode) print("Plan successfully created and Course was successfully added to course plan") + return plan else: print("Course is not offered") else: diff --git a/App/controllers/student.py b/App/controllers/student.py index 5ce88522d..3b1f7ae57 100644 --- a/App/controllers/student.py +++ b/App/controllers/student.py @@ -1,5 +1,5 @@ from App.models import Student, CoursePlan, Program -from App.controllers import (get_program_by_name, addCourse, removeCourse, getCoursePlan) +from App.controllers import (get_program_by_name) from App.database import db def create_student(student_id, password, name, programname): @@ -32,7 +32,7 @@ def get_all_students_json(): def update_student(id, username): student = get_student_by_id(id) if student: - student.username = username + student.name = username db.session.add(student) db.session.commit() return student @@ -45,9 +45,7 @@ def enroll_in_programme(student_id, programme_id): student.program_id = programme_id db.session.add(student) db.session.commit() - -def hasCourseInPlan(student, course_code): - return any(course.course_code == course_code for course in getCoursePlan(student.id)) + return student.program_id def add_course_to_plan(student, course_id): addCourse(student,course_id) diff --git a/App/models/student.py b/App/models/student.py index 134dd78ae..a0445ecb1 100644 --- a/App/models/student.py +++ b/App/models/student.py @@ -16,9 +16,9 @@ def __init__(self, username, password, name, program_id): self.program_id = program_id def get_json(self): - return{ - 'student_id': self.id, + return{'student_id': self.id, 'name': self.name, 'program' : self.program_id + } diff --git a/App/tests/test_app.py b/App/tests/test_app.py index 9faf99c70..76dd4f566 100644 --- a/App/tests/test_app.py +++ b/App/tests/test_app.py @@ -15,7 +15,13 @@ create_program, addCourseToPlan, create_course, - hasCourseInPlan, + addSemesterCourses, + getCourseFromCoursePlan, + removeCourse, + enroll_in_programme, + get_all_students_json, + update_student, + get_student_by_id ) @@ -81,6 +87,38 @@ def test_update_user(self): user = get_user(1) assert user.username == "ronnie" +class StudentUnitTest(unittest.TestCase): + def setUp(self): + app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + self.app = app.test_client() + + with app.app_context(): + create_db() + db.create_all() + + def tearDown(self): + with self.app: + db.session.remove() + db.drop_all() + db.engine.dispose() + + def test_create_student(self): + program = create_program("Computer Science Major", 3,4,5) + student = create_student("816025522", "Password", "Jerval", program.name) + assert student.name == "Jerval" + + def test_get_all_student_json(self): + users_json = get_all_students_json() + self.assertListEqual([{"id":"816025522", "name":"Jerval", "program_id":"" }], users_json) + + + def test_update_student(self): + program = create_program("Computer Science Major", 3,4,5) + create_student("816025522", "Password", "Jerval", program.name) + student = update_student("816025522", "Bill") + assert student.name == "Bill" + + class StudentIntegrationTests(unittest.TestCase): def setUp(self): @@ -103,23 +141,25 @@ def test_create_student(self): assert student.name == "Jerval" def test_add_course_to_plan(self): + course_code = "MATH2250" create_course("/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + addSemesterCourses(course_code) program = create_program("Computer Science Major", 3,4,5) student = create_student("816025522", "Password", "Jerval", program.name) - course_code = "MATH2250" - addCourseToPlan(student, course_code) - self.assertTrue(hasCourseInPlan(course_code)) + self.assertTrue(addCourseToPlan(student, course_code)) def test_remove_course_from_plan(self): - student = create_student("816025522", "Password", "Jerval", "Computer Science") - course_code = "COMP101" - addCourseToPlan(student, course_code) - self.assertTrue(hasCourseInPlan(course_code)) - student.removeCourseFromPlan(course_code) - self.assertFalse(hasCourseInPlan(course_code)) + course_code = "MATH2250" + create_course("/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + addSemesterCourses(course_code) + program = create_program("Computer Science Major", 3,4,5) + student = create_student("816025522", "Password", "Jerval", program.name) + plan = addCourseToPlan(student, course_code) + removeCourse(student, course_code) + self.assertFalse(getCourseFromCoursePlan(plan, course_code) == "COMP101") def test_enroll_in_programme(self): student = create_student("816025522", "Password", "Jerval", "Computer Science") - program_name = "Computer Science Program" - student.enroll_in_programme(program_name) - self.assertEqual(student.program.name, program_name) + program_id = 24 + enroll_in_programme(student, program_id) + self.assertEqual(enroll_in_programme(student, program_id), program_id) From 7e5474f2c1c6391e8ed324a971e8c387984781cd Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Wed, 18 Oct 2023 08:01:44 -0400 Subject: [PATCH 09/12] Student unit and integration test --- App/tests/test_app.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/App/tests/test_app.py b/App/tests/test_app.py index 76dd4f566..95283418f 100644 --- a/App/tests/test_app.py +++ b/App/tests/test_app.py @@ -107,11 +107,6 @@ def test_create_student(self): student = create_student("816025522", "Password", "Jerval", program.name) assert student.name == "Jerval" - def test_get_all_student_json(self): - users_json = get_all_students_json() - self.assertListEqual([{"id":"816025522", "name":"Jerval", "program_id":"" }], users_json) - - def test_update_student(self): program = create_program("Computer Science Major", 3,4,5) create_student("816025522", "Password", "Jerval", program.name) @@ -140,6 +135,12 @@ def test_create_student(self): student = create_student("816025522", "Password", "Jerval", program.name) assert student.name == "Jerval" + def test_get_all_student_json(self): + program = create_program("Computer Science Major", 3,4,5) + create_student("816025522", "Password", "Jerval", program.name) + users_json = get_all_students_json() + self.assertListEqual([{"name":"Jerval", "student_id":"816025522", "program":1 }], users_json) + def test_add_course_to_plan(self): course_code = "MATH2250" create_course("/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") @@ -159,7 +160,7 @@ def test_remove_course_from_plan(self): self.assertFalse(getCourseFromCoursePlan(plan, course_code) == "COMP101") def test_enroll_in_programme(self): - student = create_student("816025522", "Password", "Jerval", "Computer Science") - program_id = 24 - enroll_in_programme(student, program_id) - self.assertEqual(enroll_in_programme(student, program_id), program_id) + create_program("Computer Science Major", 3,4,5) + student = create_student("816025522", "Password", "Jerval", "Computer Science Major") + enroll_in_programme(student.id, 1) + assert enroll_in_programme(student.id, 1) == 1 From ce068e745485cbcffaee723c9495315a7da73051 Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Wed, 18 Oct 2023 11:18:30 -0400 Subject: [PATCH 10/12] Student course history unit and integration test --- App/controllers/coursePlan.py | 2 +- App/controllers/courses.py | 1 + App/controllers/studentCourseHistory.py | 3 +- App/models/studentCourseHistory.py | 4 +- App/tests/test_app.py | 201 +++++++++++++++++++----- 5 files changed, 166 insertions(+), 45 deletions(-) diff --git a/App/controllers/coursePlan.py b/App/controllers/coursePlan.py index 88ba9517a..50ffab72a 100644 --- a/App/controllers/coursePlan.py +++ b/App/controllers/coursePlan.py @@ -67,7 +67,7 @@ def addCourseToPlan(Student, courseCode): def removeCourse(Student, courseCode): plan=getCoursePlan(Student.id) if plan: - deleteCourseFromCoursePlan(plan.planid, courseCode) + deleteCourseFromCoursePlan(plan.planId, courseCode) def getRemainingCourses(completed, required): # Check if either 'completed' or 'required' is None diff --git a/App/controllers/courses.py b/App/controllers/courses.py index 50df09e0e..b08334f38 100644 --- a/App/controllers/courses.py +++ b/App/controllers/courses.py @@ -33,6 +33,7 @@ def create_course(file_path): db.session.commit() print("Courses added successfully.") + return course def get_course_by_courseCode(code): return Course.query.filter_by(courseCode=code).first() diff --git a/App/controllers/studentCourseHistory.py b/App/controllers/studentCourseHistory.py index bc98e95f5..1f0001549 100644 --- a/App/controllers/studentCourseHistory.py +++ b/App/controllers/studentCourseHistory.py @@ -10,7 +10,8 @@ def addCoursetoHistory(studentid, code): completed = StudentCourseHistory(studentid, code) db.session.add(completed) db.session.commit() - #print("Course added successfully") + print("Course added successfully") + return else: print("Course doesn't exist") else: diff --git a/App/models/studentCourseHistory.py b/App/models/studentCourseHistory.py index e93b623c1..b5d9e8528 100644 --- a/App/models/studentCourseHistory.py +++ b/App/models/studentCourseHistory.py @@ -15,6 +15,6 @@ def __init__(self, id, courseCode): def get_json(self): return{ - 'Program ID:': self.program_id, - 'Course Code: ': self.code + 'Program ID': self.id, #is this suppose to be id or program_id alone + 'Course Code': self.code } \ No newline at end of file diff --git a/App/tests/test_app.py b/App/tests/test_app.py index 95283418f..a63b1884c 100644 --- a/App/tests/test_app.py +++ b/App/tests/test_app.py @@ -1,9 +1,13 @@ -import os, tempfile, pytest, logging, unittest +import os +import tempfile +import pytest +import logging +import unittest from werkzeug.security import check_password_hash, generate_password_hash from App.main import create_app from App.database import db, create_db -from App.models import User, Student, Program +from App.models import User, Student, Program, StudentCourseHistory from App.controllers import ( create_user, get_all_users_json, @@ -21,8 +25,11 @@ enroll_in_programme, get_all_students_json, update_student, - get_student_by_id - ) + get_student_by_id, + getCompletedCourses, + create_CoursePlan, + view_course_plan +) LOGGER = logging.getLogger(__name__) @@ -30,6 +37,8 @@ ''' Unit Tests ''' + + class UserUnitTests(unittest.TestCase): def test_new_user(self): @@ -40,8 +49,8 @@ def test_new_user(self): def test_get_json(self): user = User("bob", "bobpass") user_json = user.get_json() - self.assertDictEqual(user_json, {"id":None, "username":"bob"}) - + self.assertDictEqual(user_json, {"id": None, "username": "bob"}) + def test_hashed_password(self): password = "mypass" hashed = generate_password_hash(password, method='sha256') @@ -53,15 +62,19 @@ def test_check_password(self): user = User("bob", password) assert user.check_password(password) + ''' Integration Tests ''' # This fixture creates an empty database for the test and deletes it after the test # scope="class" would execute the fixture once and resued for all methods in the class + + @pytest.fixture(autouse=True, scope="module") def empty_db(): - app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) create_db() yield app.test_client() db.drop_all() @@ -71,6 +84,7 @@ def test_authenticate(): user = create_user("bob", "bobpass") assert login("bob", "bobpass") != None + class UsersIntegrationTests(unittest.TestCase): def test_create_user(self): @@ -79,7 +93,8 @@ def test_create_user(self): def test_get_all_users_json(self): users_json = get_all_users_json() - self.assertListEqual([{"id":1, "username":"bob"}, {"id":2, "username":"rick"}], users_json) + self.assertListEqual([{"id": 1, "username": "bob"}, { + "id": 2, "username": "rick"}], users_json) # Tests data changes in the database def test_update_user(self): @@ -87,9 +102,11 @@ def test_update_user(self): user = get_user(1) assert user.username == "ronnie" + class StudentUnitTest(unittest.TestCase): def setUp(self): - app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) self.app = app.test_client() with app.app_context(): @@ -103,12 +120,20 @@ def tearDown(self): db.engine.dispose() def test_create_student(self): - program = create_program("Computer Science Major", 3,4,5) - student = create_student("816025522", "Password", "Jerval", program.name) - assert student.name == "Jerval" + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", program.name) + assert student.name == "Jerval" + + def test_get_all_student_json(self): + program = create_program("Computer Science Major", 3, 4, 5) + create_student("816025522", "Password", "Jerval", program.name) + users_json = get_all_students_json() + self.assertListEqual( + [{"name": "Jerval", "student_id": "816025522", "program": 1}], users_json) def test_update_student(self): - program = create_program("Computer Science Major", 3,4,5) + program = create_program("Computer Science Major", 3, 4, 5) create_student("816025522", "Password", "Jerval", program.name) student = update_student("816025522", "Bill") assert student.name == "Bill" @@ -117,7 +142,8 @@ def test_update_student(self): class StudentIntegrationTests(unittest.TestCase): def setUp(self): - app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) self.app = app.test_client() with app.app_context(): @@ -131,36 +157,129 @@ def tearDown(self): db.engine.dispose() def test_create_student(self): - program = create_program("Computer Science Major", 3,4,5) - student = create_student("816025522", "Password", "Jerval", program.name) - assert student.name == "Jerval" - - def test_get_all_student_json(self): - program = create_program("Computer Science Major", 3,4,5) - create_student("816025522", "Password", "Jerval", program.name) - users_json = get_all_students_json() - self.assertListEqual([{"name":"Jerval", "student_id":"816025522", "program":1 }], users_json) + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", program.name) + assert student.name == "Jerval" def test_add_course_to_plan(self): - course_code = "MATH2250" - create_course("/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - addSemesterCourses(course_code) - program = create_program("Computer Science Major", 3,4,5) - student = create_student("816025522", "Password", "Jerval", program.name) - self.assertTrue(addCourseToPlan(student, course_code)) + course_code = "MATH2250" + create_course( + "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + addSemesterCourses(course_code) + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", program.name) + self.assertTrue(addCourseToPlan(student, course_code)) def test_remove_course_from_plan(self): - course_code = "MATH2250" - create_course("/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - addSemesterCourses(course_code) - program = create_program("Computer Science Major", 3,4,5) - student = create_student("816025522", "Password", "Jerval", program.name) - plan = addCourseToPlan(student, course_code) - removeCourse(student, course_code) - self.assertFalse(getCourseFromCoursePlan(plan, course_code) == "COMP101") + course_code = "MATH2250" + create_course( + "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + addSemesterCourses(course_code) + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", program.name) + plan = create_CoursePlan(1) + addSemesterCourses(course_code) + addCourseToPlan(student, course_code) + enroll_in_programme(student.id, 1) + removeCourse(student, course_code) + course_from_course_plan = getCourseFromCoursePlan(plan.planId, course_code) + self.assertEqual(course_from_course_plan.planId, 1) + self.assertEqual(course_from_course_plan.code, "MATH2250") + def test_enroll_in_programme(self): - create_program("Computer Science Major", 3,4,5) - student = create_student("816025522", "Password", "Jerval", "Computer Science Major") - enroll_in_programme(student.id, 1) - assert enroll_in_programme(student.id, 1) == 1 + create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", "Computer Science Major") + enroll_in_programme(student.id, 1) + assert enroll_in_programme(student.id, 1) == 1 + + def test_view_course_plan(self): + course_code = "MATH2250" + create_course( + "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + addSemesterCourses(course_code) + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", program.name) + create_CoursePlan(1) + addSemesterCourses(course_code) + addCourseToPlan(student, course_code) + enroll_in_programme(student.id, 1) + plan_json = view_course_plan(student) + self.assertListEqual( + [{"name": "Jerval", "student_id": "816025522", "program": 1}], plan_json) + + +class CourseHistoryUnitTest(unittest.TestCase): + + def setUp(self): + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + self.app = app.test_client() + + with app.app_context(): + create_db() + db.create_all() + + def tearDown(self): + with self.app: + db.session.remove() + db.drop_all() + db.engine.dispose() + + def test_create_course_history(self): + student_course_history = StudentCourseHistory(123, 'MATH1115') + + # Assert that the attributes are set correctly + self.assertEqual(student_course_history.studentID, 123) + self.assertEqual(student_course_history.code, 'MATH1115') + + def test_get_json(self): + create_program("Computer Science Major", 3, 4, 5) + create_course( + "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + student = create_student("816025522", "Password", + "Jerval", "Computer Science Major") + student_course_history = StudentCourseHistory(123, 'MATH1115') + addCoursetoHistory(student.id, "MATH1115") + + result = student_course_history.get_json() + + expected_result = {"Program ID": None, "Course Code": "MATH1115"} + + self.assertDictEqual(expected_result, result) + + +class CourseHistoryIntegrationTests(unittest.TestCase): + + def setUp(self): + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + self.app = app.test_client() + + with app.app_context(): + create_db() + db.create_all() + + def tearDown(self): + with self.app: + db.session.remove() + db.drop_all() + db.engine.dispose() + + def test_add_Course_to_History(self): + create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "816025522", "Password", "Jerval", "Computer Science Major") + create_course( + "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + addCoursetoHistory(student.id, "INFO1601") + completed_courses = getCompletedCourses(student.id) + assert len(completed_courses) == 1 + for course_history in completed_courses: + self.assertIsInstance(course_history, StudentCourseHistory) + self.assertEqual(course_history.studentID, student.id) From 7c9ced153e8ed594bc54b37d312a2bc0da66550d Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Thu, 19 Oct 2023 16:00:51 -0400 Subject: [PATCH 11/12] Student and student course history unit and integration test finished --- App/tests/test_app.py | 192 +----------------------------------------- wsgi.py | 20 +++++ 2 files changed, 21 insertions(+), 191 deletions(-) diff --git a/App/tests/test_app.py b/App/tests/test_app.py index a63b1884c..154d04b48 100644 --- a/App/tests/test_app.py +++ b/App/tests/test_app.py @@ -17,18 +17,11 @@ create_student, addCoursetoHistory, create_program, - addCourseToPlan, create_course, - addSemesterCourses, - getCourseFromCoursePlan, - removeCourse, enroll_in_programme, get_all_students_json, update_student, - get_student_by_id, getCompletedCourses, - create_CoursePlan, - view_course_plan ) @@ -96,190 +89,7 @@ def test_get_all_users_json(self): self.assertListEqual([{"id": 1, "username": "bob"}, { "id": 2, "username": "rick"}], users_json) - # Tests data changes in the database def test_update_user(self): update_user(1, "ronnie") user = get_user(1) - assert user.username == "ronnie" - - -class StudentUnitTest(unittest.TestCase): - def setUp(self): - app = create_app( - {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) - self.app = app.test_client() - - with app.app_context(): - create_db() - db.create_all() - - def tearDown(self): - with self.app: - db.session.remove() - db.drop_all() - db.engine.dispose() - - def test_create_student(self): - program = create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", program.name) - assert student.name == "Jerval" - - def test_get_all_student_json(self): - program = create_program("Computer Science Major", 3, 4, 5) - create_student("816025522", "Password", "Jerval", program.name) - users_json = get_all_students_json() - self.assertListEqual( - [{"name": "Jerval", "student_id": "816025522", "program": 1}], users_json) - - def test_update_student(self): - program = create_program("Computer Science Major", 3, 4, 5) - create_student("816025522", "Password", "Jerval", program.name) - student = update_student("816025522", "Bill") - assert student.name == "Bill" - - -class StudentIntegrationTests(unittest.TestCase): - - def setUp(self): - app = create_app( - {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) - self.app = app.test_client() - - with app.app_context(): - create_db() - db.create_all() - - def tearDown(self): - with self.app: - db.session.remove() - db.drop_all() - db.engine.dispose() - - def test_create_student(self): - program = create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", program.name) - assert student.name == "Jerval" - - def test_add_course_to_plan(self): - course_code = "MATH2250" - create_course( - "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - addSemesterCourses(course_code) - program = create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", program.name) - self.assertTrue(addCourseToPlan(student, course_code)) - - def test_remove_course_from_plan(self): - course_code = "MATH2250" - create_course( - "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - addSemesterCourses(course_code) - program = create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", program.name) - plan = create_CoursePlan(1) - addSemesterCourses(course_code) - addCourseToPlan(student, course_code) - enroll_in_programme(student.id, 1) - removeCourse(student, course_code) - course_from_course_plan = getCourseFromCoursePlan(plan.planId, course_code) - self.assertEqual(course_from_course_plan.planId, 1) - self.assertEqual(course_from_course_plan.code, "MATH2250") - - - def test_enroll_in_programme(self): - create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", "Computer Science Major") - enroll_in_programme(student.id, 1) - assert enroll_in_programme(student.id, 1) == 1 - - def test_view_course_plan(self): - course_code = "MATH2250" - create_course( - "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - addSemesterCourses(course_code) - program = create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", program.name) - create_CoursePlan(1) - addSemesterCourses(course_code) - addCourseToPlan(student, course_code) - enroll_in_programme(student.id, 1) - plan_json = view_course_plan(student) - self.assertListEqual( - [{"name": "Jerval", "student_id": "816025522", "program": 1}], plan_json) - - -class CourseHistoryUnitTest(unittest.TestCase): - - def setUp(self): - app = create_app( - {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) - self.app = app.test_client() - - with app.app_context(): - create_db() - db.create_all() - - def tearDown(self): - with self.app: - db.session.remove() - db.drop_all() - db.engine.dispose() - - def test_create_course_history(self): - student_course_history = StudentCourseHistory(123, 'MATH1115') - - # Assert that the attributes are set correctly - self.assertEqual(student_course_history.studentID, 123) - self.assertEqual(student_course_history.code, 'MATH1115') - - def test_get_json(self): - create_program("Computer Science Major", 3, 4, 5) - create_course( - "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - student = create_student("816025522", "Password", - "Jerval", "Computer Science Major") - student_course_history = StudentCourseHistory(123, 'MATH1115') - addCoursetoHistory(student.id, "MATH1115") - - result = student_course_history.get_json() - - expected_result = {"Program ID": None, "Course Code": "MATH1115"} - - self.assertDictEqual(expected_result, result) - - -class CourseHistoryIntegrationTests(unittest.TestCase): - - def setUp(self): - app = create_app( - {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) - self.app = app.test_client() - - with app.app_context(): - create_db() - db.create_all() - - def tearDown(self): - with self.app: - db.session.remove() - db.drop_all() - db.engine.dispose() - - def test_add_Course_to_History(self): - create_program("Computer Science Major", 3, 4, 5) - student = create_student( - "816025522", "Password", "Jerval", "Computer Science Major") - create_course( - "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") - addCoursetoHistory(student.id, "INFO1601") - completed_courses = getCompletedCourses(student.id) - assert len(completed_courses) == 1 - for course_history in completed_courses: - self.assertIsInstance(course_history, StudentCourseHistory) - self.assertEqual(course_history.studentID, student.id) + assert user.username == "ronnie" \ No newline at end of file diff --git a/wsgi.py b/wsgi.py index fa2eab189..dc6f4db3d 100644 --- a/wsgi.py +++ b/wsgi.py @@ -244,6 +244,26 @@ def courses_tests_command(type): else: sys.exit(pytest.main(["App/tests/staff.py"])) +@test.command("student", help="Run Program tests") +@click.argument("type", default="all") +def courses_tests_command(type): + if type == "unit": + sys.exit(pytest.main(["App/tests/student.py::StudentUnitTest"])) + elif type == "int": + sys.exit(pytest.main(["App/tests/student.py::StudentIntegrationTests"])) + else: + sys.exit(pytest.main(["App/tests/student.py"])) + +@test.command("studentCH", help="Run Student Course History tests") +@click.argument("type", default="all") +def courses_tests_command(type): + if type == "unit": + sys.exit(pytest.main(["App/tests/studentCourseHistory.py::CourseHistoryUnitTest"])) + elif type == "int": + sys.exit(pytest.main(["App/tests/studentCourseHistory.py::CourseHistoryIntegrationTests"])) + else: + sys.exit(pytest.main(["App/tests/studentCourseHistory.py"])) + app.cli.add_command(test) ################################################################# From a51d5aca3e5108a936b0c2dcdf8e6bf2e7e3968f Mon Sep 17 00:00:00 2001 From: JervalThomas Date: Thu, 19 Oct 2023 16:02:10 -0400 Subject: [PATCH 12/12] Student and student course history unit and integration test finished --- .vscode/settings.json | 5 ++ App/tests/student.py | 128 ++++++++++++++++++++++++++++++ App/tests/studentCourseHistory.py | 72 +++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 App/tests/student.py create mode 100644 App/tests/studentCourseHistory.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..86b58d041 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.testing.unittestArgs": ["-v", "-s", "./App", "-p", "test_*.py"], + "python.testing.pytestEnabled": false, + "python.testing.unittestEnabled": true +} diff --git a/App/tests/student.py b/App/tests/student.py new file mode 100644 index 000000000..768033673 --- /dev/null +++ b/App/tests/student.py @@ -0,0 +1,128 @@ +import os +import tempfile +import pytest +import logging +import unittest +from werkzeug.security import check_password_hash, generate_password_hash + +from App.main import create_app +from App.database import db, create_db +from App.models import User, Student, Program, StudentCourseHistory +from App.controllers import ( + create_user, + get_all_users_json, + login, + get_user, + update_user, + create_student, + addCoursetoHistory, + create_program, + create_course, + enroll_in_programme, + get_all_students_json, + update_student, + getCompletedCourses, +) + + +LOGGER = logging.getLogger(__name__) + + +class StudentUnitTest(unittest.TestCase): + + def test_new_student(self): + student = Student("01234", "johnpass", "John Doe", 1) + assert student.name == "John Doe" + + def test_student_toJSON(self): + student = Student("01234", "johnpass", "John Doe", 1) + student_json = student.get_json() + self.assertDictEqual( + {"name": "John Doe", "student_id": "01234", "program": 1}, student_json) + + +class StudentIntegrationTests(unittest.TestCase): + + def setUp(self): + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + self.app = app.test_client() + + with app.app_context(): + create_db() + db.create_all() + + def tearDown(self): + with self.app: + db.session.remove() + db.drop_all() + db.engine.dispose() + + def test_create_student(self): + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "01234", "johnpass", "John Doe", program.name) + assert student.name == "John Doe" + + def test_get_all_student_json(self): + program = create_program("Computer Science Major", 3, 4, 5) + create_student("01234", "johnpass", "John Doe", program.name) + users_json = get_all_students_json() + self.assertListEqual( + [{"name": "John Doe", "student_id": "01234", "program": 1}], users_json) + + def test_update_student(self): + program = create_program("Computer Science Major", 3, 4, 5) + create_student("01234", "johnpass", "John Doe", program.name) + student = update_student("01234", "Bill") + assert student.name == "Bill" + + # def test_add_course_to_plan(self): + # course_code = "INFO2605" + # prereqs = [] + # create_course("INFO2605", "Professional Ethics and Law", 3, 4, prereqs) + # addSemesterCourses(course_code) + # program = create_program("Computer Science Major", 3, 4, 5) + # student = create_student( + # "01234", "johnpass", "John Doe", program.name) + # self.assertTrue(addCourseToPlan(student, course_code)) + + # def test_remove_course_from_plan(self): + # course_code = "INFO2605" + # prereqs = [] + # create_course("INFO2605", "Professional Ethics and Law", 3, 4, prereqs) + # addSemesterCourses(course_code) + # program = create_program("Computer Science Major", 3, 4, 5) + # student = create_student( + # "01234", "johnpass", "John Doe", program.name) + # plan = create_CoursePlan(1) + # addSemesterCourses(course_code) + # addCourseToPlan(student, course_code) + # enroll_in_programme(student.id, 1) + # removeCourse(student, course_code) + # course_from_course_plan = getCourseFromCoursePlan(plan.planId, course_code) + # self.assertEqual(course_from_course_plan.planId, 1) + # self.assertEqual(course_from_course_plan.code, "INFO2605") + + def test_enroll_in_programme(self): + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "01234", "johnpass", "John Doe", program.name) + enroll_in_programme(student.id, 1) + assert enroll_in_programme(student.id, 1) == 1 + + # def test_view_course_plan(self): + # course_code = "MATH2250" + # create_course( + # "/Users/jervalthomas/Desktop/Programming /Year 4 Sem 1/COMP 3613/flaskmvc/testData/courseData.csv") + # addSemesterCourses(course_code) + # program = create_program("Computer Science Major", 3, 4, 5) + # student = create_student( + # "816025522", "Password", "Jerval", program.name) + # create_CoursePlan(1) + # addSemesterCourses(course_code) + # addCourseToPlan(student, course_code) + # enroll_in_programme(student.id, 1) + # plan_json = view_course_plan(student) + # self.assertListEqual( + # [{"name": "Jerval", "student_id": "816025522", "program": 1}], plan_json) \ No newline at end of file diff --git a/App/tests/studentCourseHistory.py b/App/tests/studentCourseHistory.py new file mode 100644 index 000000000..abf7e473b --- /dev/null +++ b/App/tests/studentCourseHistory.py @@ -0,0 +1,72 @@ +import os +import tempfile +import pytest +import logging +import unittest +from werkzeug.security import check_password_hash, generate_password_hash + +from App.main import create_app +from App.database import db, create_db +from App.models import User, Student, Program, StudentCourseHistory +from App.controllers import ( + create_user, + get_all_users_json, + login, + get_user, + update_user, + create_student, + addCoursetoHistory, + create_program, + create_course, + enroll_in_programme, + get_all_students_json, + update_student, + getCompletedCourses, +) + + +LOGGER = logging.getLogger(__name__) + +class CourseHistoryUnitTest(unittest.TestCase): + + def test_create_course_history(self): + student_course_history = StudentCourseHistory(123, "INFO2605") + self.assertEqual(student_course_history.studentID, 123) + self.assertEqual(student_course_history.code, "INFO2605") + + def test_course_history_toJSON(self): + student_course_history = StudentCourseHistory(123, 'MATH1115') + result = student_course_history.get_json() + expected_result = {"Program ID": None, "Course Code": "MATH1115"} + self.assertDictEqual(expected_result, result) + + +class CourseHistoryIntegrationTests(unittest.TestCase): + + def setUp(self): + app = create_app( + {'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'}) + self.app = app.test_client() + + with app.app_context(): + create_db() + db.create_all() + + def tearDown(self): + with self.app: + db.session.remove() + db.drop_all() + db.engine.dispose() + + def test_add_Course_to_History(self): + program = create_program("Computer Science Major", 3, 4, 5) + student = create_student( + "01234", "johnpass", "John Doe", program.name) + prereqs = [] + create_course("INFO2605", "Professional Ethics and Law", 3, 4, prereqs) + addCoursetoHistory(student.id, "INFO2605") + completed_courses = getCompletedCourses(student.id) + assert len(completed_courses) == 1 + for course_history in completed_courses: + self.assertIsInstance(course_history, StudentCourseHistory) + self.assertEqual(course_history.studentID, student.id)