def make_test_exam(number): test_file = open('test.txt', 'w+') test_file.write('This is a test file.') test_exam = Exam( course_instance=CourseInstance.objects.get(pk=number), exam_number=Exam.MT1, exam_type=Exam.EXAM, verified=True, exam_file=File(test_file)) test_exam.save() test_exam.course.department.save() test_exam.course.save() test_exam.course_instance.save() return test_exam
def make_test_exam(number): test_file = open('test.txt', 'w+') test_file.write('This is a test file.') test_exam = Exam(course_instance=CourseInstance.objects.get(pk=number), exam_number=Exam.MT1, exam_type=Exam.EXAM, verified=True, exam_file=File(test_file)) test_exam.save() test_exam.course.department.save() test_exam.course.save() test_exam.course_instance.save() return test_exam
def setUp(self): self.dept_cs = Department(long_name="Computer Science", short_name="CS", abbreviation="COMPSCI") self.dept_cs.save() self.dept_ee = Department(long_name="Electrical Engineering", short_name="EE", abbreviation="EL ENG") self.dept_ee.save() self.course_cs_1 = Course(department=self.dept_cs, number="1") self.course_cs_1.save() self.course_ee_1 = Course(department=self.dept_ee, number="1") self.course_ee_1.save() self.instructor_cs = Instructor(first_name="Tau", last_name="Bate", department=self.dept_cs) self.instructor_cs.save() self.instructor_ee = Instructor(first_name="Pi", last_name="Bent", department=self.dept_ee) self.instructor_ee.save() self.term = Term(term="sp", year=2013, current=True) self.term.save() self.course_instance_cs_1 = CourseInstance(term=self.term, course=self.course_cs_1) self.course_instance_cs_1.save() self.course_instance_cs_1.instructors.add(self.instructor_cs) self.course_instance_cs_1.save() self.course_instance_ee_1 = CourseInstance(term=self.term, course=self.course_ee_1) self.course_instance_ee_1.save() self.course_instance_ee_1.instructors.add(self.instructor_ee) self.course_instance_ee_1.save() self.user = get_user_model().objects.create_user( username="******", email="tbp.berkeley.edu", password="******", first_name="tbp", last_name="user" ) self.user.save() self.survey_cs_1 = Survey( course=self.course_cs_1, term=self.term, instructor=self.instructor_cs, prof_rating=5, course_rating=5, time_commitment=5, comments="Test comments", submitter=self.user, published=True, ) self.survey_cs_1.save() self.survey_cs_1_b = Survey( course=self.course_cs_1, term=self.term, instructor=self.instructor_cs, prof_rating=0, course_rating=5, time_commitment=0, comments="Test comments", submitter=self.user, published=True, ) self.survey_cs_1_b.save() self.exam_ee_1 = Exam( course_instance=self.course_instance_ee_1, submitter=self.user, exam_number=Exam.FINAL, exam_type=Exam.EXAM, file_ext=".pdf", verified=True, ) self.exam_ee_1.save()
def setUp(self): self.candidate_group = Group.objects.create(name='Current Candidate') self.member_group = Group.objects.create(name='Member') user_model = get_user_model() # Create candidate self.user = user_model.objects.create_user( username='******', email='*****@*****.**', password='******', first_name='Random', last_name='Candidate') self.term = Term(term=Term.SPRING, year=2012, current=True) self.term.save() self.candidate = Candidate(user=self.user, term=self.term) self.candidate.save() # Create officer officer_user = user_model.objects.create_user( username='******', email='*****@*****.**', password='******', first_name='Joe', last_name='Officer') committee = OfficerPosition( short_name='IT_test', long_name='Information Technology (test)', rank=2, mailing_list='IT') committee.save() self.officer = Officer(user=officer_user, position=committee, term=self.term, is_chair=False) self.officer.save() # Create some manual candidate requirements self.manual_req1 = ManualCandidateRequirement( name='Manual 1', requirement_type=CandidateRequirement.MANUAL, credits_needed=2, term=self.term) self.manual_req1.save() self.manual_req2 = ManualCandidateRequirement( name='Manual 2', requirement_type=CandidateRequirement.MANUAL, credits_needed=5, term=self.term) self.manual_req2.save() # Create a challenge type self.individual_challenge_type = ChallengeType(name='Individual') self.individual_challenge_type.save() # Create a challenge requirement self.challenge_req = ChallengeCandidateRequirement( challenge_type=self.individual_challenge_type, credits_needed=3, term=self.term) self.challenge_req.save() # Create some events and event requirement self.event_type1 = EventType(name='Fun') self.event_type1.save() self.event_type2 = EventType(name='Not Fun') self.event_type2.save() self.fun_event1 = Event(name='Fun Event', event_type=self.event_type1, start_datetime=timezone.now(), end_datetime=timezone.now(), term=self.term, location='A test location', contact=officer_user, committee=committee) self.fun_event1.save() self.fun_event2 = Event(name='Big Fun Event', event_type=self.event_type1, start_datetime=timezone.now(), end_datetime=timezone.now(), requirements_credit=2, term=self.term, location='A test location', contact=officer_user, committee=committee) self.fun_event2.save() self.notfun_event = Event(name='Not Fun Event', event_type=self.event_type2, start_datetime=timezone.now(), end_datetime=timezone.now(), term=self.term, location='A test location', contact=officer_user, committee=committee) self.notfun_event.save() self.event_req = EventCandidateRequirement( event_type=self.event_type1, credits_needed=4, term=self.term) self.event_req.save() # Create some exam files and exam files requirement test_file = open('test.txt', 'w+') test_file.write('This is a test file.') self.test_exam1 = Exam( course_instance=CourseInstance.objects.get(pk=10000), exam_number=Exam.MT1, exam_type=Exam.EXAM, verified=True, exam_file=File(test_file)) self.test_exam1.save() self.test_exam1.course_instance.course.department.save() self.test_exam2 = Exam( course_instance=CourseInstance.objects.get(pk=20000), exam_number=Exam.MT1, exam_type=Exam.EXAM, verified=True, exam_file=File(test_file)) self.test_exam2.save() self.test_exam2.course_instance.course.department.save() self.exam_req = ExamFileCandidateRequirement( credits_needed=2, term=self.term) self.exam_req.save()
class CandidateTest(TestCase): fixtures = ['test/course_instance.yaml'] def setUp(self): self.candidate_group = Group.objects.create(name='Current Candidate') self.member_group = Group.objects.create(name='Member') user_model = get_user_model() # Create candidate self.user = user_model.objects.create_user( username='******', email='*****@*****.**', password='******', first_name='Random', last_name='Candidate') self.term = Term(term=Term.SPRING, year=2012, current=True) self.term.save() self.candidate = Candidate(user=self.user, term=self.term) self.candidate.save() # Create officer officer_user = user_model.objects.create_user( username='******', email='*****@*****.**', password='******', first_name='Joe', last_name='Officer') committee = OfficerPosition( short_name='IT_test', long_name='Information Technology (test)', rank=2, mailing_list='IT') committee.save() self.officer = Officer(user=officer_user, position=committee, term=self.term, is_chair=False) self.officer.save() # Create some manual candidate requirements self.manual_req1 = ManualCandidateRequirement( name='Manual 1', requirement_type=CandidateRequirement.MANUAL, credits_needed=2, term=self.term) self.manual_req1.save() self.manual_req2 = ManualCandidateRequirement( name='Manual 2', requirement_type=CandidateRequirement.MANUAL, credits_needed=5, term=self.term) self.manual_req2.save() # Create a challenge type self.individual_challenge_type = ChallengeType(name='Individual') self.individual_challenge_type.save() # Create a challenge requirement self.challenge_req = ChallengeCandidateRequirement( challenge_type=self.individual_challenge_type, credits_needed=3, term=self.term) self.challenge_req.save() # Create some events and event requirement self.event_type1 = EventType(name='Fun') self.event_type1.save() self.event_type2 = EventType(name='Not Fun') self.event_type2.save() self.fun_event1 = Event(name='Fun Event', event_type=self.event_type1, start_datetime=timezone.now(), end_datetime=timezone.now(), term=self.term, location='A test location', contact=officer_user, committee=committee) self.fun_event1.save() self.fun_event2 = Event(name='Big Fun Event', event_type=self.event_type1, start_datetime=timezone.now(), end_datetime=timezone.now(), requirements_credit=2, term=self.term, location='A test location', contact=officer_user, committee=committee) self.fun_event2.save() self.notfun_event = Event(name='Not Fun Event', event_type=self.event_type2, start_datetime=timezone.now(), end_datetime=timezone.now(), term=self.term, location='A test location', contact=officer_user, committee=committee) self.notfun_event.save() self.event_req = EventCandidateRequirement( event_type=self.event_type1, credits_needed=4, term=self.term) self.event_req.save() # Create some exam files and exam files requirement test_file = open('test.txt', 'w+') test_file.write('This is a test file.') self.test_exam1 = Exam( course_instance=CourseInstance.objects.get(pk=10000), exam_number=Exam.MT1, exam_type=Exam.EXAM, verified=True, exam_file=File(test_file)) self.test_exam1.save() self.test_exam1.course_instance.course.department.save() self.test_exam2 = Exam( course_instance=CourseInstance.objects.get(pk=20000), exam_number=Exam.MT1, exam_type=Exam.EXAM, verified=True, exam_file=File(test_file)) self.test_exam2.save() self.test_exam2.course_instance.course.department.save() self.exam_req = ExamFileCandidateRequirement( credits_needed=2, term=self.term) self.exam_req.save() @classmethod def tearDownClass(cls): os.remove('test.txt') shutil.rmtree(os.path.join(settings.WORKSPACE_ROOT, 'media', 'tests'), ignore_errors=True) def test_candidate_post_save(self): student_org_profile = get_object_or_none( StudentOrgUserProfile, user=self.user) # Candidate has already been saved for this user created above, so # StudentOrgUserProfile should exist: self.assertIsNotNone(student_org_profile) # Candidate has not been marked as initiated, so initiation_term should # be None in their profile, and the candidate should be in the Current # Candidate group and not in the Member group: self.assertIsNone(student_org_profile.initiation_term) candidate_groups = self.candidate.user.groups.all() self.assertIn(self.candidate_group, candidate_groups) self.assertNotIn(self.member_group, candidate_groups) # Mark candidate as initiated, so profile and groups should update to # match: self.candidate.initiated = True self.candidate.save() student_org_profile = get_object_or_none( StudentOrgUserProfile, user=self.user) self.assertEqual(student_org_profile.initiation_term, self.term) candidate_groups = self.candidate.user.groups.all() self.assertNotIn(self.candidate_group, candidate_groups) self.assertIn(self.member_group, candidate_groups) def test_manual_requirements(self): """Test that credits for manual requirements are counted correctly.""" # Create some candidate progress CandidateRequirementProgress( candidate=self.candidate, requirement=self.manual_req1, manually_recorded_credits=2, alternate_credits_needed=2).save() progress = self.candidate.get_progress(CandidateRequirement.MANUAL) self.assertEqual(progress['completed'], 2) self.assertEqual(progress['required'], 7) # Test the simple summing of credits progress2 = CandidateRequirementProgress( candidate=self.candidate, requirement=self.manual_req2, manually_recorded_credits=3, alternate_credits_needed=5) progress2.save() progress = self.candidate.get_progress(CandidateRequirement.MANUAL) self.assertEqual(progress['completed'], 5) self.assertEqual(progress['required'], 7) # Test alternate credit requirement progress2.alternate_credits_needed = 4 progress2.save() progress = self.candidate.get_progress(CandidateRequirement.MANUAL) self.assertEqual(progress['completed'], 5) self.assertEqual(progress['required'], 6) def test_challenge_requirements(self): """Test that credits for challenges are counted correctly.""" # Make sure unverified challenges don't count challenge = Challenge( candidate=self.candidate, description='Hello kitty', verifying_user=self.officer.user, challenge_type=self.individual_challenge_type) challenge.save() progress = self.candidate.get_progress(CandidateRequirement.CHALLENGE) self.assertEqual(progress['completed'], 0) self.assertEqual(progress['required'], 3) # ...and verified challenges do count challenge.verified = True challenge.save() progress = self.candidate.get_progress(CandidateRequirement.CHALLENGE) self.assertEqual(progress['completed'], 1) self.assertEqual(progress['required'], 3) # Test alternate credit requirement CandidateRequirementProgress( candidate=self.candidate, requirement=self.challenge_req, alternate_credits_needed=2).save() progress = self.candidate.get_progress(CandidateRequirement.CHALLENGE) self.assertEqual(progress['completed'], 1) self.assertEqual(progress['required'], 2) def test_event_requirements(self): """Test that credits for events are counted correctly based on attendance. """ # Attend Fun Event EventAttendance(event=self.fun_event1, user=self.user).save() progress = self.candidate.get_progress(CandidateRequirement.EVENT) self.assertEqual(progress['completed'], 1) # Attend Big Fun Event (worth 2) EventAttendance(event=self.fun_event2, user=self.user).save() progress = self.candidate.get_progress(CandidateRequirement.EVENT) self.assertEqual(progress['completed'], 3) # Attend Not Fun Event (not worth any requirements) EventAttendance(event=self.notfun_event, user=self.user).save() progress = self.candidate.get_progress(CandidateRequirement.EVENT) self.assertEqual(progress['completed'], 3) def test_exams_requirements(self): """Test that credits for exam files are counted correctly.""" # Upload 1 verified exam self.test_exam1.submitter = self.user self.test_exam1.save() self.assertEqual(self.user, self.test_exam1.submitter) progress = self.candidate.get_progress(CandidateRequirement.EXAM_FILE) self.assertEqual(progress['completed'], 1) # Upload 2 verified exams self.test_exam2.submitter = self.user self.test_exam2.save() progress = self.candidate.get_progress(CandidateRequirement.EXAM_FILE) self.assertEqual(progress['completed'], 2) # Unverify an exam (doesn't count anymore) self.test_exam1.verified = False self.test_exam1.save() progress = self.candidate.get_progress(CandidateRequirement.EXAM_FILE) self.assertEqual(progress['completed'], 1) def test_get_total_progress(self): """Test get_progress where requirement_type is not specified and total progress for all requirements is returned. """ # Get all the requirements that were created: requirements = CandidateRequirement.objects.filter(term=self.term) num_required = 0 for requirement in requirements: num_required += requirement.credits_needed progress = self.candidate.get_progress() # Ensure that the method returns the same value as calculated manually. # This value should not change over the course of the tests. self.assertEqual(progress['required'], num_required) # Haven't assigned any completions yet: total_completed = 0 self.assertEqual(progress['completed'], total_completed) # Attend Fun Event for fun event requirement EventAttendance(event=self.fun_event1, user=self.user).save() progress = self.candidate.get_progress() self.assertEqual(progress['required'], num_required) total_completed += 1 self.assertEqual(progress['completed'], total_completed) # Complete a challenge: Challenge(candidate=self.candidate, description='Hello kitty', verifying_user=self.officer.user, verified=True, challenge_type=self.individual_challenge_type).save() progress = self.candidate.get_progress() total_completed += 1 self.assertEqual(progress['required'], num_required) self.assertEqual(progress['completed'], total_completed) # Attend an event not worth any requirements EventAttendance(event=self.notfun_event, user=self.user).save() progress = self.candidate.get_progress() self.assertEqual(progress['required'], num_required) self.assertEqual(progress['completed'], total_completed)
def setUp(self): self.dept_cs = Department(long_name='Computer Science', short_name='CS', abbreviation='COMPSCI') self.dept_cs.save() self.dept_ee = Department(long_name='Electrical Engineering', short_name='EE', abbreviation='EL ENG') self.dept_ee.save() self.course_cs_1 = Course(department=self.dept_cs, number='1') self.course_cs_1.save() self.course_ee_1 = Course(department=self.dept_ee, number='1') self.course_ee_1.save() self.instructor_cs = Instructor(first_name='Tau', last_name='Bate', department=self.dept_cs) self.instructor_cs.save() self.instructor_ee = Instructor(first_name='Pi', last_name='Bent', department=self.dept_ee) self.instructor_ee.save() self.term = Term(term='sp', year=2013, current=True) self.term.save() self.course_instance_cs_1 = CourseInstance(term=self.term, course=self.course_cs_1) self.course_instance_cs_1.save() self.course_instance_cs_1.instructors.add(self.instructor_cs) self.course_instance_cs_1.save() self.course_instance_ee_1 = CourseInstance(term=self.term, course=self.course_ee_1) self.course_instance_ee_1.save() self.course_instance_ee_1.instructors.add(self.instructor_ee) self.course_instance_ee_1.save() self.user = get_user_model().objects.create_user( username='******', email='tbp.berkeley.edu', password='******', first_name='tbp', last_name='user') self.user.save() self.survey_cs_1 = Survey(course=self.course_cs_1, term=self.term, instructor=self.instructor_cs, prof_rating=5, course_rating=5, time_commitment=5, comments='Test comments', submitter=self.user, published=True) self.survey_cs_1.save() self.survey_cs_1_b = Survey(course=self.course_cs_1, term=self.term, instructor=self.instructor_cs, prof_rating=0, course_rating=5, time_commitment=0, comments='Test comments', submitter=self.user, published=True) self.survey_cs_1_b.save() self.exam_ee_1 = Exam(course_instance=self.course_instance_ee_1, submitter=self.user, exam_number=Exam.FINAL, exam_type=Exam.EXAM, file_ext='.pdf', verified=True) self.exam_ee_1.save()
def setUp(self): self.dept_cs = Department(long_name='Computer Science', short_name='CS', abbreviation='COMPSCI') self.dept_cs.save() self.dept_ee = Department(long_name='Electrical Engineering', short_name='EE', abbreviation='EL ENG') self.dept_ee.save() self.course_cs_1 = Course(department=self.dept_cs, number='1') self.course_cs_1.save() self.course_ee_1 = Course(department=self.dept_ee, number='1') self.course_ee_1.save() self.instructor_cs = Instructor(first_name='Tau', last_name='Bate', department=self.dept_cs) self.instructor_cs.save() self.instructor_ee = Instructor(first_name='Pi', last_name='Bent', department=self.dept_ee) self.instructor_ee.save() self.instructor_ee_2 = Instructor(first_name='Bau', last_name='Tate', department=self.dept_ee) self.instructor_ee_2.save() self.term = Term(term='sp', year=2013, current=True) self.term.save() self.term2 = Term(term='sp', year=2014, current=False) self.term2.save() self.course_instance_cs_1 = CourseInstance(term=self.term, course=self.course_cs_1) self.course_instance_cs_1.save() self.course_instance_cs_1.instructors.add(self.instructor_cs) self.course_instance_cs_1.save() self.course_instance_ee_1 = CourseInstance(term=self.term, course=self.course_ee_1) self.course_instance_ee_1.save() self.course_instance_ee_1.instructors.add(self.instructor_ee) self.course_instance_ee_1.save() self.course_instance_ee_2 = CourseInstance(term=self.term2, course=self.course_ee_1) self.course_instance_ee_2.save() self.course_instance_ee_2.instructors.add(self.instructor_ee) self.course_instance_ee_2.save() self.course_instance_ee_3 = CourseInstance(term=self.term2, course=self.course_ee_1) self.course_instance_ee_3.save() self.course_instance_ee_3.instructors.add(self.instructor_ee_2) self.course_instance_ee_3.save() self.user = get_user_model().objects.create_user( username='******', email='tbp.berkeley.edu', password='******', first_name='tbp', last_name='user') self.user.save() self.syllabus_cs_1 = Syllabus( course_instance=self.course_instance_cs_1, submitter=self.user, file_ext='.pdf', verified=True) self.syllabus_cs_1.save() # Create exams: # ee_1: Course ee1, instr 1 final exam # ee_2: Course ee1, instr 1 final solution # ee_3: Course ee1, instr 1 final exam # ee_4: Course ee1, instr 2 final exam self.exam_ee_1 = Exam(course_instance=self.course_instance_ee_1, submitter=self.user, exam_number=Exam.FINAL, exam_type=Exam.EXAM, file_ext='.pdf', verified=True) self.exam_ee_1.save() self.exam_ee_2 = Exam(course_instance=self.course_instance_ee_1, submitter=self.user, exam_number=Exam.FINAL, exam_type=Exam.SOLN, file_ext='.pdf', verified=True) self.exam_ee_2.save() self.exam_ee_3 = Exam(course_instance=self.course_instance_ee_2, submitter=self.user, exam_number=Exam.FINAL, exam_type=Exam.EXAM, file_ext='.pdf', verified=True) self.exam_ee_3.save() self.exam_ee_4 = Exam(course_instance=self.course_instance_ee_3, submitter=self.user, exam_number=Exam.FINAL, exam_type=Exam.EXAM, file_ext='.pdf', verified=True) self.exam_ee_4.save()