Exemplo n.º 1
0
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)
Exemplo n.º 2
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))
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
    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'))
Exemplo n.º 10
0
 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()
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
    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'])
Exemplo n.º 14
0
    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'])
Exemplo n.º 15
0
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)