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
示例#6
0
    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