Exemplo n.º 1
0
class TasksTests(TestCase):

    @skip("Don't want to test")
    def setUp(self):
        self.student = StudentFactory()
        self.course = CourseFactory()

        self.language = ProgrammingLanguageFactory(name='Python')
        self.task = TaskFactory(course=self.course)
        self.test = SourceCodeTest.objects.create(task=self.task,
                                                  language=self.language,
                                                  code='import this')
        self.solution = SolutionFactory(student=self.student,
                                        task=self.task,
                                        status=Solution.SUBMITED)

    @mock.patch('requests.post',
                return_value=make_mock_object(status_code=202,
                                              json=lambda: {'run_id': faker.pyint()},
                                              headers={'Location': faker.url()}))
    @skip("Don't want to test")
    @mock.patch('loki.education.tasks.poll_solution', side_effect=lambda *args, **kwargs: None)
    def test_submit_solution_submits_the_solution(self, poll_solution, requests_post):
        submit_solution.delay(self.solution.id)

        self.solution.refresh_from_db()
        self.assertEqual(Solution.PENDING, self.solution.status)

        self.assertTrue(requests_post.called)
Exemplo n.º 2
0
    def setUp(self):
        self.student = StudentFactory()
        self.course = CourseFactory()

        self.task = TaskFactory(course=self.course)
        self.solution = SolutionFactory(student=self.student,
                                        task=self.task,
                                        status=Solution.PENDING)
Exemplo n.º 3
0
    def setUp(self):
        self.student = StudentFactory()
        self.course = CourseFactory()

        self.language = ProgrammingLanguageFactory(name='Python')
        self.task = TaskFactory(course=self.course)
        self.test = SourceCodeTest.objects.create(task=self.task,
                                                  language=self.language,
                                                  code='import this')
        self.solution = SolutionFactory(student=self.student,
                                        task=self.task,
                                        status=Solution.SUBMITED)
Exemplo n.º 4
0
    def test_teacher_can_access_course_student_solution_list_if_he_teach_it(
            self):
        self.teacher.teached_courses = [self.course]
        solution = SolutionFactory(task=self.task, student=self.student)
        solution2 = SolutionFactory(task=self.task, student=self.student)

        with self.login(email=self.teacher.email,
                        password=BaseUserFactory.password):
            response = self.get('education:student-solution-list',
                                course=self.course.id,
                                student=self.student.id,
                                task=self.task.id)
            self.assertEqual(response.status_code, 200)
            self.assertIn(solution, response.context['object_list'])
            self.assertIn(solution, response.context['solution_list'])
            self.assertIn(solution2, response.context['object_list'])
            self.assertIn(solution2, response.context['solution_list'])
Exemplo n.º 5
0
 def test_baseuser_cannot_access_solution_list_if_has_solutions(self):
     SolutionFactory(task=self.task, student=self.student)
     with self.login(email=self.baseuser.email,
                     password=BaseUserFactory.password):
         response = self.get('education:solution-list',
                             course=self.course.id,
                             task=self.task.id)
         self.assertEqual(response.status_code, 403)
Exemplo n.º 6
0
 def test_student_can_access_solution_list_if_has_solutions(self):
     solution = SolutionFactory(task=self.task, student=self.student)
     with self.login(email=self.student.email,
                     password=BaseUserFactory.password):
         response = self.get('education:solution-list',
                             course=self.course.id,
                             task=self.task.id)
         self.assertEqual(response.status_code, 200)
         self.assertIn(solution, response.context['object_list'])
Exemplo n.º 7
0
class RegradePendingSolutionsTests(TestCase):

    @skip("Don't want to test")
    def setUp(self):
        self.student = StudentFactory()
        self.course = CourseFactory()

        self.task = TaskFactory(course=self.course)
        self.solution = SolutionFactory(student=self.student,
                                        task=self.task,
                                        status=Solution.PENDING)

    @skip("Don't want to test")
    @mock.patch('loki.education.tasks.submit_solution', side_effect=lambda *args, **kwargs: None)
    def test_regrade_pending_solution_submits_pending_solutions(self, mock):
        call_command('regrade_pending_solutions')

        self.solution.refresh_from_db()
        self.assertEqual(Solution.SUBMITED, self.solution.status)
Exemplo n.º 8
0
    def test_teacher_cannot_access_student_solution_list(self):
        teacher = BaseUser.objects.promote_to_teacher(self.baseuser)
        SolutionFactory(task=self.task, student=self.student)

        with self.login(email=teacher.email,
                        password=BaseUserFactory.password):
            response = self.get('education:solution-list',
                                course=self.course.id,
                                task=self.task.id)
            self.assertEqual(response.status_code, 403)
Exemplo n.º 9
0
    def test_context_of_the_certificate(self):
        url_tasks = TaskFactory.create_batch(5,
                                             course=self.course,
                                             gradable=False)
        gradable_task1 = TaskFactory(course=self.course, gradable=True)
        gradable_task2 = TaskFactory(course=self.course, gradable=True)

        SolutionFactory(task=gradable_task1, student=self.student, status=3)
        SolutionFactory(task=gradable_task1, student=self.student, status=2)
        SolutionFactory(task=gradable_task2, student=self.student, status=3)

        [
            SolutionFactory(task=task, status=6, student=self.student)
            for task in url_tasks
        ]

        response = self.get("education:certificate-detail",
                            token=self.certificate.token)

        self.assertEqual(200, response.status_code)
        self.assertEqual(2, len(response.context["gradable_tasks"]))
        self.assertEqual(5, len(response.context["url_tasks"]))

        url_solutions_statuses = [
            task['solution'] for task in response.context["url_tasks"]
            if task['solution'] != "Not sent"
        ]
        gradable_passed_solutions = [
            task['solution_status']
            for task in response.context["gradable_tasks"]
            if task['solution_status'] == "PASS"
        ]
        gradable_failed_solutions = [
            task['solution_status']
            for task in response.context["gradable_tasks"]
            if task['solution_status'] == "FAIL"
        ]
        self.assertEqual(5, len(url_solutions_statuses))
        self.assertEqual(1, len(gradable_passed_solutions))
        self.assertEqual(1, len(gradable_failed_solutions))
Exemplo n.º 10
0
    def test_check_count_gradable_and_notgradable_tasks(self):
        teacher = BaseUser.objects.promote_to_teacher(self.baseuser)
        teacher.teached_courses = [self.course]

        SolutionFactory(task=self.task, student=self.student)
        TaskFactory(course=self.course, gradable=False)

        with self.login(username=teacher.email,
                        password=BaseUserFactory.password):
            response = self.get('education:course-detail',
                                course=self.course.id)
            self.assertEqual(response.status_code, 200)
            self.assertEqual(1, response.context['not_gradable_tasks'])
            self.assertEqual(1, response.context['gradable_tasks'])
            self.assertEqual(1, response.context['count_solutions'])
Exemplo n.º 11
0
    def test_teacher_can_see_student_detail_information(self):
        teacher = BaseUser.objects.promote_to_teacher(self.baseuser)
        teacher.teached_courses = [self.course]

        solution1 = SolutionFactory(task=self.task, student=self.student)
        solution1.status = 3
        solution1.save()

        solution2 = SolutionFactory(task=self.task, student=self.student)
        solution2.status = 2
        solution2.save()

        solution3 = SolutionFactory(task=self.task, student=self.student)
        solution3.status = 2
        solution3.save()

        url_task = TaskFactory(course=self.course, gradable=False)
        SolutionFactory(task=url_task, student=self.student)

        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))

        check_in1 = CheckInFactory(mac=self.student.mac, user=self.student)
        check_in1.date = datetime.now().date() - timedelta(days=9)
        check_in1.save()
        check_in2 = CheckInFactory(mac=self.student.mac, user=self.student)
        check_in2.date = datetime.now().date() - timedelta(days=7)
        check_in2.save()

        with self.login(email=teacher.email,
                        password=BaseUserFactory.password):
            response = self.get('education:student-detail',
                                course=self.course.id,
                                ca=self.ca.id)
            self.assertEqual(response.status_code, 200)
            self.assertEqual(self.ca, response.context['object'])
            self.assertEqual(2, response.context['passed_solutions'])
            self.assertEqual(1, response.context['failed_solutions'])
            self.assertEqual(1, response.context['url_solutions'])