262 lines
9.1 KiB
Python
262 lines
9.1 KiB
Python
from django.test import TestCase
|
|
|
|
from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment
|
|
from vbv_lernwelt.assignment.models import AssignmentCompletion
|
|
from vbv_lernwelt.assignment.services import update_assignment_completion
|
|
from vbv_lernwelt.core.create_default_users import create_default_users
|
|
from vbv_lernwelt.core.models import User
|
|
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
|
|
from vbv_lernwelt.core.utils import find_first
|
|
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
|
from vbv_lernwelt.course.factories import CourseFactory, CoursePageFactory
|
|
from vbv_lernwelt.course.models import CourseSession
|
|
|
|
|
|
class UpdateAssignmentCompletionTestCase(TestCase):
|
|
def setUp(self):
|
|
create_default_users()
|
|
create_locales_for_wagtail()
|
|
course = CourseFactory(
|
|
id=COURSE_TEST_ID,
|
|
)
|
|
course_page = CoursePageFactory(course=course)
|
|
self.assignment = create_test_assignment()
|
|
self.course_session = CourseSession.objects.create(
|
|
course_id=COURSE_TEST_ID,
|
|
title="Bern 2022 a",
|
|
)
|
|
self.user = User.objects.get(username="student")
|
|
|
|
def test_can_store_new_user_input(self):
|
|
subtasks = self.assignment.filter_user_subtasks()
|
|
user_text_input = find_first(
|
|
subtasks, pred=lambda x: x["type"] == "user_text_input"
|
|
)
|
|
user_confirmation = find_first(
|
|
subtasks, pred=lambda x: x["type"] == "user_confirmation"
|
|
)
|
|
|
|
update_assignment_completion(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input["id"]: {
|
|
"user_data": {"text": "Viel habe ich nicht zu sagen..."}
|
|
},
|
|
user_confirmation["id"]: {"user_data": {"confirmation": True}},
|
|
},
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.get(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
)
|
|
self.assertDictEqual(
|
|
ac.completion_data,
|
|
{
|
|
user_text_input["id"]: {
|
|
"user_data": {"text": "Viel habe ich nicht zu sagen..."}
|
|
},
|
|
user_confirmation["id"]: {"user_data": {"confirmation": True}},
|
|
},
|
|
)
|
|
|
|
def test_can_update_user_input(self):
|
|
subtasks = self.assignment.filter_user_subtasks(
|
|
subtask_types=["user_text_input"]
|
|
)
|
|
user_text_input0 = subtasks[0]
|
|
user_text_input1 = subtasks[1]
|
|
|
|
ac = AssignmentCompletion.objects.create(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input0["id"]: {
|
|
"user_data": {"text": "Am Anfang war das Wort... 0"}
|
|
},
|
|
user_text_input1["id"]: {
|
|
"user_data": {"text": "Am Anfang war das Wort... 1"}
|
|
},
|
|
},
|
|
)
|
|
|
|
update_assignment_completion(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input1["id"]: {
|
|
"user_data": {"text": "Viel mehr gibt es nicht zu sagen."}
|
|
}
|
|
},
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.get(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
)
|
|
user_input0 = ac.completion_data[user_text_input0["id"]]["user_data"]["text"]
|
|
user_input1 = ac.completion_data[user_text_input1["id"]]["user_data"]["text"]
|
|
self.assertEqual(user_input0, "Am Anfang war das Wort... 0")
|
|
self.assertEqual(user_input1, "Viel mehr gibt es nicht zu sagen.")
|
|
|
|
def test_will_not_store_unknown_user_tasks(self):
|
|
random_uuid = "7b60903b-d2a5-4798-b6cd-5b51e63e98ab"
|
|
|
|
update_assignment_completion(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
random_uuid: {
|
|
"user_data": {"text": "Viel mehr gibt es nicht zu sagen."}
|
|
}
|
|
},
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.get(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
)
|
|
self.assertEqual(ac.completion_data, {})
|
|
|
|
def test_change_completion_status(self):
|
|
subtasks = self.assignment.filter_user_subtasks(
|
|
subtask_types=["user_text_input"]
|
|
)
|
|
user_text_input0 = subtasks[0]
|
|
user_text_input1 = subtasks[1]
|
|
|
|
ac = AssignmentCompletion.objects.create(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input0["id"]: {
|
|
"user_data": {"text": "Am Anfang war das Wort... 0"}
|
|
},
|
|
user_text_input1["id"]: {
|
|
"user_data": {"text": "Am Anfang war das Wort... 1"}
|
|
},
|
|
},
|
|
)
|
|
|
|
update_assignment_completion(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_status="submitted",
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.get(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
)
|
|
|
|
self.assertEqual(ac.completion_status, "submitted")
|
|
|
|
def test_copy_task_data(self):
|
|
subtasks = self.assignment.filter_user_subtasks(
|
|
subtask_types=["user_text_input"]
|
|
)
|
|
user_text_input = find_first(
|
|
subtasks,
|
|
pred=lambda x: (value := x.get("value"))
|
|
and value.get("text", "").startswith(
|
|
"Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest?"
|
|
),
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.create(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input["id"]: {
|
|
"user_data": {"text": "Ich würde nichts weiteres empfehlen."}
|
|
},
|
|
},
|
|
)
|
|
|
|
update_assignment_completion(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_status="submitted",
|
|
copy_task_data=True,
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.get(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
)
|
|
|
|
self.assertEqual(ac.completion_status, "submitted")
|
|
user_input = ac.completion_data[user_text_input["id"]]
|
|
self.assertEqual(
|
|
user_input["user_data"]["text"], "Ich würde nichts weiteres empfehlen."
|
|
)
|
|
self.assertTrue(
|
|
user_input["value"]["text"].startswith(
|
|
"Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest?"
|
|
)
|
|
)
|
|
|
|
def test_can_add_trainer_data_without_loosing_user_input_data(self):
|
|
subtasks = self.assignment.filter_user_subtasks(
|
|
subtask_types=["user_text_input"]
|
|
)
|
|
user_text_input = find_first(
|
|
subtasks,
|
|
pred=lambda x: (value := x.get("value"))
|
|
and value.get("text", "").startswith(
|
|
"Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest?"
|
|
),
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.create(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input["id"]: {
|
|
"user_data": {"text": "Ich würde nichts weiteres empfehlen."}
|
|
},
|
|
},
|
|
)
|
|
|
|
update_assignment_completion(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
completion_data={
|
|
user_text_input["id"]: {
|
|
"trainer_data": {"points": 1, "comment": "Gut gemacht!"}
|
|
},
|
|
},
|
|
completion_status="grading_in_progress",
|
|
)
|
|
|
|
ac = AssignmentCompletion.objects.get(
|
|
user=self.user,
|
|
assignment=self.assignment,
|
|
course_session=self.course_session,
|
|
)
|
|
|
|
self.assertEqual(ac.completion_status, "grading_in_progress")
|
|
user_input = ac.completion_data[user_text_input["id"]]
|
|
self.assertDictEqual(
|
|
user_input["trainer_data"], {"points": 1, "comment": "Gut gemacht!"}
|
|
)
|
|
self.assertEqual(
|
|
user_input["user_data"]["text"], "Ich würde nichts weiteres empfehlen."
|
|
)
|