Make assignment creation more generic
This commit is contained in:
parent
0f0d1632a7
commit
321c57b709
|
|
@ -1,8 +1,5 @@
|
||||||
from wagtail.blocks import StreamValue
|
|
||||||
from wagtail.blocks.list_block import ListBlock, ListValue
|
|
||||||
from wagtail.rich_text import RichText
|
|
||||||
|
|
||||||
from vbv_lernwelt.assignment.models import (
|
from vbv_lernwelt.assignment.models import (
|
||||||
|
AssignmentListPage,
|
||||||
AssignmentType,
|
AssignmentType,
|
||||||
EvaluationSubTaskBlock,
|
EvaluationSubTaskBlock,
|
||||||
TaskContentStreamBlock,
|
TaskContentStreamBlock,
|
||||||
|
|
@ -18,9 +15,20 @@ from vbv_lernwelt.assignment.tests.assignment_factories import (
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.core.utils import replace_whitespace
|
from vbv_lernwelt.core.utils import replace_whitespace
|
||||||
from vbv_lernwelt.course.consts import COURSE_UK
|
from vbv_lernwelt.course.consts import COURSE_UK
|
||||||
|
from vbv_lernwelt.course.models import CoursePage
|
||||||
|
from wagtail.blocks import StreamValue
|
||||||
|
from wagtail.blocks.list_block import ListBlock, ListValue
|
||||||
|
from wagtail.rich_text import RichText
|
||||||
|
|
||||||
|
|
||||||
def create_uk_casework(assignment_list_page, course_id=COURSE_UK):
|
def create_uk_casework(course_id=COURSE_UK):
|
||||||
|
assignment_list_page = (
|
||||||
|
CoursePage.objects.get(course_id=course_id)
|
||||||
|
.get_children()
|
||||||
|
.exact_type(AssignmentListPage)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
assignment = AssignmentFactory(
|
assignment = AssignmentFactory(
|
||||||
parent=assignment_list_page,
|
parent=assignment_list_page,
|
||||||
title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
|
title="Überprüfen einer Motorfahrzeugs-Versicherungspolice",
|
||||||
|
|
@ -457,7 +465,14 @@ def create_uk_casework(assignment_list_page, course_id=COURSE_UK):
|
||||||
return assignment
|
return assignment
|
||||||
|
|
||||||
|
|
||||||
def create_uk_prep_assignment(assignment_list_page, course_id=COURSE_UK):
|
def create_uk_prep_assignment(course_id=COURSE_UK):
|
||||||
|
assignment_list_page = (
|
||||||
|
CoursePage.objects.get(course_id=course_id)
|
||||||
|
.get_children()
|
||||||
|
.exact_type(AssignmentListPage)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
assignment = AssignmentFactory(
|
assignment = AssignmentFactory(
|
||||||
parent=assignment_list_page,
|
parent=assignment_list_page,
|
||||||
assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
|
assignment_type=AssignmentType.PREP_ASSIGNMENT.name,
|
||||||
|
|
@ -765,11 +780,18 @@ def create_uk_prep_assignment(assignment_list_page, course_id=COURSE_UK):
|
||||||
return assignment
|
return assignment
|
||||||
|
|
||||||
|
|
||||||
def create_uk_reflection(assignment_list_page, course_id=COURSE_UK):
|
def create_uk_reflection(course_id=COURSE_UK, circle_title="Fahrzeug"):
|
||||||
|
assignment_list_page = (
|
||||||
|
CoursePage.objects.get(course_id=course_id)
|
||||||
|
.get_children()
|
||||||
|
.exact_type(AssignmentListPage)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
|
|
||||||
assignment = AssignmentFactory(
|
assignment = AssignmentFactory(
|
||||||
parent=assignment_list_page,
|
parent=assignment_list_page,
|
||||||
assignment_type=AssignmentType.REFLECTION.name,
|
assignment_type=AssignmentType.REFLECTION.name,
|
||||||
title="Reflexionsfragen - Fahrzeug",
|
title=f"{circle_title} - Reflexionsfragen",
|
||||||
effort_required="ca. 1 Stunde",
|
effort_required="ca. 1 Stunde",
|
||||||
intro_text=replace_whitespace(
|
intro_text=replace_whitespace(
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -8,24 +8,19 @@ from vbv_lernwelt.assignment.models import (
|
||||||
AssignmentCompletion,
|
AssignmentCompletion,
|
||||||
AssignmentCompletionAuditLog,
|
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.create_default_users import create_default_users
|
||||||
from vbv_lernwelt.core.models import User
|
from vbv_lernwelt.core.models import User
|
||||||
from vbv_lernwelt.core.utils import find_first
|
from vbv_lernwelt.core.utils import find_first
|
||||||
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
||||||
from vbv_lernwelt.course.creators.test_course import create_test_course
|
from vbv_lernwelt.course.creators.test_course import create_test_course
|
||||||
from vbv_lernwelt.course.models import CoursePage, CourseSession, CourseSessionUser
|
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
|
||||||
|
|
||||||
|
|
||||||
class AssignmentApiTestCase(APITestCase):
|
class AssignmentApiTestCase(APITestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
create_default_users()
|
create_default_users()
|
||||||
create_test_course(include_vv=False)
|
create_test_course(include_vv=False)
|
||||||
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
self.assignment = create_uk_casework(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.assignment_subtasks = self.assignment.filter_user_subtasks()
|
||||||
|
|
||||||
self.cs = CourseSession.objects.create(
|
self.cs = CourseSession.objects.create(
|
||||||
|
|
|
||||||
|
|
@ -4,34 +4,32 @@ from django.test import TestCase
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from vbv_lernwelt.assignment.creators.create_assignments import create_uk_casework
|
|
||||||
from vbv_lernwelt.assignment.models import (
|
from vbv_lernwelt.assignment.models import (
|
||||||
|
Assignment,
|
||||||
AssignmentCompletion,
|
AssignmentCompletion,
|
||||||
AssignmentCompletionAuditLog,
|
AssignmentCompletionAuditLog,
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.assignment.services import update_assignment_completion
|
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.create_default_users import create_default_users
|
||||||
from vbv_lernwelt.core.models import User
|
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.core.utils import find_first
|
||||||
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
||||||
from vbv_lernwelt.course.factories import CourseFactory, CoursePageFactory
|
from vbv_lernwelt.course.creators.test_course import create_test_course
|
||||||
from vbv_lernwelt.course.models import CourseSession
|
from vbv_lernwelt.course.models import CourseSession
|
||||||
|
from vbv_lernwelt.learnpath.models import LearningContentAssignment
|
||||||
|
|
||||||
|
|
||||||
class UpdateAssignmentCompletionTestCase(TestCase):
|
class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
create_default_users()
|
create_default_users()
|
||||||
create_locales_for_wagtail()
|
self.course = create_test_course(include_vv=False)
|
||||||
course = CourseFactory(
|
self.assignment = (
|
||||||
id=COURSE_TEST_ID,
|
self.course.coursepage.get_descendants()
|
||||||
|
.exact_type(Assignment)
|
||||||
|
.filter(assignment__assignment_type="CASEWORK")
|
||||||
|
.first()
|
||||||
|
.specific
|
||||||
)
|
)
|
||||||
course_page = CoursePageFactory(course=course)
|
|
||||||
assignment_list_page = AssignmentListPageFactory(
|
|
||||||
parent=course_page,
|
|
||||||
)
|
|
||||||
self.assignment = create_uk_casework(assignment_list_page=assignment_list_page)
|
|
||||||
self.course_session = CourseSession.objects.create(
|
self.course_session = CourseSession.objects.create(
|
||||||
course_id=COURSE_TEST_ID,
|
course_id=COURSE_TEST_ID,
|
||||||
title="Bern 2022 a",
|
title="Bern 2022 a",
|
||||||
|
|
@ -186,19 +184,22 @@ class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
|
|
||||||
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
||||||
ac.delete()
|
ac.delete()
|
||||||
self.user.delete()
|
self.user.delete()
|
||||||
|
self.course.coursepage.get_descendants().exact_type(
|
||||||
|
LearningContentAssignment
|
||||||
|
).delete()
|
||||||
self.assignment.delete()
|
self.assignment.delete()
|
||||||
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
||||||
self.assertEqual(acl.created_at.date(), date.today())
|
self.assertEqual(acl.created_at.date(), date.today())
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
self.assertIsNone(acl.assignment_user)
|
self.assertIsNone(acl.assignment_user)
|
||||||
self.assertIsNone(acl.assignment)
|
self.assertIsNone(acl.assignment)
|
||||||
|
|
@ -520,7 +521,7 @@ class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
trainer_input = acl.completion_data[evaluation_task["id"]]
|
trainer_input = acl.completion_data[evaluation_task["id"]]
|
||||||
self.assertDictEqual(
|
self.assertDictEqual(
|
||||||
|
|
@ -534,13 +535,16 @@ class UpdateAssignmentCompletionTestCase(TestCase):
|
||||||
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
# AssignmentCompletionAuditLog entry will remain event after deletion of foreign keys
|
||||||
ac.delete()
|
ac.delete()
|
||||||
self.user.delete()
|
self.user.delete()
|
||||||
|
self.course.coursepage.get_descendants().exact_type(
|
||||||
|
LearningContentAssignment
|
||||||
|
).delete()
|
||||||
self.assignment.delete()
|
self.assignment.delete()
|
||||||
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
acl = AssignmentCompletionAuditLog.objects.get(id=acl.id)
|
||||||
self.assertEqual(acl.created_at.date(), date.today())
|
self.assertEqual(acl.created_at.date(), date.today())
|
||||||
self.assertEqual(acl.assignment_user_email, "student")
|
self.assertEqual(acl.assignment_user_email, "student")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
acl.assignment_slug,
|
acl.assignment_slug,
|
||||||
"versicherungsvermittler-in-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
"test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice",
|
||||||
)
|
)
|
||||||
self.assertIsNone(acl.assignment_user)
|
self.assertIsNone(acl.assignment_user)
|
||||||
self.assertIsNone(acl.assignment)
|
self.assertIsNone(acl.assignment)
|
||||||
|
|
|
||||||
|
|
@ -67,13 +67,13 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False):
|
||||||
|
|
||||||
create_test_competence_profile()
|
create_test_competence_profile()
|
||||||
if include_uk:
|
if include_uk:
|
||||||
# assignments
|
# assignments create assignments parent page
|
||||||
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
||||||
assignment_list_page = AssignmentListPageFactory(
|
_assignment_list_page = AssignmentListPageFactory(
|
||||||
parent=course_page,
|
parent=course_page,
|
||||||
)
|
)
|
||||||
create_uk_casework(assignment_list_page=assignment_list_page)
|
create_uk_casework(course_id=COURSE_TEST_ID)
|
||||||
create_uk_prep_assignment(assignment_list_page=assignment_list_page)
|
create_uk_prep_assignment(course_id=COURSE_TEST_ID)
|
||||||
|
|
||||||
create_test_learning_path(include_uk=include_uk, include_vv=include_vv)
|
create_test_learning_path(include_uk=include_uk, include_vv=include_vv)
|
||||||
create_test_media_library()
|
create_test_media_library()
|
||||||
|
|
|
||||||
|
|
@ -59,3 +59,5 @@ def create_versicherungsvermittlerin_with_categories(
|
||||||
)
|
)
|
||||||
course.slug = course_page.slug
|
course.slug = course_page.slug
|
||||||
course.save()
|
course.save()
|
||||||
|
|
||||||
|
return course
|
||||||
|
|
|
||||||
|
|
@ -150,18 +150,17 @@ def create_versicherungsvermittlerin_course():
|
||||||
|
|
||||||
def create_course_uk_de():
|
def create_course_uk_de():
|
||||||
# Überbetriebliche Kurse DE
|
# Überbetriebliche Kurse DE
|
||||||
create_versicherungsvermittlerin_with_categories(
|
course = create_versicherungsvermittlerin_with_categories(
|
||||||
course_id=COURSE_UK, title="Überbetriebliche Kurse"
|
course_id=COURSE_UK, title="Überbetriebliche Kurse"
|
||||||
)
|
)
|
||||||
|
|
||||||
# assignments
|
# assignments create assignments parent page
|
||||||
course_page = CoursePage.objects.get(course_id=COURSE_UK)
|
_assignment_list_page = AssignmentListPageFactory(
|
||||||
assignment_list_page = AssignmentListPageFactory(
|
parent=course.coursepage,
|
||||||
parent=course_page,
|
|
||||||
)
|
)
|
||||||
create_uk_casework(assignment_list_page, course_id=COURSE_UK)
|
create_uk_casework(course_id=COURSE_UK)
|
||||||
create_uk_prep_assignment(assignment_list_page, course_id=COURSE_UK)
|
create_uk_prep_assignment(course_id=COURSE_UK)
|
||||||
create_uk_reflection(assignment_list_page, course_id=COURSE_UK)
|
create_uk_reflection(course_id=COURSE_UK)
|
||||||
|
|
||||||
# learning path
|
# learning path
|
||||||
create_uk_learning_path(course_id=COURSE_UK)
|
create_uk_learning_path(course_id=COURSE_UK)
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||||
LearningContentFeedbackFactory,
|
LearningContentFeedbackFactory,
|
||||||
LearningContentMediaLibraryFactory,
|
LearningContentMediaLibraryFactory,
|
||||||
LearningContentPlaceholderFactory,
|
LearningContentPlaceholderFactory,
|
||||||
|
LearningContentRichTextFactory,
|
||||||
LearningPathFactory,
|
LearningPathFactory,
|
||||||
LearningSequenceFactory,
|
LearningSequenceFactory,
|
||||||
LearningUnitFactory,
|
LearningUnitFactory,
|
||||||
|
|
@ -230,9 +231,21 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
|
||||||
)
|
)
|
||||||
LearningUnitFactory(title="Vorbereitung", parent=circle)
|
LearningUnitFactory(title="Vorbereitung", parent=circle)
|
||||||
LearningContentPlaceholderFactory(
|
LearningContentRichTextFactory(
|
||||||
title="Verschaffe dir einen Überblick",
|
title="Verschaffe dir einen Überblick",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
|
text=RichText(
|
||||||
|
"""
|
||||||
|
<h3>Arbeitsblätter «Vorbereitungsauftrag»</h3>
|
||||||
|
<p>Handlungskompetenz d2: Informations-und Beratungsgespräch mit Kunden oder Lieferanten führen</p>
|
||||||
|
<p>Arbeitssituation 4: Kunden beraten und dazugehörige Prozesse abwickeln</p>
|
||||||
|
<p>Die Kaufleute führen Bedarfserhebungen für Kunden durch und schlagen ihnen angemessene Versicherungslösungen vor. Sie führen Beratungs-und Verkaufsgespräche und erteilen Auskünfte. Sieführen Kundenaufträge aus und behandeln Beschwerden. Sie formulieren Aufträge an relevante Anspruchsgruppen und unterstützen den Aussendient in verkaufsrelevanten Belangen.</p>
|
||||||
|
<ul>
|
||||||
|
<li>d2.pv.ük3: Sie erläutern die Leistungen und Produkte im Versicherungsbereich. (K2)</li>
|
||||||
|
<li>d2pv.ük4: Sie erläutern die Prozesse und Abläufe im privaten Versicherungsbereich. (K2)</li>
|
||||||
|
</ul>
|
||||||
|
"""
|
||||||
|
),
|
||||||
)
|
)
|
||||||
LearningContentMediaLibraryFactory(
|
LearningContentMediaLibraryFactory(
|
||||||
title=f"Handlungsfeld «{title}»",
|
title=f"Handlungsfeld «{title}»",
|
||||||
|
|
@ -274,7 +287,7 @@ damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
|
||||||
assignment_type="REFLECTION",
|
assignment_type="REFLECTION",
|
||||||
parent=circle,
|
parent=circle,
|
||||||
content_assignment=Assignment.objects.get(
|
content_assignment=Assignment.objects.get(
|
||||||
slug__startswith="überbetriebliche-kurse-assignment-reflexionsfragen-fahrzeug"
|
slug__startswith="überbetriebliche-kurse-assignment-fahrzeug-reflexionsfragen"
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
LearningContentAssignmentFactory(
|
LearningContentAssignmentFactory(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue