Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion App/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from .test_app import *
from .courses import *
from .program import *
from .staff import *
from .staff import *
from .coursePlan import *
from .coursesOfferedPerSem import *
170 changes: 170 additions & 0 deletions App/tests/coursePlan.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
import pytest, unittest
from App.models import CoursePlan, CoursePlanCourses
from App.controllers import create_CoursePlan, create_student, create_program, addCourseToPlan, enroll_in_programme, addSemesterCourses, generator, createCoursesfromFile, get_program_by_name, getCoursePlan, get_all_courses_by_planid, get_student, create_programCourse, removeCourse
from App.main import create_app
from App.database import db, create_db

class CoursePlanUnitTests(unittest.TestCase):

def test_new_courseplan(self):
student_id = "01234"
course_plan = CoursePlan(student_id)
self.assertEqual(course_plan.studentId, student_id)

def test_courseplan_toJSON(self):
student_id = "01234"
course_plan = CoursePlan(student_id)
course_plan_json = course_plan.get_json()
self.assertDictEqual(course_plan_json, {"planId": None, "studentId": student_id})


def test_new_courseplan_courses(self):
student_id = "01234"
course_plan = CoursePlan(student_id)
course_code = "INFO2605"
courseplan_courses = CoursePlanCourses("1", course_code)
self.assertEqual(courseplan_courses.code, course_code)



@pytest.fixture(autouse=True, scope="module")
def empty_db():
app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'})
create_db()
yield app.test_client()
db.drop_all()


# Integration Tests
class CoursePlanIntegrationTests(unittest.TestCase):

def test_create_course_plan(self):
# Create a student and program.
program = create_program("Computer Science Major", 69, 15, 9)
student = create_student("1234", "johnpass", "John Doe", program.name)

#Create courses, semester courses and program coursess
createCoursesfromFile('testData/courseData.csv')

file_path = "testData/test.txt"
with open(file_path, 'r') as file:
for i, line in enumerate(file):
line = line.strip()
if i ==0:
programName = line
else:
course = line.split(',')
create_programCourse(programName, course[0],int(course[1]))

file_path1='testData/test2.txt'
with open(file_path1, 'r') as file:
for i, line in enumerate(file):
line = line.strip()
addSemesterCourses(line)


plan = create_CoursePlan(student.id)
self.assertIsNotNone(plan)
assert getCoursePlan(student.id) != None

course_code = "INFO1601"
added_plan = addCourseToPlan(student, course_code)
courseplan_courses = get_all_courses_by_planid("1")

self.assertIsNotNone(added_plan)
self.assertIn('INFO1601', [course.code for course in courseplan_courses])


def test_remove_course_from_plan(self):
program = get_program_by_name("Computer Science Major")
student = get_student("1234")
plan_id = enroll_in_programme("1234", program.id)
courseplan_courses = get_all_courses_by_planid(plan_id)
self.assertIn('INFO1601', [course.code for course in courseplan_courses])
removeCourse(student, "INFO1601")
courseplan_courses = get_all_courses_by_planid(plan_id)
self.assertNotIn('INFO1601', [course.code for course in courseplan_courses])


def test_create_fastGraduation_course_plan(self):
program = get_program_by_name("Computer Science Major")
student = get_student("1234")
plan_id = enroll_in_programme("1234", program.id)

courseplan_courses = get_all_courses_by_planid(plan_id)
course_codes = [course.code for course in courseplan_courses]
for course_code in course_codes:
removeCourse(student, course_code)

generator(student, "fastest")
courseplan_courses = get_all_courses_by_planid(plan_id)

print("Courses in Course Plan:")
for course in courseplan_courses:
print(course.code)

self.assertIsNotNone(courseplan_courses)
self.assertIn('COMP1601', [course.code for course in courseplan_courses])


def test_create_easy_course_plan(self):
program = get_program_by_name("Computer Science Major")
student = get_student("1234")
plan_id = enroll_in_programme("1234", program.id)

courseplan_courses = get_all_courses_by_planid(plan_id)
course_codes = [course.code for course in courseplan_courses]
for course_code in course_codes:
removeCourse(student, course_code)

# Create a easy graduation course plan
generator(student, "easy")
courseplan_courses = get_all_courses_by_planid(plan_id)

self.assertIsNotNone(courseplan_courses)
self.assertIn('COMP1601', [course.code for course in courseplan_courses])

def test_create_electives_course_plan(self):
program = get_program_by_name("Computer Science Major")
student = get_student("1234")
plan_id = enroll_in_programme("1234", program.id)

courseplan_courses = get_all_courses_by_planid(plan_id)
course_codes = [course.code for course in courseplan_courses]
for course_code in course_codes:
removeCourse(student, course_code)

# Create an electives graduation course plan
generator(student, "electives")
courseplan_courses = get_all_courses_by_planid(plan_id)

self.assertIsNotNone(courseplan_courses)
self.assertIn('COMP1601', [course.code for course in courseplan_courses])

def test_get_course_plan_json(self):

program = get_program_by_name("Computer Science Major")
student = get_student("1234")
plan_id = enroll_in_programme("1234", program.id)

courseplan_courses = get_all_courses_by_planid(plan_id)
course_codes = [course.code for course in courseplan_courses]
for course_code in course_codes:
removeCourse(student, course_code)

course_code = "INFO1601"
added_plan = addCourseToPlan(student, course_code)
courseplan_courses = get_all_courses_by_planid(plan_id)
courseplan = getCoursePlan("1234")
self.assertIsNotNone(added_plan)
self.assertIn('INFO1601', [course.code for course in courseplan_courses])

course_plan_json = courseplan.get_json()

expected_json = {
'planId': 1,
'studentId': 1234
}
self.assertEqual(course_plan_json, expected_json)


68 changes: 68 additions & 0 deletions App/tests/coursesOfferedPerSem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import pytest, unittest
from App.models import CoursesOfferedPerSem
from App.controllers import addSemesterCourses, create_course, isCourseOffered, get_all_OfferedCodes, delete_all_records
from App.main import create_app
from App.database import db, create_db


class CoursesOfferedPerSemUnitTests(unittest.TestCase):

def test_new_offered_course(self):
course_code = "INFO2605"
offered_course = CoursesOfferedPerSem(course_code)
self.assertEqual(offered_course.code, course_code)

def test_offered_course_toJSON(self):
course_code = "INFO2605"
offered_course = CoursesOfferedPerSem(course_code)
offered_course_json = offered_course.get_json()
self.assertDictEqual(offered_course_json, {"ID:": None, "Course Code:": course_code})

@pytest.fixture(autouse=True, scope="module")
def empty_db():
app = create_app({'TESTING': True, 'SQLALCHEMY_DATABASE_URI': 'sqlite:///test.db'})
create_db()
yield app.test_client()
db.drop_all()

class CoursesOfferedPerSemIntegrationTests(unittest.TestCase):
def test_add_offered_course(self):
prereqs=[]
course_code = "INFO2605"
create_course(course_code, "Professional Ethics and Law", 3, 4, prereqs)
addSemesterCourses(course_code)
self.assertTrue(isCourseOffered(course_code))

def test_get_all_offered_courses_json(self):
create_course("MATH2250", "Industrial Statistics",4,3,[])
create_course("INFO2605", "Professional Ethics and Law", 3, 4, [])
addSemesterCourses("MATH2250")
addSemesterCourses("INFO2605")
offered_courses = get_all_OfferedCodes()

assert "MATH2250" in offered_courses
assert "INFO2605" in offered_courses

def test_remove_all_offered(self):

create_course("MATH2250", "Industrial Statistics", 4, 3, [])
create_course("INFO2605", "Professional Ethics and Law", 3, 4, [])
addSemesterCourses("MATH2250")
addSemesterCourses("INFO2605")

# Check that courses are offered
assert isCourseOffered("MATH2250")
assert isCourseOffered("INFO2605")

# Remove all offered courses
delete_all_records()

# Check that courses are no longer offered
assert not isCourseOffered("MATH2250")
assert not isCourseOffered("INFO2605")






2 changes: 1 addition & 1 deletion App/tests/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from App.main import create_app
from App.database import db, create_db
from App.models import User, Student, Program, StudentCourseHistory
from App.models import User, Student, Program, StudentCourseHistory, CoursePlan
from App.controllers import (
create_user,
get_all_users_json,
Expand Down
22 changes: 21 additions & 1 deletion wsgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,28 @@ def courses_tests_command(type):

else:
sys.exit(pytest.main(["App/tests/courses.py"]))


@test.command("coursePlan", help="Run Course Plan tests")
@click.argument("type", default="all")
def courses_tests_command(type):
if type == "unit":
sys.exit(pytest.main(["App/tests/coursePlan.py::CoursePlanUnitTests"]))
elif type == "int":
sys.exit(pytest.main(["App/tests/coursePlan.py::CoursePlanIntegrationTests"]))
else:
sys.exit(pytest.main(["App/tests/coursePlan.py"]))

#CoursesOfferedPerSemUnitTests
@test.command("coursesOffered", help="Run Courses Offered Per Sem tests")
@click.argument("type", default="all")
def courses_tests_command(type):
if type == "unit":
sys.exit(pytest.main(["App/tests/coursesOfferedPerSem.py::CoursesOfferedPerSemUnitTests"]))
elif type == "int":
sys.exit(pytest.main(["App/tests/coursesOfferedPerSem.py::CoursesOfferedPerSemIntegrationTests"]))
else:
sys.exit(pytest.main(["App/tests/coursesOfferedPerSem.py"]))


@test.command("program", help="Run Program tests")
@click.argument("type", default="all")
Expand Down