def setup_method(self, function): self.db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES) self.db.row_factory = sqlite3.Row self.cursor = self.db.cursor() with open('server/db/schema.sql') as f: self.db.executescript(f.read()) with open('server/db/setup_enums.sql') as f: self.db.executescript(f.read()) self.h = DbHelper(self.db) self.first_course = self.first_course = course.Course('TEST', '1000', 'Test course 1', 6, [], 'TestFaculty', finished=True) self.second_course = course.Course('COMP', '2521', 'Test course 2', 3, [], 'Engineering', finished=True) self.dbGenerator = dbGenerator.DbGenerator(self.h.query_db, self.h.store_db)
def test_check(): # Make some courses # subj1001 subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty) # subj1002, prereq subj1001 prereq1001 = subjectReq.SubjectReq(subj1001) subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, prereq1001) # subj1003, prereq subj1001 and 1002 subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, prereq1001) uni.reset_courses([subj1001, subj1002, subj1003]) filter1001 = specificCourseFilter.SpecificCourseFilter(subj1001) filter1002 = specificCourseFilter.SpecificCourseFilter(subj1002) filter1003 = specificCourseFilter.SpecificCourseFilter(subj1003) req1001 = minDegreeReq.MinDegreeReq(filter1001, 6) req1002 = minDegreeReq.MinDegreeReq(filter1002, 6) req1003 = minDegreeReq.MinDegreeReq(filter1003, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 2, faculty, [req1001, req1002, req1003], 'BAT1') enrol1001 = courseEnrollment.CourseEnrollment(subj1001, t1) enrol1002 = courseEnrollment.CourseEnrollment(subj1002, t2) enrol1003 = courseEnrollment.CourseEnrollment(subj1003, t7) prog = program.Program(degree1, [enrol1001, enrol1002, enrol1003], []) req = yearReq.YearReq(2) assert len(req.check(prog, t1)) == 1 assert len(req.check(prog, t2)) == 1 assert len(req.check(prog, t3)) == 1 assert len(req.check(prog, t4)) == 0 assert len(req.check(prog, t5)) == 0 assert len(req.check(prog, t6)) == 0 assert len(req.check(prog, t7)) == 0 assert len(req.check(prog, t8)) == 0 assert len(req.check(prog, t9)) == 0 assert req.check(prog, t3)[0] == 'Year 2 in your degree' req = yearReq.YearReq(-1) assert len(req.check(prog, t1)) == 1 assert len(req.check(prog, t2)) == 1 assert len(req.check(prog, t3)) == 1 assert len(req.check(prog, t4)) == 1 assert len(req.check(prog, t5)) == 1 assert len(req.check(prog, t6)) == 1 assert len(req.check(prog, t7)) == 0 assert len(req.check(prog, t8)) == 0 assert len(req.check(prog, t9)) == 0 assert req.check(prog, t3)[0] == 'Final year in your degree'
def test_eq(): subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2], faculty) subj1001_2 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2], faculty) subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2], faculty) assert subj1001 == subj1001 assert subj1001 == subj1001_2 assert subj1001_2 == subj1001 assert not subj1002 == subj1001 assert not subj1001 == subj1002
def test_exclusion(): # make an exclusion subject subj1005 = course.Course('SUBJ', '1005', 'Subject5', 6, [t1, t3, t4, t6], faculty, prereqs=prereq1001, exclusions=['SUBJ1002']) uni.add_course(subj1005) # Make some degree requirements # 1001 and 1002 and 1003 filter1001 = specificCourseFilter.SpecificCourseFilter(subj1001) filter1002 = specificCourseFilter.SpecificCourseFilter(subj1002) filter1005 = specificCourseFilter.SpecificCourseFilter(subj1005) req1001 = minDegreeReq.MinDegreeReq(filter1001, 6) req1002 = minDegreeReq.MinDegreeReq(filter1002, 6) req1005 = minDegreeReq.MinDegreeReq(filter1005, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 2, faculty, [req1001, req1002, req1005], 'TESTA1') gen = generator.Generator(degree1, uni) prog = gen.generate() assert prog.enrolled(subj1001) assert prog.enrolled(subj1002) assert not prog.enrolled(subj1005) assert prog.term_taken(subj1001) == t1 assert prog.term_taken(subj1002) == t3
def test_check(): # subj1001 subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty) # subj1003, prereq subj1001 and final year prereq_final = yearReq.YearReq(year=-1) prereq1001 = subjectReq.SubjectReq(subj1001) req1001_and_final = andReq.AndReq([prereq1001, prereq_final]) subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, req1001_and_final) subj1004 = course.Course('SUBJ', '1004', 'Subject4', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty) filter1001 = specificCourseFilter.SpecificCourseFilter(subj1001) filter1003 = specificCourseFilter.SpecificCourseFilter(subj1003) filter1004 = specificCourseFilter.SpecificCourseFilter(subj1004) # subj1002, prereq 6 uoc from subj1003, 1004 or_filter = orFilter.OrFilter([filter1003, filter1004]) prereq_6uoc = uocReq.UOCReq(6, or_filter) assert prereq_6uoc.filter is not None subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, prereq_6uoc) filter1002 = specificCourseFilter.SpecificCourseFilter(subj1002) uni.reset_courses([subj1001, subj1002, subj1003, subj1004]) req1001 = minDegreeReq.MinDegreeReq(filter1001, 6) req1002 = minDegreeReq.MinDegreeReq(filter1002, 6) req1003 = minDegreeReq.MinDegreeReq(filter1003, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 3, faculty, [req1001, req1002, req1003], 'BAT1') gen = generator.Generator(degree1, uni) prog = gen.generate() assert len(prereq_6uoc.check(prog, t9)) == 0 assert len(prereq_6uoc.check(prog, t8)) == 0 assert len(prereq_6uoc.check(prog, t7)) == 1 assert prereq_6uoc.check(prog, t7)[0] == '6 UoC fulfilling [(SUBJ1003) OR (SUBJ1004)]' prereq_12uoc = uocReq.UOCReq(12) assert len(prereq_12uoc.check(prog, t9)) == 0 assert len(prereq_12uoc.check(prog, t8)) == 0 assert len(prereq_12uoc.check(prog, t7)) == 1 assert prereq_12uoc.check(prog, t7)[0] == '12 UoC'
def test_one(): # Make some courses # subj1001 subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty) # subj1002, prereq subj1001 prereq1001 = subjectReq.SubjectReq(subj1001) prereq_year2 = yearReq.YearReq(year=2) assert prereq_year2.year == 2 req1001_and_year2 = andReq.AndReq([prereq1001, prereq_year2]) subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, req1001_and_year2) # subj1003, prereq subj1001 and 1002 prereq_final = yearReq.YearReq(year=-1) assert prereq_final.year == -1 req1001_and_final = andReq.AndReq([prereq1001, prereq_final]) subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, req1001_and_final) uni.reset_courses([subj1001, subj1002, subj1003]) filter1001 = specificCourseFilter.SpecificCourseFilter(subj1001) filter1002 = specificCourseFilter.SpecificCourseFilter(subj1002) filter1003 = specificCourseFilter.SpecificCourseFilter(subj1003) req1001 = minDegreeReq.MinDegreeReq(filter1001, 6) req1002 = minDegreeReq.MinDegreeReq(filter1002, 6) req1003 = minDegreeReq.MinDegreeReq(filter1003, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 3, faculty, [req1001, req1002, req1003], 'BAT1') gen = generator.Generator(degree1, uni) prog = gen.generate() assert prog.enrolled(subj1001) assert prog.enrolled(subj1002) assert prog.enrolled(subj1003) assert prog.term_taken(subj1001) == t1 assert prog.term_taken(subj1002) == t4 assert prog.term_taken(subj1003) == t7
def test_with_filter(): # subj1001 subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty) # subj1003, prereq subj1001 and final year prereq_final = yearReq.YearReq(year=-1) prereq1001 = subjectReq.SubjectReq(subj1001) req1001_and_final = andReq.AndReq([prereq1001, prereq_final]) subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, req1001_and_final) subj1004 = course.Course('SUBJ', '1004', 'Subject4', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty) filter1001 = specificCourseFilter.SpecificCourseFilter(subj1001) filter1003 = specificCourseFilter.SpecificCourseFilter(subj1003) filter1004 = specificCourseFilter.SpecificCourseFilter(subj1004) # subj1002, prereq 6 uoc from subj1003, 1004 or_filter = orFilter.OrFilter([filter1003, filter1004]) prereq_6uoc = uocReq.UOCReq(6, or_filter) assert prereq_6uoc.filter is not None subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2, t3, t4, t5, t6, t7, t8, t9], faculty, prereq_6uoc) filter1002 = specificCourseFilter.SpecificCourseFilter(subj1002) uni.reset_courses([subj1001, subj1002, subj1003, subj1004]) req1001 = minDegreeReq.MinDegreeReq(filter1001, 6) req1002 = minDegreeReq.MinDegreeReq(filter1002, 6) req1003 = minDegreeReq.MinDegreeReq(filter1003, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 3, faculty, [req1001, req1002, req1003], 'BAT1') gen = generator.Generator(degree1, uni) prog = gen.generate() assert prog.enrolled(subj1001) assert prog.enrolled(subj1002) assert prog.enrolled(subj1003) assert prog.term_taken(subj1001) == t1 assert prog.term_taken(subj1002) == t8 assert prog.term_taken(subj1003) == t7
def test_exclusion_errors(): subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2], faculty) subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2], faculty) subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t2], faculty, exclusions=['SUBJ1001', 'SUBJ1002']) prog = program.Program(degree1, [], []) prog.add_course(subj1001, t1) prog.add_course(subj1003, t2) errors = subj1003.exclusion_errors(prog, t2) assert len(errors) == 1 assert errors[0] == 'SUBJ1001' prog.add_course(subj1002, t2) errors = subj1003.exclusion_errors(prog, t2) assert len(errors) == 2 assert errors[0] == 'SUBJ1001' assert errors[1] == 'SUBJ1002'
def test_check_reqs(): subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2], faculty) subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t2], faculty) subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t2], faculty) subj1004 = course.Course('SUBJ', '1004', 'Subject4', 6, [t1, t2], faculty) subj1005 = course.Course('SUBJ', '1005', 'Subject5', 6, [t1, t2], faculty) subj1006 = course.Course('SUBJ', '1006', 'Subject6', 6, [t1, t2], faculty) req1001 = subjectReq.SubjectReq(subj1001, 75) req1002 = subjectReq.SubjectReq(subj1002) req1003 = subjectReq.SubjectReq(subj1003) req1004 = subjectReq.SubjectReq(subj1004) req1002_and = andReq.AndReq([req1002, req1003]) prereq_or = orReq.OrReq([req1001, req1002_and]) ex = ['SUBJ1005', 'SUBJ1006'] subj1007 = course.Course('SUBJ', '1007', 'Subject7', 6, [t1, t2], faculty, prereqs=prereq_or, coreqs=req1004, exclusions=ex) enrol1005 = courseEnrollment.CourseEnrollment(subj1005, t1) prog = program.Program(degree1, [enrol1005], []) errors = subj1007.check_reqs(prog, t2) assert len(errors) == 3 assert errors[0]['filter_type'] == 'Prerequisite' assert errors[0]['info'] == [ '(A mark of 75 in SUBJ1001 OR (SUBJ1002 AND SUBJ1003))' ] assert errors[1]['filter_type'] == 'Corequisite' assert errors[1]['info'] == ['SUBJ1004'] assert errors[2]['filter_type'] == 'Exclusion' assert errors[2]['info'] == ['SUBJ1005'] prog.add_course(subj1001, t1) errors = subj1007.check_reqs(prog, t2) assert len(errors) == 2 assert errors[0]['filter_type'] == 'Corequisite' assert errors[0]['info'] == ['SUBJ1004'] assert errors[1]['filter_type'] == 'Exclusion' assert errors[1]['info'] == ['SUBJ1005'] assert subj1007.check_warnings(prog, t2) == ['A mark of 75 in SUBJ1001']
def test_term_cap_enrollment(): # make a coreq subject subj1005 = course.Course('SUBJ', '1005', 'Subject5', 6, [t1, t4], faculty) subj1006 = course.Course('SUBJ', '1006', 'Subject6', 6, [t1, t2], faculty) subj1007 = course.Course('SUBJ', '1007', 'Subject7', 6, [t1, t2], faculty) uni.add_course(subj1005) uni.add_course(subj1006) uni.add_course(subj1007) # Make some degree requirements # 1001 and 1002 and 1003 filter1001 = specificCourseFilter.SpecificCourseFilter(subj1001) filter1005 = specificCourseFilter.SpecificCourseFilter(subj1005) filter1006 = specificCourseFilter.SpecificCourseFilter(subj1006) filter1007 = specificCourseFilter.SpecificCourseFilter(subj1007) req1001 = minDegreeReq.MinDegreeReq(filter1001, 6) req1005 = minDegreeReq.MinDegreeReq(filter1005, 6) req1006 = minDegreeReq.MinDegreeReq(filter1006, 6) req1007 = minDegreeReq.MinDegreeReq(filter1007, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 2, faculty, [req1001, req1005, req1006, req1007], 'TESTA1') gen = generator.Generator(degree1, uni) prog = gen.generate() assert prog.enrolled(subj1001) assert prog.enrolled(subj1005) assert prog.enrolled(subj1006) assert prog.enrolled(subj1007) assert prog.term_taken(subj1001) == t1 assert prog.term_taken(subj1005) == t1 assert prog.term_taken(subj1006) == t1 assert prog.term_taken(subj1007) == t2
def test_equivalent(): # make an equivalent subject subj1005 = course.Course('SUBJ', '1005', 'Subject5', 6, [], faculty, equivalents=['SUBJ1001']) subj1001.add_equivalent('SUBJ1005') subj1006 = course.Course('SUBJ', '1006', 'Subject5', 6, [t2, t3, t5, t6], faculty) uni.add_course(subj1005) uni.add_course(subj1006) # Make some degree requirements # 1006 requires 1005 but 1001 is an equivalent filter1005 = specificCourseFilter.SpecificCourseFilter(subj1005) filter1006 = specificCourseFilter.SpecificCourseFilter(subj1006) req1005 = minDegreeReq.MinDegreeReq(filter1005, 6) req1006 = minDegreeReq.MinDegreeReq(filter1006, 6) degree1 = degree.Degree(1, 'Bachelor of Testing', 2019, 2, faculty, [req1005, req1006], 'TESTA1') gen = generator.Generator(degree1, uni) prog = gen.generate() assert prog.enrolled(subj1001) assert prog.enrolled(subj1006) assert not prog.enrolled(subj1005) assert prog.term_taken(subj1001) == t1 assert prog.term_taken(subj1006) == t2
def setup_method(self, function): self.db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES) self.db.row_factory = sqlite3.Row self.cursor = self.db.cursor() with open('server/db/schema.sql') as f: self.db.executescript(f.read()) with open('server/db/setup_enums.sql') as f: self.db.executescript(f.read()) self.h = DbHelper(self.db) self.university = university.University(self.h.query_db) self.first_course = course.Course('TEST', '1000', 'Test course 1', 6, [], 'TestFaculty', finished=True) self.second_course = course.Course('COMP', '2521', 'Test course 2', 3, [], 'Engineering', finished=True) # TODO: check different years self.first_degree = degree.Degree(1111, 'Test degree', 2019, 3, 'TestFaculty', [], 'ABCDE') self.second_degree = degree.Degree(3223, 'Test degree 2', 2019, 5, 'Engineering', [], 'FGHIJ')
def make_courses(self): """" Fills list of courses with Course objects made from data file. """ relative_path = os.path.dirname(os.path.abspath("main.py")) absolute_path = os.path.join(relative_path, "data", "courses.csv") with open(absolute_path) as csv_file: csv_reader = csv.reader(csv_file, delimiter=';') line = 0 courses = [] # Loops over all lines in csv file for row in csv_reader: courses.append(row[0]) for course in courses: self.courses.append(crs.Course(course))
def to_course(self) -> 'course.Course': # Step 1: save into db subject = self.code[:4] code = self.code[4:] name = self.name units = self.units terms = self.terms faculty = self.faculty prereqs = self.prereqs coreqs = self.coreqs # store in dict #STORE IN DB return course.Course(subject, code, name, units, terms, faculty, prereqs=self.prereqs, coreqs=self.coreqs, exclusions=self.exclusions, equivalents=self.equivalents, finished=self.finished)
uni = MockUniversity() t1 = term.Term(2019, 1) t2 = term.Term(2019, 2) t3 = term.Term(2019, 3) t4 = term.Term(2020, 1) t5 = term.Term(2020, 2) t6 = term.Term(2020, 3) faculty = 'SubjFaculty' # Make some courses # subj1001 subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1, t2, t3, t4, t5, t6], faculty) # subj1002, prereq subj1001 prereq1001 = subjectReq.SubjectReq(subj1001) subj1002 = course.Course('SUBJ', '1002', 'Subject2', 6, [t1, t3, t4, t6], faculty, prereq1001) # subj1003, prereq subj1001 and 1002 prereq1002 = subjectReq.SubjectReq(subj1002) req1001_and_1002 = andReq.AndReq([prereq1001, prereq1002]) subj1003 = course.Course('SUBJ', '1003', 'Subject3', 6, [t1, t4], faculty, req1001_and_1002) # TODO subj1004 was not defined! making a dummy one subj1004 = course.Course('SUBJ', '1004', 'Subject4', 6, [t1, t2], faculty, req1001_and_1002)
Test the functions defined in andFilter.py ''' import pytest from classes import course from classes import andFilter from classes import fieldFilter from classes import levelFilter from classes import degree f = fieldFilter.FieldFilter('SUBJ') l = levelFilter.LevelFilter(3) deg = degree.Degree(num_code='3778', name='Computer Science', year=2019, duration=3, faculty='Engineering', requirements=[], alpha_code='COMPA1') c1 = course.Course('SUBJ', '3001', 'Subject1', 6, [], 'Engineering') c2 = course.Course('SUBJ', '1001', 'Subject1', 6, [], 'Engineering') and_filt = andFilter.AndFilter([f, l]) def test_accepts_course_true(): assert and_filt.accepts_course(c1, deg) def test_accepts_course_false(): assert not and_filt.accepts_course(c2, deg)
def test_accepts_course(): c = course.Course('SUBJ', '1001', 'Subject1', 6, [], 'SubjectFac') assert f.accepts_course(c, deg)
def test_accepts_course_true(): c = course.Course('OTHR', '1001', 'Other1', 6, [], 'OtherFac') assert f.accepts_course(c, deg)
Team: On Course Alexander Rowell (z5116848), Eleni Dimitriadis (z5191013), Emily Chen (z5098910) George Fidler (z5160384), Kevin Ni (z5025098) test_orFilter.py Test the functions defined in orFilter.py ''' import pytest from classes import course from classes import orFilter from classes import fieldFilter from classes import levelFilter from classes import degree f1 = fieldFilter.FieldFilter('SUBJ') f2 = fieldFilter.FieldFilter('OTHR') deg = degree.Degree(num_code='3778', name='Computer Science', year=2019, duration=3, faculty='Engineering', requirements=[], alpha_code='COMPA1') c1 = course.Course('SUBJ', '1001', 'Subject1', 6, [], 'Engineering') c2 = course.Course('FALS', '1001', 'False1', 6, [], 'Engineering') or_filt1 = orFilter.OrFilter([f1, f2]) def test_accepts_course_true(): assert or_filt1.accepts_course(c1, deg) def test_accepts_course_false(): assert not or_filt1.accepts_course(c2, deg)
import pytest from typing import List from classes import degree from classes import program from classes import term from classes import subjectReq from classes import course from classes import courseEnrollment faculty = 'SubjFaculty' t1 = term.Term(2019, 1) t2 = term.Term(2019, 2) degree1 = degree.Degree('1', 'Bachelor of Testing', 2019, 3, faculty, [], 'BAT1') subj1001 = course.Course('SUBJ', '1001', 'Subject1', 6, [t1], faculty) subj1002 = course.Course('SUBJ', '1002', 'Subject1', 6, [t1], faculty) enrol1001 = courseEnrollment.CourseEnrollment(subj1001, t1) enrol1002 = courseEnrollment.CourseEnrollment(subj1002, t1) prog1 = program.Program(degree1, [enrol1001], []) prog2 = program.Program(degree1, [enrol1002], []) req = subjectReq.SubjectReq(subj1001) def test_fulfilled(): assert req.fulfilled(prog1, t2) assert req.fulfilled(prog1, t1, coreq=True) def test_not_fulfilled(): assert not req.fulfilled(prog2, t2)