368 lines
12 KiB
Python
368 lines
12 KiB
Python
import json
|
|
|
|
import wagtail_factories
|
|
from django.conf import settings
|
|
from wagtail.models import Site
|
|
|
|
from vbv_lernwelt.competence.factories import (
|
|
CompetencePageFactory,
|
|
CompetenceProfilePageFactory,
|
|
PerformanceCriteriaFactory,
|
|
)
|
|
from vbv_lernwelt.competence.models import CompetencePage
|
|
from vbv_lernwelt.core.tests.helpers import create_locales_for_wagtail
|
|
from vbv_lernwelt.course.consts import COURSE_TEST_ID
|
|
from vbv_lernwelt.course.factories import CoursePageFactory
|
|
from vbv_lernwelt.course.models import Course, CourseCategory, CoursePage
|
|
from vbv_lernwelt.learnpath.models import LearningUnit
|
|
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
|
CircleFactory,
|
|
DocumentBlockFactory,
|
|
ExerciseBlockFactory,
|
|
LearningContentFactory,
|
|
LearningPathFactory,
|
|
LearningSequenceFactory,
|
|
LearningUnitFactory,
|
|
OnlineTrainingBlockFactory,
|
|
TestBlockFactory,
|
|
TopicFactory,
|
|
)
|
|
from vbv_lernwelt.media_library.tests.media_library_factories import (
|
|
create_external_link_block,
|
|
create_learn_media_block,
|
|
create_media_collection,
|
|
ExternalLinkBlockFactory,
|
|
LearnMediaBlockFactory,
|
|
MediaCategoryPageFactory,
|
|
MediaLibraryPageFactory,
|
|
)
|
|
|
|
|
|
def create_test_course():
|
|
create_locales_for_wagtail()
|
|
create_test_course_with_categories()
|
|
create_test_learning_path()
|
|
create_test_competence_profile()
|
|
create_test_media_library()
|
|
|
|
|
|
def create_test_course_with_categories(apps=None, schema_editor=None):
|
|
if apps is not None:
|
|
Course = apps.get_model("course", "Course")
|
|
CourseCategory = apps.get_model("course", "CourseCategory")
|
|
else:
|
|
# pylint: disable=import-outside-toplevel
|
|
from vbv_lernwelt.course.models import Course, CourseCategory
|
|
|
|
course, _ = Course.objects.get_or_create(
|
|
id=COURSE_TEST_ID, title="Test Lehrgang", category_name="Handlungsfeld"
|
|
)
|
|
|
|
CourseCategory.objects.get_or_create(course=course, title="Allgemein", general=True)
|
|
|
|
for cat in [
|
|
"Fahrzeug",
|
|
"Reisen",
|
|
]:
|
|
CourseCategory.objects.get_or_create(course=course, title=cat)
|
|
|
|
# create default course page
|
|
site = Site.objects.filter(is_default_site=True).first()
|
|
if not site:
|
|
site = wagtail_factories.SiteFactory(is_default_site=True)
|
|
|
|
if settings.APP_ENVIRONMENT == "development":
|
|
site.port = 8000
|
|
site.save()
|
|
|
|
course_page = CoursePageFactory(
|
|
title="Test Lehrgang",
|
|
parent=site.root_page,
|
|
course=course,
|
|
)
|
|
|
|
|
|
def create_test_learning_path(user=None, skip_locales=True):
|
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
|
lp = LearningPathFactory(title="Test Lernpfad", parent=course_page)
|
|
|
|
TopicFactory(title="Basis", is_visible=False, parent=lp)
|
|
|
|
circle_basis = CircleFactory(
|
|
title="Basis",
|
|
parent=lp,
|
|
description="Basis",
|
|
)
|
|
LearningSequenceFactory(
|
|
title="Starten", parent=circle_basis, icon="it-icon-ls-start"
|
|
)
|
|
LearningUnitFactory(title="Einführung", parent=circle_basis)
|
|
LearningContentFactory(
|
|
title="Einführung",
|
|
parent=circle_basis,
|
|
minutes=15,
|
|
contents=[("document", DocumentBlockFactory())],
|
|
)
|
|
LearningSequenceFactory(title="Beenden", parent=circle_basis, icon="it-icon-ls-end")
|
|
LearningUnitFactory(title="Beenden", parent=circle_basis)
|
|
LearningContentFactory(
|
|
title="Jetzt kann es losgehen!",
|
|
parent=circle_basis,
|
|
minutes=30,
|
|
contents=[("document", DocumentBlockFactory())],
|
|
)
|
|
|
|
TopicFactory(title="Beraten der Kunden", parent=lp)
|
|
|
|
circle = CircleFactory(
|
|
title="Analyse",
|
|
parent=lp,
|
|
description="Unit-Test Circle",
|
|
job_situations=[
|
|
("job_situation", "Autoversicherung"),
|
|
("job_situation", "Autokauf"),
|
|
],
|
|
goals=[
|
|
(
|
|
"goal",
|
|
"... die heutige Versicherungssituation von Privat- oder Geschäftskunden einzuschätzen.",
|
|
),
|
|
("goal", "... deinem Kunden seine optimale Lösung aufzuzeigen"),
|
|
],
|
|
experts=[
|
|
(
|
|
"person",
|
|
{
|
|
"last_name": "Huggel",
|
|
"first_name": "Patrizia",
|
|
"email": "patrizia.huggel@example.com",
|
|
},
|
|
),
|
|
],
|
|
)
|
|
|
|
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
|
|
LearningUnitFactory(title="Einführung", parent=circle)
|
|
LearningContentFactory(
|
|
title=f'Einleitung Circle "Analyse"',
|
|
parent=circle,
|
|
minutes=15,
|
|
contents=[("document", DocumentBlockFactory())],
|
|
)
|
|
|
|
LearningSequenceFactory(title="Beobachten", parent=circle, icon="it-icon-ls-watch")
|
|
lu = LearningUnitFactory(
|
|
title="Fahrzeug",
|
|
parent=circle,
|
|
course_category=CourseCategory.objects.get(
|
|
course_id=COURSE_TEST_ID, title="Fahrzeug"
|
|
),
|
|
)
|
|
LearningContentFactory(
|
|
title="Rafael Fasel wechselt sein Auto",
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[
|
|
(
|
|
"online_training",
|
|
OnlineTrainingBlockFactory(
|
|
description="In diesem Online-Training lernst du, wie du den Kundenbedarf ermittelst.",
|
|
url="",
|
|
),
|
|
)
|
|
],
|
|
)
|
|
LearningContentFactory(
|
|
title="Fachcheck Fahrzeug",
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[("test", TestBlockFactory())],
|
|
)
|
|
|
|
lu = LearningUnitFactory(
|
|
title="Reisen",
|
|
parent=circle,
|
|
course_category=CourseCategory.objects.get(
|
|
course_id=COURSE_TEST_ID, title="Reisen"
|
|
),
|
|
)
|
|
LearningContentFactory(
|
|
title="Reiseversicherung",
|
|
parent=circle,
|
|
minutes=240,
|
|
contents=[("exercise", ExerciseBlockFactory())],
|
|
)
|
|
LearningContentFactory(
|
|
title="Emma und Ayla campen durch Amerika",
|
|
parent=circle,
|
|
minutes=120,
|
|
contents=[
|
|
(
|
|
"exercise",
|
|
ExerciseBlockFactory(
|
|
url="/static/media/web_based_trainings/story-06-a-01-emma-und-ayla-campen-durch-amerika-einstieg/scormcontent/index.html"
|
|
),
|
|
)
|
|
],
|
|
)
|
|
|
|
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
|
|
LearningUnitFactory(title="Beenden", parent=circle)
|
|
LearningContentFactory(
|
|
title="KompetenzNavi anschauen",
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[("document", DocumentBlockFactory())],
|
|
)
|
|
LearningContentFactory(
|
|
title='Circle "Analyse" abschliessen',
|
|
parent=circle,
|
|
minutes=30,
|
|
contents=[("document", DocumentBlockFactory())],
|
|
)
|
|
|
|
|
|
def create_test_competence_profile():
|
|
course = Course.objects.get(id=COURSE_TEST_ID)
|
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
|
|
|
competence_profile_page = CompetenceProfilePageFactory(
|
|
title="KompetenzNavi",
|
|
parent=course_page,
|
|
)
|
|
|
|
competences = [
|
|
{
|
|
"competence_id": "X1",
|
|
"title": "Weiterempfehlung für Neukunden generieren",
|
|
"items": [
|
|
"Verhandlungsgeschick",
|
|
"Überzeugtes Auftreten",
|
|
],
|
|
},
|
|
{
|
|
"competence_id": "Y1",
|
|
"title": "Wünsche, Ziele und Bedürfnisse der Kunden im Gespräch ermitteln",
|
|
"items": [
|
|
"Gesprächsführung",
|
|
"Fragetechniken",
|
|
"Kundenpsychologie",
|
|
],
|
|
},
|
|
{
|
|
"competence_id": "Y2",
|
|
"title": "Analyse des Kundenbedarfs und des Kundenbedürfnisses durchführen",
|
|
"items": [
|
|
"Fragetechniken",
|
|
"Visuelle Hilfsmittel / Visualisierungstechniken",
|
|
],
|
|
},
|
|
]
|
|
|
|
for c in competences:
|
|
CompetencePageFactory(
|
|
parent=competence_profile_page,
|
|
competence_id=c["competence_id"],
|
|
title=c["title"],
|
|
items=[("item", i) for i in c["items"]],
|
|
)
|
|
|
|
PerformanceCriteriaFactory(
|
|
parent=CompetencePage.objects.get(competence_id="Y1"),
|
|
competence_id="Y1.3",
|
|
title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).",
|
|
learning_unit=LearningUnit.objects.get(
|
|
slug="test-lehrgang-lp-circle-analyse-lu-fahrzeug"
|
|
),
|
|
)
|
|
PerformanceCriteriaFactory(
|
|
parent=CompetencePage.objects.get(competence_id="Y2"),
|
|
competence_id="Y2.1",
|
|
title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die IST-Situation des Kunden mit der geeigneten Gesprächs-/Fragetechnik zu erfassen.",
|
|
learning_unit=LearningUnit.objects.get(
|
|
slug="test-lehrgang-lp-circle-analyse-lu-fahrzeug"
|
|
),
|
|
)
|
|
|
|
PerformanceCriteriaFactory(
|
|
parent=CompetencePage.objects.get(competence_id="Y1"),
|
|
competence_id="Y1.3",
|
|
title="Innerhalb des Handlungsfelds «Reisen» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).",
|
|
learning_unit=LearningUnit.objects.get(
|
|
slug="test-lehrgang-lp-circle-analyse-lu-reisen"
|
|
),
|
|
)
|
|
|
|
|
|
def create_test_media_library():
|
|
course = Course.objects.get(id=COURSE_TEST_ID)
|
|
course_page = CoursePage.objects.get(course_id=COURSE_TEST_ID)
|
|
|
|
media_lib_page = MediaLibraryPageFactory(
|
|
title="Mediathek",
|
|
parent=course_page,
|
|
)
|
|
|
|
icons = [
|
|
"icon-hf-fahrzeug",
|
|
"icon-hf-reisen",
|
|
"icon-hf-einkommenssicherung",
|
|
]
|
|
for idx, cat in enumerate(course.coursecategory_set.all()):
|
|
overview_icon = icons[(idx + 2) % len(icons)]
|
|
introduction_text = """
|
|
Das Auto ist für viele der grösste Stolz! Es birgt aber auch ein grosses Gefahrenpotenzial.
|
|
Dabei geht es bei den heutigen Fahrzeugpreisen und Reparaturkosten rasch um namhafte Summen,
|
|
die der Fahrzeugbesitzer und die Fahrzeugbesitzerin in einem grösseren Schadenfall oft nur schwer selbst aufbringen kann.""".strip()
|
|
description_title = "Das erwartet dich in diesem Handlungsfeld"
|
|
description_text = """
|
|
In diesem berufstypischem Handlungsfeld lernst du alles rund um Motorfahrzeugversicherungen,
|
|
wie man sein Auto optimal schützen kann, wie du vorgehst bei einem Fahrzeugwechsel,
|
|
welche Aspekte du bei einer Offerte beachten musst und wie du dem Kunden die Lösung präsentierst.""".strip()
|
|
items = [
|
|
("item", "Motorfahrzeughaftpflichtversicherung"),
|
|
("item", "Motorfahrzeugkaskoversicherung"),
|
|
("item", "Insassenunfallversicherung"),
|
|
]
|
|
body_data = json.dumps(
|
|
[
|
|
create_media_collection(
|
|
title="Lernmedien",
|
|
contents=[
|
|
create_learn_media_block(LearnMediaBlockFactory()),
|
|
create_learn_media_block(LearnMediaBlockFactory()),
|
|
create_learn_media_block(LearnMediaBlockFactory()),
|
|
create_learn_media_block(LearnMediaBlockFactory()),
|
|
],
|
|
),
|
|
create_media_collection(
|
|
title="Links",
|
|
contents=[
|
|
create_external_link_block(
|
|
ExternalLinkBlockFactory(
|
|
title="Nationales Versicherungsbüro",
|
|
url="https://www.vbv.ch/",
|
|
)
|
|
),
|
|
create_external_link_block(
|
|
ExternalLinkBlockFactory(
|
|
title="Adressen der Strassenverkehrsämter",
|
|
url="https://www.vbv.ch/",
|
|
)
|
|
),
|
|
],
|
|
),
|
|
]
|
|
)
|
|
media_category = MediaCategoryPageFactory(
|
|
overview_icon=overview_icon,
|
|
title=cat.title,
|
|
course_category=cat,
|
|
parent=media_lib_page,
|
|
introduction_text=introduction_text,
|
|
description_title=description_title,
|
|
description_text=description_text,
|
|
items=items,
|
|
body=body_data,
|
|
)
|