diff --git a/server/vbv_lernwelt/assignment/creators/create_assignments.py b/server/vbv_lernwelt/assignment/creators/create_assignments.py index 855c1b3c..bc2eb4de 100644 --- a/server/vbv_lernwelt/assignment/creators/create_assignments.py +++ b/server/vbv_lernwelt/assignment/creators/create_assignments.py @@ -5,7 +5,6 @@ from vbv_lernwelt.assignment.models import ( ) from vbv_lernwelt.assignment.tests.assignment_factories import ( AssignmentFactory, - AssignmentListPageFactory, EvaluationSubTaskBlockFactory, EvaluationTaskBlockFactory, ExplanationBlockFactory, @@ -14,8 +13,7 @@ from vbv_lernwelt.assignment.tests.assignment_factories import ( UserTextInputBlockFactory, ) from vbv_lernwelt.core.utils import replace_whitespace -from vbv_lernwelt.course.consts import COURSE_TEST_ID, COURSE_UK -from vbv_lernwelt.course.models import CoursePage +from vbv_lernwelt.course.consts import COURSE_UK from wagtail.blocks import StreamValue from wagtail.blocks.list_block import ListBlock, ListValue from wagtail.rich_text import RichText @@ -458,445 +456,6 @@ def create_uk_casework(assignment_list_page, course_id=COURSE_UK): return assignment -def create_test_assignment(course_id=COURSE_TEST_ID): - course_page = CoursePage.objects.get(course_id=course_id) - assignment_page = AssignmentListPageFactory( - parent=course_page, - ) - - assignment = AssignmentFactory( - parent=assignment_page, - title="Überprüfen einer Motorfahrzeugs-Versicherungspolice", - effort_required="ca. 5 Stunden", - intro_text=replace_whitespace( - """ - Jemand aus deiner Familie oder aus deinem Freundeskreis möchte sein - Versicherungspolice überprüfen lassen. Diese Person kommt nun mit ihrer Police auf dich zu - und bittet dich als Versicherungsprofi, diese kritisch zu überprüfen und ihr ggf. Anpassungsvorschläge - zu unterbreiten. In diesem Kompetenznachweis kannst du nun dein Wissen und Können im Bereich - der Motorfahrzeugversicherung unter Beweis stellen. - """ - ), - performance_objectives=[ - ( - "performance_objective", - PerformanceObjectiveBlockFactory( - text="Sie erläutern die Leistungen und Produkte im Versicherungsbereich." - ), - ), - ( - "performance_objective", - PerformanceObjectiveBlockFactory( - text="Sie beurteilen gängige Versicherungslösungen fachkundig." - ), - ), - ], - evaluation_document_url="/static/media/assignments/UK_03_09_NACH_KN_Beurteilungsraster.pdf", - evaluation_description="Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsintrument bewertet.", - ) - - assignment.evaluation_tasks = [] - assignment.evaluation_tasks.append( - ( - "task", - EvaluationTaskBlockFactory( - title="Ausgangslage des Auftrags", - description=RichText( - "Beschreibt der/die Lernende die Ausgangslage des Auftrags vollständig?" - ), - max_points=6, - sub_tasks=ListValue( - ListBlock(EvaluationSubTaskBlock()), - values=[ - EvaluationSubTaskBlockFactory( - title="Die Ausgangslage des Auftrag ist vollständig beschrieben.", - description=RichText( - replace_whitespace( - """ - - """ - ) - ), - points=6, - ), - EvaluationSubTaskBlockFactory( - title="Die Ausgangslage ist grösstenteils vollständig beschrieben.", - points=4, - ), - EvaluationSubTaskBlockFactory( - title="Die Ausgangslage ist unvollständig - nur 2 Punkte wurden beschrieben.", - points=2, - ), - EvaluationSubTaskBlockFactory( - title="Die Ausgangslage des Auftrag ist unvollständig - es fehlen mehr als 2 Punkte in der Beschreibung.", - points=0, - ), - ], - ), - ), - ), - ) - assignment.evaluation_tasks.append( - ( - "task", - EvaluationTaskBlockFactory( - title="Inhaltsanalyse und Struktur", - max_points=6, - description=RichText( - "Sind die Deckungen der Police vollständig und nachvollziehbar dokumentiert?" - ), - sub_tasks=ListValue( - ListBlock(EvaluationSubTaskBlock()), - values=[ - EvaluationSubTaskBlockFactory( - title="Die Analyse beinhaltet alle in der Police vorhandenen Deckungen und ist logisch aufgebaut.", - points=6, - ), - EvaluationSubTaskBlockFactory( - title="Die Analyse beinhaltet die meisten vorhandenen Deckungen in der Police und ist grösstenteils logisch aufgebaut.", - points=4, - ), - EvaluationSubTaskBlockFactory( - title="Die Analyse ist unvollständig (es fehlen mehr als 3 Deckungen) und der rote Faden ist nicht erkennbar.", - points=2, - ), - EvaluationSubTaskBlockFactory( - title="Die Analyse ist insgesamt nicht nachvollziehbar und es fehlen einige Deckungen.", - points=0, - ), - ], - ), - ), - ), - ) - assignment.evaluation_tasks.append( - ( - "task", - EvaluationTaskBlockFactory( - title="Sinnvolle Empfehlungen", - max_points=6, - description=RichText( - "Leitet die lernende Person sinnvolle und geeignete Empfehlungen ab?" - ), - sub_tasks=ListValue( - ListBlock(EvaluationSubTaskBlock()), - values=[ - EvaluationSubTaskBlockFactory( - title="Die Empfehlungen sind durchgängig sinnvoll und nachvollziehbar begründet.", - points=6, - ), - EvaluationSubTaskBlockFactory( - title="Die Empfehlungen sind grösstenteils sinnvoll und nachvollziehbar begründet.", - points=4, - ), - EvaluationSubTaskBlockFactory( - title="Die Empfehlungen sind wenig sinnvoll und unvollständig begründet.", - points=2, - ), - EvaluationSubTaskBlockFactory( - title="Die Empfehlungen sind weder sinnvoll nch nachvollziehbar begründet.", - points=0, - ), - ], - ), - ), - ), - ) - assignment.evaluation_tasks.append( - ( - "task", - EvaluationTaskBlockFactory( - title="Qualität der Reflexion", - max_points=3, - description=RichText( - "Reflektiert die lernende Person die Durchführung der geleiteten Fallarbeit?" - ), - sub_tasks=ListValue( - ListBlock(EvaluationSubTaskBlock()), - values=[ - EvaluationSubTaskBlockFactory( - title="Die Reflexion bezieht sich auf die geleitete Fallarbeit und umfasst nachvollziehbare positive wie negative Aspekte.", - points=3, - ), - EvaluationSubTaskBlockFactory( - title="Die Reflexion bezieht sich auf die geleitete Fallarbeit und umfasst grösstenteils nachvollziehbare positive wie negative Aspekte.", - points=2, - ), - EvaluationSubTaskBlockFactory( - title="Die Reflexion ist unvollständig.", - points=1, - ), - EvaluationSubTaskBlockFactory( - title="Die Reflexion bezieht sich nicht auf die geleitete Fallarbeit.", - points=0, - ), - ], - ), - ), - ), - ) - assignment.evaluation_tasks.append( - ( - "task", - EvaluationTaskBlockFactory( - title="Eignung der Learnings", - max_points=3, - description=RichText( - "Leitet die lernende Person geeignete Learnings aus der Reflexion ab?" - ), - sub_tasks=ListValue( - ListBlock(EvaluationSubTaskBlock()), - values=[ - EvaluationSubTaskBlockFactory( - title="Die Learnings beziehen sich auf die geleitete Fallarbeit und sind inhaltlich sinnvoll.", - points=3, - ), - EvaluationSubTaskBlockFactory( - title="Die Learnings beziehen sich grösstenteils auf die geleitete Fallarbeit und sind inhaltlich sinnvoll.", - points=2, - ), - EvaluationSubTaskBlockFactory( - title="Die Learnings beziehen sich teilweise auf die geleitete Fallarbeit und sind inhaltlich wenig sinnvoll.", - points=1, - ), - EvaluationSubTaskBlockFactory( - title="Die Learnings beziehen sich nicht auf die geleitete Fallarbeit.", - points=0, - ), - ], - ), - ), - ), - ) - - assignment.tasks = [] - assignment.tasks.append( - ( - "task", - TaskBlockFactory( - title="Teilaufgabe 1: Beispiel einer Versicherungspolice finden", - # it is hard to create a StreamValue programmatically, we have to - # create a `StreamValue` manually. Ask Daniel and/or Ramon - content=StreamValue( - TaskContentStreamBlock(), - stream_data=[ - ( - "explanation", - ExplanationBlockFactory( - text=RichText( - "Bitte jemand aus deiner Familie oder deinem Freundeskreis darum, dir seine/ihre Motorfahrzeugversicherungspolice zur Verfügung zu stellen." - ) - ), - ), - ( - "user_confirmation", - ExplanationBlockFactory( - text=RichText( - "Ja, ich habe Motorfahrzeugversicherungspolice von jemandem aus meiner Familie oder meinem Freundeskreis erhalten." - ) - ), - ), - ], - ), - ), - ) - ) - - assignment.tasks.append( - ( - "task", - TaskBlockFactory( - title="Teilaufgabe 2: Kundensituation und Ausgangslage", - content=StreamValue( - TaskContentStreamBlock(), - stream_data=[ - ( - "explanation", - ExplanationBlockFactory( - text=RichText( - replace_whitespace( - """ - Erläutere die Kundensituation und die Ausgangslage. - - """ - ) - ) - ), - ), - ("user_text_input", UserTextInputBlockFactory()), - ], - ), - ), - ) - ) - - assignment.tasks.append( - ( - "task", - TaskBlockFactory( - title="Teilaufgabe 3: Aktuelle Versicherung", - # TODO: add document upload - content=StreamValue( - TaskContentStreamBlock(), - stream_data=[ - ( - "explanation", - ExplanationBlockFactory( - text=RichText( - "Zeige nun detailliert auf, wie dein Kundenbeispiel momentan versichert ist." - ) - ), - ), - ("user_text_input", UserTextInputBlockFactory()), - ], - ), - ), - ) - ) - - assignment.tasks.append( - ( - "task", - TaskBlockFactory( - title="Teilaufgabe 4: Deine Empfehlungen", - content=StreamValue( - TaskContentStreamBlock(), - stream_data=[ - ( - "explanation", - ExplanationBlockFactory( - text=RichText( - "Erarbeite nun basierend auf deinen Erkenntnissen eine Empfehlung für die Person." - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest? Begründe deine Empfehlung" - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Gibt es Deckungen, die du streichen würdest? Begründe deine Empfehlung." - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Wenn die Person gemäss deiner Einschätzung genau richtig versichert ist, argumentiere, warum dies der Fall ist." - ) - ), - ), - ], - ), - ), - ) - ) - - assignment.tasks.append( - ( - "task", - TaskBlockFactory( - title="Teilaufgabe 5: Reflexion", - content=StreamValue( - TaskContentStreamBlock(), - stream_data=[ - ( - "explanation", - ExplanationBlockFactory( - text=RichText( - "Reflektiere dein Handeln und halte deine Erkenntnisse fest. Frage dich dabei:" - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "War die Bearbeitung dieser geleiteten Fallarbeit erfolgreich? Begründe deine Einschätzung." - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Was ist dir bei der Bearbeitung des Auftrags gut gelungen?" - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Was ist dir bei der Bearbeitung des Auftrags weniger gut gelungen?" - ) - ), - ), - ], - ), - ), - ) - ) - - assignment.tasks.append( - ( - "task", - TaskBlockFactory( - title="Teilaufgabe 6: Learnings", - content=StreamValue( - TaskContentStreamBlock(), - stream_data=[ - ( - "explanation", - ExplanationBlockFactory( - text=RichText( - "Leite aus der Teilaufgabe 5 deine persönlichen Learnings ab." - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Was würdest du beim nächsten Mal anders machen?" - ) - ), - ), - ( - "user_text_input", - UserTextInputBlockFactory( - text=RichText( - "Was hast du beim Bearbeiten des Auftrags Neues gelernt?" - ) - ), - ), - ], - ), - ), - ) - ) - - assignment.save() - - return assignment - - def create_uk_prep_assignment(assignment_list_page, course_id=COURSE_UK): assignment = AssignmentFactory( parent=assignment_list_page, diff --git a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py index e58cbc79..fd0107d9 100644 --- a/server/vbv_lernwelt/assignment/tests/test_assignment_api.py +++ b/server/vbv_lernwelt/assignment/tests/test_assignment_api.py @@ -3,25 +3,29 @@ import json from django.utils import timezone from rest_framework.test import APITestCase +from vbv_lernwelt.assignment.creators.create_assignments import create_uk_casework from vbv_lernwelt.assignment.models import ( - Assignment, AssignmentCompletion, AssignmentCompletionAuditLog, ) +from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory from vbv_lernwelt.core.create_default_users import create_default_users from vbv_lernwelt.core.models import User from vbv_lernwelt.core.utils import find_first from vbv_lernwelt.course.consts import COURSE_TEST_ID from vbv_lernwelt.course.creators.test_course import create_test_course -from vbv_lernwelt.course.models import CourseSession, CourseSessionUser +from vbv_lernwelt.course.models import CoursePage, CourseSession, CourseSessionUser class AssignmentApiTestCase(APITestCase): def setUp(self) -> None: create_default_users() create_test_course(include_vv=False) - - self.assignment = Assignment.objects.first() + course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID) + assignment_list_page = AssignmentListPageFactory( + parent=course_page, + ) + self.assignment = create_uk_casework(assignment_list_page=assignment_list_page) self.assignment_subtasks = self.assignment.filter_user_subtasks() self.cs = CourseSession.objects.create( diff --git a/server/vbv_lernwelt/assignment/tests/test_services.py b/server/vbv_lernwelt/assignment/tests/test_services.py index 1370fdaf..33936a52 100644 --- a/server/vbv_lernwelt/assignment/tests/test_services.py +++ b/server/vbv_lernwelt/assignment/tests/test_services.py @@ -4,12 +4,13 @@ from django.test import TestCase from django.utils import timezone from rest_framework import serializers -from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment +from vbv_lernwelt.assignment.creators.create_assignments import create_uk_casework from vbv_lernwelt.assignment.models import ( AssignmentCompletion, AssignmentCompletionAuditLog, ) from vbv_lernwelt.assignment.services import update_assignment_completion +from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory 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 @@ -27,7 +28,10 @@ class UpdateAssignmentCompletionTestCase(TestCase): id=COURSE_TEST_ID, ) course_page = CoursePageFactory(course=course) - self.assignment = create_test_assignment() + assignment_list_page = AssignmentListPageFactory( + parent=course_page, + ) + self.assignment = create_uk_casework(assignment_list_page=assignment_list_page) self.course_session = CourseSession.objects.create( course_id=COURSE_TEST_ID, title="Bern 2022 a", diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py index 41328c20..07734ccc 100644 --- a/server/vbv_lernwelt/course/creators/test_course.py +++ b/server/vbv_lernwelt/course/creators/test_course.py @@ -6,9 +6,13 @@ from slugify import slugify from wagtail.models import Site from wagtail.rich_text import RichText -from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignment +from vbv_lernwelt.assignment.creators.create_assignments import ( + create_uk_casework, + create_uk_prep_assignment, +) from vbv_lernwelt.assignment.models import Assignment from vbv_lernwelt.assignment.services import update_assignment_completion +from vbv_lernwelt.assignment.tests.assignment_factories import AssignmentListPageFactory from vbv_lernwelt.competence.factories import ( CompetencePageFactory, CompetenceProfilePageFactory, @@ -63,7 +67,13 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False): create_test_competence_profile() if include_uk: - create_test_assignment() + # assignments + course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID) + assignment_list_page = AssignmentListPageFactory( + parent=course_page, + ) + create_uk_casework(assignment_list_page=assignment_list_page) + create_uk_prep_assignment(assignment_list_page=assignment_list_page) create_test_learning_path(include_uk=include_uk, include_vv=include_vv) create_test_media_library() @@ -230,7 +240,7 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst. assignment_type="PREP_ASSIGNMENT", parent=circle, content_assignment=Assignment.objects.get( - slug__startswith="überbetriebliche-kurse-assignment-fahrzeug-mein-erstes-auto" + slug__startswith="test-lehrgang-assignment-fahrzeug-mein-erstes-auto" ), ),