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