class GenerateCertificatesTests(TestCase): def setUp(self): now = datetime.now() self.student = StudentFactory() self.course = CourseFactory(start_time=now.date() - timedelta(days=10), end_time=now.date() + timedelta(days=10), generate_certificates_until=now.date() + timedelta(days=10)) self.course_assignment = CourseAssignmentFactory(course=self.course, user=self.student) def test_certificate_is_generated_for_student(self): self.assertEqual(0, Certificate.objects.count()) call_command('generate_certificates') self.assertEqual(1, Certificate.objects.count()) cert = Certificate.objects.first() self.assertEqual(cert, self.course_assignment.certificate) def test_certificate_not_generated_for_nonattending_student(self): self.assertEqual(0, Certificate.objects.count()) self.course_assignment.is_attending = False self.course_assignment.save() call_command('generate_certificates') self.assertEqual(Certificate.objects.count(), 0)
def setUp(self): self.student1 = StudentFactory() self.student1.is_active = True self.student1.set_password(BaseUserFactory.password) self.student1.save() self.student2 = StudentFactory() self.student2.is_active = True self.student2.set_password(BaseUserFactory.password) self.student2.save() self.course = CourseFactory(start_time=datetime.now().date() - timedelta(days=10), end_time=datetime.now().date() + timedelta(days=10)) self.course_assignment = CourseAssignmentFactory(course=self.course, user=self.student1) self.course_assignment2 = CourseAssignmentFactory(course=self.course, user=self.student2) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=9)) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=7)) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=5)) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=3))
def setUp(self): now = datetime.now() self.student = StudentFactory() self.course = CourseFactory(start_time=now.date() - timedelta(days=10), end_time=now.date() + timedelta(days=10), generate_certificates_until=now.date() + timedelta(days=10)) self.course_assignment = CourseAssignmentFactory(course=self.course, user=self.student)
class DropStudentTests(TestCase): def setUp(self): self.baseuser = BaseUserFactory() self.baseuser.is_active = True self.baseuser.save() self.baseuser2 = BaseUserFactory() self.baseuser2.is_active = True self.baseuser2.save() self.student = BaseUser.objects.promote_to_student(self.baseuser2) self.course = CourseFactory() self.course_assignment = CourseAssignmentFactory(course=self.course, user=self.student) def test_cannot_drop_student_if_not_logged_in(self): response = self.post('education:drop-student', course=self.course.id, ca=self.course_assignment.id) self.assertEqual(response.status_code, 302) def test_non_teachers_cannot_drop_student(self): with self.login(email=self.baseuser2.email, password=BaseUserFactory.password): response = self.post('education:drop-student', course=self.course.id, ca=self.course_assignment.id) self.assertEqual(response.status_code, 403) def test_teacher_cannot_drop_students_from_other_courses(self): teacher = BaseUser.objects.promote_to_teacher(self.baseuser2) course = CourseFactory() teacher.teached_courses = [course] teacher.save() with self.login(email=teacher.email, password=BaseUserFactory.password): response = self.post('education:drop-student', course=self.course.id, ca=self.course_assignment.id) self.assertEqual(response.status_code, 403) def test_teacher_can_drop_student_from_course_if_he_teaches_it(self): teacher = BaseUser.objects.promote_to_teacher(self.baseuser2) teacher.teached_courses = [self.course] teacher.save() self.assertTrue(self.course_assignment.is_attending) with self.login(email=teacher.email, password=BaseUserFactory.password): response = self.post('education:drop-student', course=self.course.id, ca=self.course_assignment.id) self.assertEqual(response.status_code, 302) self.course_assignment.refresh_from_db() self.assertFalse(self.course_assignment.is_attending)
def setUp(self): self.baseuser = BaseUserFactory() self.baseuser.is_active = True self.baseuser.save() self.baseuser2 = BaseUserFactory() self.baseuser2.is_active = True self.baseuser2.save() self.student = BaseUser.objects.promote_to_student(self.baseuser2) self.course = CourseFactory() self.course_assignment = CourseAssignmentFactory(course=self.course, user=self.student)
def test_check_raises_if_teacher_has_courseassingment_for_this_course(self): student = BaseUser.objects.promote_to_student(self.base_user) CourseAssignmentFactory(user=student, course=self.course) with self.assertRaises(ValidationError): add_teacher_to_course(user=student, course=self.course)
def test_raises_errors_if_there_is_courseassingment_for_student(self): student = BaseUser.objects.promote_to_student(self.base_user) self.assertEqual(1, Student.objects.filter(email=self.base_user.email).count()) CourseAssignmentFactory(user=student, course=self.course) with self.assertRaises(ValidationError): add_student_to_course(user=student, course=self.course)
def test_student_cannot_access_task_list_of_course_without_tasks(self): course2 = CourseFactory() CourseAssignmentFactory(course=course2, user=self.student) with self.login(email=self.student.email, password=BaseUserFactory.password): response = self.get('education:task-list', course=course2.id) self.assertEqual(response.status_code, 404)
def test_create_file_if_there_is_db(self): baseuser = BaseUserFactory() baseuser.is_active = True baseuser.save() student = BaseUser.objects.promote_to_student(baseuser) course = CourseFactory() CourseAssignmentFactory(course=course, user=student) course1 = CourseFactory() course2 = CourseFactory() self.assertFalse(os.path.exists('working_ats.csv')) call_command('create_csv_with_all_workingats', "{}, {}".format(course1.id, course2.id)) self.assertTrue(os.path.exists('working_ats.csv'))
def setUp(self): self.baseuser = BaseUserFactory() self.baseuser.is_active = True self.baseuser.save() self.baseuser2 = BaseUserFactory() self.baseuser2.is_active = True self.baseuser2.save() self.student = BaseUser.objects.promote_to_student(self.baseuser2) self.student.mac = "22:44:55:66:77" self.course = CourseFactory() self.ca = CourseAssignmentFactory(course=self.course, user=self.student) self.task = TaskFactory(course=self.course, gradable=True) self.baseuser3 = BaseUserFactory() self.baseuser3.is_active = True self.baseuser3.save()
def test_student_can_see_only_courses_for_which_have_courseassignments( self): student = BaseUser.objects.promote_to_student(self.baseuser) course = CourseFactory() course2 = CourseFactory() CourseAssignmentFactory(course=course, user=student) with self.login(username=student.email, password=BaseUserFactory.password): response = self.get('education:course-list') self.assertEqual(response.status_code, 200) self.assertIn(course, response.context['student_courses']) self.assertNotIn(course2, response.context['student_courses']) self.assertNotIn('teacher_courses', response.context)
def test_teacher_cannot_see_other_students_detail_information(self): teacher = BaseUser.objects.promote_to_teacher(self.baseuser) teacher.teached_courses = [self.course] other_student = BaseUser.objects.promote_to_student(self.baseuser3) other_student_course = CourseFactory() other_student_ca = CourseAssignmentFactory(course=other_student_course, user=other_student) self.assertFalse(other_student_course in teacher.teached_courses.all()) with self.login(email=teacher.email, password=BaseUserFactory.password): response = self.get('education:student-detail', course=other_student_course.id, ca=other_student_ca.id) self.assertEqual(response.status_code, 403)
def test_common_teacher_and_student_user_can_see_courses_for_which_ca_or_is_teacher( self): teacher = BaseUser.objects.promote_to_teacher(self.baseuser) student = BaseUser.objects.promote_to_student(self.baseuser) course = CourseFactory() teacher.teached_courses = [course] course2 = CourseFactory() CourseAssignmentFactory(course=course2, user=student) with self.login(username=teacher.email, password=BaseUserFactory.password): response = self.get('education:course-list') self.assertEqual(response.status_code, 200) self.assertIn(course, response.context['teacher_courses']) self.assertNotIn(course2, response.context['teacher_courses']) self.assertIn(course2, response.context['student_courses']) self.assertNotIn(course, response.context['student_courses'])
def test_teacher_can_see_student_list_only_for_his_course(self): teacher = BaseUser.objects.promote_to_teacher(self.baseuser) teacher.teached_courses = [self.course] baseuser3 = BaseUserFactory() baseuser3.is_active = True baseuser3.save() student = BaseUser.objects.promote_to_student(baseuser3) course2 = CourseFactory() course_assignment_for_baseuser3 = CourseAssignmentFactory( course=course2, user=student) with self.login(email=teacher.email, password=BaseUserFactory.password): response = self.get('education:student-list', course=self.course.id) self.assertEqual(response.status_code, 200) self.assertIn(self.course_assignment, response.context['object_list']) self.assertNotIn(course_assignment_for_baseuser3, response.context['object_list'])
class CalculatePresenceTests(TestCase): def setUp(self): self.student1 = StudentFactory() self.student1.is_active = True self.student1.set_password(BaseUserFactory.password) self.student1.save() self.student2 = StudentFactory() self.student2.is_active = True self.student2.set_password(BaseUserFactory.password) self.student2.save() self.course = CourseFactory(start_time=datetime.now().date() - timedelta(days=10), end_time=datetime.now().date() + timedelta(days=10)) self.course_assignment = CourseAssignmentFactory(course=self.course, user=self.student1) self.course_assignment2 = CourseAssignmentFactory(course=self.course, user=self.student2) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=9)) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=7)) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=5)) LectureFactory(course=self.course, date=datetime.now().date() - timedelta(days=3)) def test_calculate_presence_when_student_havenot_checkins_for_course(self): self.assertEqual(self.course_assignment.student_presence, 0) self.assertEqual(self.course_assignment2.student_presence, 0) call_command('calculate_presence') self.assertEqual(self.course_assignment.student_presence, 0) self.assertEqual(self.course_assignment2.student_presence, 0) def test_calculate_presence_when_student_have_checkins_for_other_dates(self): check_in1 = CheckInFactory(mac=self.student1.mac, user=self.student1) check_in1.date = datetime.now().date() - timedelta(days=8) check_in1.save() check_in2 = CheckInFactory(mac=self.student1.mac, user=self.student1) check_in2.date = datetime.now().date() - timedelta(days=6) check_in2.save() self.assertEqual(self.course_assignment.student_presence, 0) self.assertEqual(4, Lecture.objects.filter(course=self.course).count()) self.assertEqual(2, CheckIn.objects.get_user_dates(user=self.student1, course=self.course).count()) call_command('calculate_presence') self.assertEqual(self.course_assignment.student_presence, 0) def test_calculate_presence_when_student_have_checkins_for_course_lecture(self): check_in1 = CheckInFactory(mac=self.student1.mac, user=self.student1) check_in1.date = datetime.now().date() - timedelta(days=9) check_in1.save() check_in2 = CheckInFactory(mac=self.student1.mac, user=self.student1) check_in2.date = datetime.now().date() - timedelta(days=7) check_in2.save() check_in3 = CheckInFactory(mac=self.student2.mac, user=self.student2) check_in3.date = datetime.now().date() - timedelta(days=5) check_in3.save() check_in4 = CheckInFactory(mac=self.student2.mac, user=self.student2) check_in4.date = datetime.now().date() - timedelta(days=3) check_in4.save() check_in5 = CheckInFactory(mac=self.student2.mac, user=self.student2) check_in5.date = datetime.now().date() - timedelta(days=7) check_in5.save() self.assertEqual(self.course_assignment.student_presence, 0) self.assertEqual(4, Lecture.objects.filter(course=self.course).count()) self.assertEqual(2, CheckIn.objects.get_user_dates(user=self.student1, course=self.course).count()) self.assertEqual(3, CheckIn.objects.get_user_dates(user=self.student2, course=self.course).count()) call_command('calculate_presence') self.course_assignment.refresh_from_db() self.assertEqual(self.course_assignment.student_presence, 50) self.course_assignment2.refresh_from_db() self.assertEqual(self.course_assignment2.student_presence, 75)