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_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_insert_year_req(self): year = 3 requirement = yearReq.YearReq(year) self.dbGenerator.insert_requirements(self.first_course_id, requirement, None, [], []) course = self.uni.find_course(self.first_course.course_code) prereq = course.prereqs assert prereq is not None assert prereq.requirement_name == 'YearRequirement' assert prereq.year == year
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_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 make_single_course_req(self, string: str) -> Optional['courseReq.CourseReq']: split = string.split() if split[0] == 'unparsed': return unparsedReq.UnparsedReq(" ".join(split[1:])) # subject requirements elif self.is_course_code(split[0]): if len(split) == 1: return scrapedSubjectReq.ScrapedSubjectReq(split[0]) elif len(split) == 2: course, mark = split mark_num = self.make_int(mark) if mark_num is None: return None if mark.isdigit(): return scrapedSubjectReq.ScrapedSubjectReq( course, mark_num) # WAM requirements elif 'wam' in split: if split[0] == 'wam' and split[1].isdigit() and len(split) == 2: return wamReq.WAMReq(int(split[1])) elif split[1] == 'wam' and split[0].isdigit() and len(split) == 2: return wamReq.WAMReq(int(split[0])) else: print('COULD NOT PARSE WAM REQ') return None # year requirements elif split[0] == 'year' and len(split) == 2: return yearReq.YearReq(int(split[1])) # UOC requirements elif 'uoc' in split: print(split) if split[0] == 'uoc' and split[1].isdigit() and int( split[1]) % 6 == 0: units = int(split[1]) elif split[1] == 'uoc' and split[0].isdigit() and int( split[0]) % 6 == 0: units = int(split[0]) else: # could not parse req print('COULD NOT PARSE UOC REQ') return None if len(split) > 2: filter = self.parse_uoc_req_filter(split) if filter is None: # could not parse filter print('COULD NOT PARSE COURSE FILTER') return None else: return uocReq.UOCReq(units, filter) else: return uocReq.UOCReq(units) # enrollment requirements elif split[0] == 'enrol' and len(split) == 2: # Degree ids have both a number and letter code with a space between them, but we'll put # underscores instead in the extra requirements degree = split[1] degree = degree.replace('_', ' ') degree = degree.upper() return scrapedEnrollmentReq.ScrapedEnrollmentReq(degree) # something has gone wrong print('ERROR: could not parse course req') print(string) return None