def test_crosslistings_exists_full_code(self): get_or_create_course("CIS", "120", "2020C") b, _ = get_or_create_course("OIDD", "291", "2020C") get_or_create_course("LGST", "291", "2020C", defaults={"primary_listing": b}) d, _ = get_or_create_course("OIDD", "291", TEST_SEMESTER) get_or_create_course("MGMT", "291", TEST_SEMESTER, defaults={"primary_listing": d}) get_or_create_course("OPIM", "291", TEST_SEMESTER, defaults={"primary_listing": d}) a_db = Course.objects.get(full_code="CIS-120") b_db = Course.objects.get(full_code="OIDD-291", semester="2020C") c_db = Course.objects.get(full_code="LGST-291") d_db = Course.objects.get(full_code="OIDD-291", semester=TEST_SEMESTER) e_db = Course.objects.get(full_code="OPIM-291") f_db = Course.objects.get(full_code="MGMT-291") t1 = Topic.objects.get(courses__full_code="CIS-120") t2 = Topic.objects.filter(courses__full_code="OIDD-291")[:1].get() self.assertEqual(a_db.topic, t1) self.assertEqual(b_db.topic, t2) self.assertEqual(c_db.topic, t2) self.assertEqual(d_db.topic, t2) self.assertEqual(e_db.topic, t2) self.assertEqual(f_db.topic, t2) self.assertEqual(t1.most_recent, a_db) self.assertEqual(t2.most_recent, d_db)
def setUp(self): set_semester() get_or_create_course( "CIS", "120", "2012A") # dummy course to make sure we're filtering by semester self.course, _ = get_or_create_course("CIS", "120", TEST_SEMESTER) self.course2, _ = get_or_create_course("CIS", "125", TEST_SEMESTER) self.department = Department.objects.get(code="CIS") self.req1 = PreNGSSRequirement(semester=TEST_SEMESTER, school="SAS", code="TEST1", name="Test 1") self.req2 = PreNGSSRequirement(semester=TEST_SEMESTER, school="SAS", code="TEST2", name="Test 2") self.req3 = PreNGSSRequirement(semester="XXXXX", school="SAS", code="TEST1", name="Test 1+") self.req1.save() self.req2.save() self.req3.save() self.req1.departments.add(self.department) self.req1.overrides.add(self.course2) self.req2.courses.add(self.course) self.req2.courses.add(self.course2) self.req3.departments.add(self.department) self.client = APIClient()
def test_merge_with(self): a, _ = get_or_create_course("CIS", "120", "2020C") t = Topic.objects.get() b, _ = get_or_create_course("CIS", "1200", "2021C") t.merge_with(b.topic) c, _ = get_or_create_course("OIDD", "291", TEST_SEMESTER) get_or_create_course("LGST", "291", TEST_SEMESTER, defaults={"primary_listing": c}) t1 = Topic.objects.filter(courses__full_code="CIS-120")[:1].get() t2 = Topic.objects.filter(courses__full_code="OIDD-291")[:1].get() t_merged = t1.merge_with(t2) a_db = Course.objects.get(full_code="CIS-120") b_db = Course.objects.get(full_code="CIS-1200") c_db = Course.objects.get(full_code="OIDD-291") d_db = Course.objects.get(full_code="LGST-291") t_merged_db = Topic.objects.filter( courses__full_code="CIS-120")[:1].get() self.assertEqual(t_merged, t_merged_db) self.assertEqual(a_db.topic, t_merged_db) self.assertEqual(b_db.topic, t_merged_db) self.assertEqual(c_db.topic, t_merged_db) self.assertEqual(d_db.topic, t_merged_db) self.assertEqual(t_merged.most_recent, c) self.assertEqual(t_merged_db.most_recent, c_db)
def test_two_paragraphs(self): get_or_create_course("CIS", "120", TEST_SEMESTER) rows = [ {"COURSE_ID": "CIS120", "PARAGRAPH_NUMBER": "2", "COURSE_DESCRIPTION": "world!"}, {"COURSE_ID": "CIS120", "PARAGRAPH_NUMBER": "1", "COURSE_DESCRIPTION": "Hello"}, ] import_description_rows(len(rows), iter(rows), show_progress_bar=False) self.assertEqual(1, Course.objects.count()) self.assertEqual("Hello\nworld!", Course.objects.get().description)
def test_existing_full_code(self): a, _ = get_or_create_course("CIS", "120", "2020C") b, _ = get_or_create_course("CIS", "120", TEST_SEMESTER) a_db = Course.objects.get(full_code="CIS-120", semester="2020C") b_db = Course.objects.get(full_code="CIS-120", semester=TEST_SEMESTER) t = Topic.objects.get() self.assertEqual(a.topic, t) self.assertEqual(a_db.topic, t) self.assertEqual(b.topic, t) self.assertEqual(b_db.topic, t) self.assertEqual(t.most_recent, b_db)
def test_two_semesters(self): get_or_create_course("CIS", "120", TEST_SEMESTER) get_or_create_course("CIS", "120", "3008A") rows = [{"COURSE_ID": "CIS120", "PARAGRAPH_NUMBER": "1", "COURSE_DESCRIPTION": "Hello"}] import_description_rows(len(rows), iter(rows), show_progress_bar=False) self.assertEqual(2, Course.objects.count()) c1 = Course.objects.get(semester=TEST_SEMESTER) c2 = Course.objects.get(semester="3008A") for c in [c1, c2]: self.assertEqual("Hello", c.description)
def test_two_courses(self): get_or_create_course("CIS", "120", TEST_SEMESTER) get_or_create_course("CIS", "121", TEST_SEMESTER) rows = [ {"COURSE_ID": "CIS120", "PARAGRAPH_NUMBER": "1", "COURSE_DESCRIPTION": "World"}, {"COURSE_ID": "CIS121", "PARAGRAPH_NUMBER": "1", "COURSE_DESCRIPTION": "Hello"}, ] import_description_rows(len(rows), iter(rows), show_progress_bar=False) c120 = Course.objects.get(code="120") c121 = Course.objects.get(code="121") self.assertEqual("World", c120.description) self.assertEqual("Hello", c121.description)
def test_set_primary_listing_id(self): get_or_create_course("CIS", "120", TEST_SEMESTER) b, _ = get_or_create_course("OIDD", "291", TEST_SEMESTER) c, _ = get_or_create_course("LGST", "291", TEST_SEMESTER, defaults={"primary_listing_id": b.id}) b_db = Course.objects.get(full_code="OIDD-291") c_db = Course.objects.get(full_code="LGST-291") self.assertEqual(b.primary_listing, b) self.assertEqual(c.primary_listing, b) self.assertEqual(b_db.primary_listing, b_db) self.assertEqual(c_db.primary_listing, b_db)
def test_delete_all(self): a, _ = get_or_create_course("CIS", "120", TEST_SEMESTER) b, _ = get_or_create_course("CIS", "160", TEST_SEMESTER) c, _ = get_or_create_course("CIS", "121", TEST_SEMESTER) a.topic.delete() a.delete() b.topic.delete() b.delete() c.topic.delete() c.delete() d, _ = get_or_create_course("CIS", "240", TEST_SEMESTER) d_db = Course.objects.get(full_code="CIS-240") self.assertEqual(d.primary_listing, d) self.assertEqual(d_db.primary_listing, d_db)
def test_new(self): a, _ = get_or_create_course("CIS", "120", TEST_SEMESTER) a_db = Course.objects.get(full_code="CIS-120") t = Topic.objects.get() self.assertEqual(a.topic, t) self.assertEqual(a_db.topic, t) self.assertEqual(t.most_recent, a_db)
def import_course_and_section(full_course_code, semester, course_title, primary_section_code, stat): """ Given course and section info, update/create objects. """ primary_listing = None if primary_section_code: try: dept, ccode, _ = separate_course_code(primary_section_code) except ValueError: stat("invalid_primary_section_id") return primary_listing, _ = get_or_create_course(dept, ccode, semester) try: course, section, _, _ = get_or_create_course_and_section( full_course_code, semester, course_defaults={ "primary_listing": primary_listing, "title": course_title or "" }, ) except ValueError: stat("invalid_section_id") return None, None # Update course title if one isn't already set. if course_title and not course.title: course.title = course_title course.save() stat("courses_updated") return course, section
def test_load_descriptions_all_semester(self, mock_get_files, mock_close_files): mock_get_files.return_value = [self.summary_fo, self.description_fo] get_or_create_course("CIS", "120", "3008A") res = management.call_command( self.COMMAND_NAME, "hi.zip", "--zip", "--all", "--import-descriptions", stdout=self.out, stderr=self.err, show_progress_bar=False, ) self.assertEqual(0, res) self.assertEqual("Hello, world!", Course.objects.get(semester=TEST_SEMESTER).description) self.assertEqual("Hello, world!", Course.objects.get(semester="3008A").description)
def test_section_with_existing_description(self): get_or_create_course("CIS", "120", TEST_SEMESTER) get_or_create_course("CIS", "120", "3008A") c, _ = get_or_create_course("CIS", "120", "3005A") c.description = "TILL 3005" c.save() rows = [{"COURSE_ID": "CIS120", "PARAGRAPH_NUMBER": "1", "COURSE_DESCRIPTION": "Hello"}] import_description_rows(len(rows), iter(rows), show_progress_bar=False) self.assertEqual(3, Course.objects.count()) c1 = Course.objects.get(semester=TEST_SEMESTER) c2 = Course.objects.get(semester="3008A") for c in [c1, c2]: self.assertEqual("Hello", c.description) c3 = Course.objects.get(semester="3005A") self.assertEqual("TILL 3005", c3.description)
def test_satisfying_courses(self): # make it so req1 has one department-level requirement, one course-level one, # and one override. c1, _ = get_or_create_course("MEAM", "101", TEST_SEMESTER) self.req1.courses.add(c1) courses = self.req1.satisfying_courses.all() self.assertEqual(2, len(courses)) self.assertCoursesEqual([self.course, c1], courses)
def test_crosslistings(self): a, _ = get_or_create_course("CIS", "120", TEST_SEMESTER) b, _ = get_or_create_course("OIDD", "291", TEST_SEMESTER) c, _ = get_or_create_course("LGST", "291", TEST_SEMESTER, defaults={"primary_listing": b}) a_db = Course.objects.get(full_code="CIS-120") b_db = Course.objects.get(full_code="OIDD-291") c_db = Course.objects.get(full_code="LGST-291") t1 = Topic.objects.get(courses__full_code="CIS-120") t2 = Topic.objects.filter(courses__full_code="OIDD-291")[:1].get() self.assertEqual(a.topic, t1) self.assertEqual(b.topic, t2) self.assertEqual(c.topic, t2) self.assertEqual(a_db.topic, t1) self.assertEqual(b_db.topic, t2) self.assertEqual(c_db.topic, t2) self.assertEqual(t1.most_recent, a_db) self.assertEqual(t2.most_recent, b_db)
def test_new(self): a, _ = get_or_create_course("CIS", "120", TEST_SEMESTER) a_db = Course.objects.get(full_code="CIS-120") self.assertEqual(a.primary_listing, a) self.assertEqual(a_db.primary_listing, a_db)