|
| 1 | +from types import SimpleNamespace |
| 2 | + |
| 3 | +from django.contrib import admin |
1 | 4 | from django.test import TestCase |
| 5 | +from django.test import RequestFactory |
| 6 | +from django.utils import timezone |
2 | 7 |
|
| 8 | +from courses.admin_config.answers import UserTaskAnswerAdmin |
3 | 9 | from courses.models import UserTaskAnswer, UserTaskAnswerStatus |
4 | 10 | from courses.services.answers import TaskAnswerSubmitPayload, submit_user_task_answer |
5 | 11 |
|
@@ -68,3 +74,40 @@ def test_submit_text_question_with_review_blocks_continue(self): |
68 | 74 | self.assertIsNone(answer.is_correct) |
69 | 75 | self.assertFalse(result.can_continue) |
70 | 76 | self.assertIsNone(result.next_task_id) |
| 77 | + |
| 78 | + def test_admin_review_recalculates_progress_after_accept(self): |
| 79 | + reviewer = create_user(prefix="reviewer") |
| 80 | + question_task = create_text_question_task( |
| 81 | + self.lesson, |
| 82 | + order=1, |
| 83 | + check_type="with_review", |
| 84 | + ) |
| 85 | + submit_user_task_answer( |
| 86 | + self.user, |
| 87 | + question_task, |
| 88 | + TaskAnswerSubmitPayload(answer_text="ok"), |
| 89 | + ) |
| 90 | + answer = UserTaskAnswer.objects.get(user=self.user, task=question_task) |
| 91 | + request = RequestFactory().post("/") |
| 92 | + request.user = reviewer |
| 93 | + form = SimpleNamespace( |
| 94 | + changed_data=["status", "is_correct", "reviewed_by", "reviewed_at"] |
| 95 | + ) |
| 96 | + |
| 97 | + answer.status = UserTaskAnswerStatus.ACCEPTED |
| 98 | + answer.is_correct = True |
| 99 | + answer.reviewed_by = reviewer |
| 100 | + answer.reviewed_at = timezone.now() |
| 101 | + UserTaskAnswerAdmin(UserTaskAnswer, admin.site).save_model( |
| 102 | + request, |
| 103 | + answer, |
| 104 | + form, |
| 105 | + change=True, |
| 106 | + ) |
| 107 | + |
| 108 | + lesson_progress = self.lesson.user_progresses.get(user=self.user) |
| 109 | + module_progress = self.module.user_progresses.get(user=self.user) |
| 110 | + course_progress = self.course.user_progresses.get(user=self.user) |
| 111 | + self.assertEqual(lesson_progress.percent, 100) |
| 112 | + self.assertEqual(module_progress.percent, 100) |
| 113 | + self.assertEqual(course_progress.percent, 100) |
0 commit comments