Merged in feature/refactor-test-course (pull request #57)

Feature/refactor test course
This commit is contained in:
Daniel Egger 2023-04-14 08:40:09 +00:00
commit a3feadc364
12 changed files with 540 additions and 207 deletions

View File

@ -5,77 +5,59 @@ describe("circle page", () => {
cy.manageCommand("cypress_reset");
login("admin", "test");
cy.visit("/course/test-lehrgang/learn/analyse");
cy.visit("/course/test-lehrgang/learn/fahrzeug");
});
it("can open circle page", () => {
cy.get('[data-cy="circle-title"]').should("contain", "Analyse");
cy.get('[data-cy="circle-title"]').should("contain", "Fahrzeug");
});
it("can toggle learning content", () => {
cy.get('[data-cy="circle-title"]').should("contain", "Analyse");
cy.get('[data-cy="circle-title"]').should("contain", "Fahrzeug");
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lc-einleitung-circle-analyse-checkbox"] > .cy-checkbox'
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug-checkbox"] > .cy-checkbox'
).click();
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lc-einleitung-circle-analyse-checkbox"] > .cy-checkbox-checked'
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
// completion data should still be there after reload
cy.reload();
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lc-einleitung-circle-analyse-checkbox"] > .cy-checkbox-checked'
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
});
it("can open learning contents and complete them by continuing", () => {
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"] > div'
).should("have.class", "self-evaluation-unknown");
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lc-rafael-fasel-wechselt-sein-auto"]'
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-überblick"]'
).click();
cy.get('[data-cy="ln-title"]').should(
"contain",
"Rafael Fasel wechselt sein Auto"
"Verschaffe dir einen Überblick"
);
cy.get('[data-cy="complete-and-continue"]').click();
cy.get('[data-cy="ls-continue-button"]').click();
cy.get('[data-cy="ln-title"]').should("contain", "Fachcheck Fahrzeug");
cy.get('[data-cy="ln-title"]').should("contain", "Mediathek Fahrzeug");
cy.get('[data-cy="complete-and-continue"]').click();
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]').click();
cy.get('[data-cy="ln-title"]').should(
"contain",
"Selbsteinschätzung Fahrzeug"
);
cy.get('[data-cy="success"]').click();
cy.get('[data-cy="next-step"]').click();
cy.get('[data-cy="success"]').click();
cy.get('[data-cy="complete-and-continue"]').click();
cy.get('[data-cy="ln-title"]').should(
"contain",
"Selbsteinschätzung Fahrzeug"
);
cy.get('[data-cy="success"]').click();
cy.get('[data-cy="complete-and-continue"]').click();
cy.get('[data-cy="ls-continue-button"]').click();
cy.get('[data-cy="ln-title"]').should("contain", "Vorbereitungsauftrag");
cy.get('[data-cy="complete-and-continue"]').click();
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lc-rafael-fasel-wechselt-sein-auto-checkbox"] > .cy-checkbox-checked'
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-überblick-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lc-fachcheck-fahrzeug-checkbox"] > .cy-checkbox-checked'
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
cy.get(
'[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"] > div'
).should("have.class", "self-evaluation-success");
'[data-cy="test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag-checkbox"] > .cy-checkbox-checked'
).should("have.class", "cy-checkbox-checked");
});
it("continue button works", () => {
@ -84,23 +66,20 @@ describe("circle page", () => {
cy.get('[data-cy="ln-title"]').should(
"contain",
'Einleitung Circle "Analyse"'
"Verschaffe dir einen Überblick"
);
cy.get('[data-cy="complete-and-continue"]').click();
cy.get('[data-cy="ls-continue-button"]').should("contain", "Weiter geht's");
cy.get('[data-cy="ls-continue-button"]').click();
cy.get('[data-cy="ln-title"]').should(
"contain",
"Rafael Fasel wechselt sein Auto"
);
cy.get('[data-cy="ln-title"]').should("contain", "Mediathek Fahrzeug");
});
it("can open learning content by url", () => {
cy.visit("/course/test-lehrgang/learn/analyse/reiseversicherung");
cy.get('[data-cy="ln-title"]').should("contain", "Reiseversicherung");
cy.visit("/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug");
cy.get('[data-cy="ln-title"]').should("contain", "Mediathek Fahrzeug");
cy.get('[data-cy="close-learning-content"]').click();
cy.get('[data-cy="circle-title"]').should("contain", "Analyse");
cy.get('[data-cy="circle-title"]').should("contain", "Fahrzeug");
});
});

View File

@ -6,37 +6,37 @@ describe("Competence", () => {
login("admin", "test");
// test-lehrgang-lp-circle-analyse-lu-fahrzeug ist eine Selbstevaluation
// test-lehrgang-lp-circle-reisen-lu-reisen ist eine Selbstevaluation
// mit mehreren Schritten
cy.visit("/course/test-lehrgang/learn/analyse");
cy.visit("/course/test-lehrgang/learn/reisen");
});
it("self evaluation should be neutral", () => {
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]')
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]')
.find('[data-cy="unknown"]')
.should("exist");
});
it("should be able to make a happy self evaluation", () => {
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]').click();
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]').click();
cy.makeSelfEvaluation([true, true]);
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]')
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]')
.find('[data-cy="success"]')
.should("exist");
});
it("should be able to make a fail self evaluation", () => {
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]').click();
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]').click();
cy.makeSelfEvaluation([false, false]);
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]')
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]')
.find('[data-cy="fail"]')
.should("exist");
});
it("should be able to make a mixed self evaluation", () => {
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]').click();
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]').click();
cy.makeSelfEvaluation([false, true]);
cy.get('[data-cy="test-lehrgang-lp-circle-analyse-lu-fahrzeug"]')
cy.get('[data-cy="test-lehrgang-lp-circle-reisen-lu-reisen"]')
.find('[data-cy="fail"]')
.should("exist");
});

View File

@ -8,7 +8,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_UK
from vbv_lernwelt.course.consts import COURSE_TEST_ID, COURSE_UK
from vbv_lernwelt.course.models import CoursePage
from wagtail.blocks import StreamValue
@ -283,3 +283,275 @@ def create_uk_assignments(course_id=COURSE_UK):
)
assignment.save()
def create_test_assignments(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",
starting_position=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."
),
),
],
assessment_document_url="https://www.vbv.ch",
assessment_description="Diese geleitete Fallarbeit wird auf Grund des folgenden Beurteilungsintrument bewertet.",
)
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 the Daniel and/or Ramon
content=StreamValue(
TaskContentStreamBlock(),
stream_data=[
(
"explanation",
ExplanationBlockFactory(text="Dies ist ein Beispieltext."),
),
(
"user_confirmation",
ExplanationBlockFactory(
text="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=replace_whitespace(
"""
Erläutere die Kundensituation und die Ausgangslage.
* Hast du alle Informationen, die du für den Policen-Check benötigst?
* Halte die wichtigsten Eckwerte des aktuellen Versicherungsverhältnisse in deiner Dokumentation fest (z.B wie lang wo versichert, Alter des Fahrzeugs, Kundenprofil, etc.)
"""
)
),
),
("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=replace_whitespace(
"""
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=replace_whitespace(
"""
Erarbeite nun basierend auf deinen Erkenntnissen eine Empfehlung für die Person.
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
Gibt es zusätzliche Deckungen, die du der Person empfehlen würdest? Begründe deine Empfehlung
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
Gibt es Deckungen, die du streichen würdest? Begründe deine Empfehlung.
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
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=replace_whitespace(
"""
Reflektiere dein Handeln und halte deine Erkenntnisse fest. Frage dich dabei:
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
War die Bearbeitung dieser geleiteten Fallarbeit erfolgreich? Begründe deine Einschätzung.
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
Was ist dir bei der Bearbeitung des Auftrags gut gelungen?
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
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=replace_whitespace(
"""
Leite aus der Teilaufgabe 5 deine persönlichen Learnings ab.
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
Was würdest du beim nächsten Mal anders machen?
"""
)
),
),
(
"user_text_input",
UserTextInputBlockFactory(
text=replace_whitespace(
"""
Was hast du beim Bearbeiten des Auftrags Neues gelernt?
"""
)
),
),
],
),
),
)
)
assignment.save()

View File

@ -9,7 +9,7 @@ from vbv_lernwelt.course.creators.test_course import create_test_course
class CompetenceAPITestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
create_test_course(include_uk=False)
self.user = User.objects.get(username="admin")
self.client.login(username="admin", password="test")
@ -23,6 +23,6 @@ class CompetenceAPITestCase(APITestCase):
self.assertEqual(competence_profile.title, data["title"])
self.assertEqual(
"Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).",
"Ich bin fähig zu Reisen eine Gesprächsführung zu machen",
data["children"][1]["children"][0]["title"],
)

View File

@ -2,8 +2,11 @@ import json
import wagtail_factories
from django.conf import settings
from slugify import slugify
from wagtail.models import Site
from vbv_lernwelt.assignment.creators.create_assignments import create_test_assignments
from vbv_lernwelt.assignment.models import Assignment
from vbv_lernwelt.competence.factories import (
CompetencePageFactory,
CompetenceProfilePageFactory,
@ -13,20 +16,20 @@ 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.course.models import Course, CourseCategory, CoursePage, CourseSession
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
AssignmentBlockFactory,
AttendanceDayBlockFactory,
CircleFactory,
DocumentBlockFactory,
ExerciseBlockFactory,
FeedbackBlockFactory,
LearningContentFactory,
LearningModuleBlockFactory,
LearningPathFactory,
LearningSequenceFactory,
LearningUnitFactory,
OnlineTrainingBlockFactory,
TestBlockFactory,
MediaLibraryBlockFactory,
TopicFactory,
VideoBlockFactory,
)
from vbv_lernwelt.media_library.tests.media_library_factories import (
create_external_link_block,
@ -39,13 +42,28 @@ from vbv_lernwelt.media_library.tests.media_library_factories import (
)
def create_test_course():
def create_test_course(include_uk=True, include_vv=True, with_sessions=False):
create_locales_for_wagtail()
create_test_course_with_categories()
create_test_learning_path()
create_test_competence_profile()
if include_uk:
create_test_assignments()
create_test_learning_path(include_uk=include_uk, include_vv=include_vv)
create_test_media_library()
if with_sessions:
# course sessions
CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Bern 2022 a",
)
CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Zürich 2022 a",
)
def create_test_course_with_categories(apps=None, schema_editor=None):
if apps is not None:
@ -85,122 +103,216 @@ def create_test_course_with_categories(apps=None, schema_editor=None):
course.save()
def create_test_learning_path(user=None, skip_locales=True):
def create_test_learning_path(include_uk=True, include_vv=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)
if include_uk:
TopicFactory(title="Circle ÜK", is_visible=False, parent=lp)
create_test_uk_circle_fahrzeug(lp, title="Fahrzeug")
circle_basis = CircleFactory(
title="Basis",
if include_vv:
TopicFactory(title="Circle VV", is_visible=False, parent=lp)
create_test_circle_reisen(lp)
def create_test_uk_circle_fahrzeug(lp, title="Fahrzeug"):
circle = CircleFactory(
title=title,
parent=lp,
description="Basis",
description="""
In diesem Circle erfährst du wie der Lehrgang aufgebaut ist.
Zudem lernst du die wichtigsten Grundlagen,
damit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.
""".strip(),
)
LearningSequenceFactory(
title="Starten", parent=circle_basis, icon="it-icon-ls-start"
title="Vorbereitung", parent=circle, icon="it-icon-ls-start"
)
LearningUnitFactory(title="Einführung", parent=circle_basis)
lu = LearningUnitFactory(title="Vorbereitung", parent=circle)
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",
)
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
LearningUnitFactory(title="Einführung", parent=circle)
LearningContentFactory(
title=f'Einleitung Circle "Analyse"',
title="Verschaffe dir einen Überblick",
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",
title=f"Mediathek {title}",
parent=circle,
minutes=30,
contents=[
(
"online_training",
OnlineTrainingBlockFactory(
description="In diesem Online-Training lernst du, wie du den Kundenbedarf ermittelst.",
url="",
"media_library",
MediaLibraryBlockFactory(
url=f"/media/überbetriebliche-kurse-media/category/{slugify(title)}"
),
)
],
)
LearningContentFactory(
title="Fachcheck Fahrzeug",
title="Vorbereitungsauftrag",
parent=circle,
minutes=30,
contents=[("test", TestBlockFactory())],
)
lu = LearningUnitFactory(
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id="X1"),
competence_id="X1.1",
title="Innerhalb des Handlungsfelds «Fahrzeug» bin ich fähig, die Ziele und Pläne des Kunden zu ergründen (SOLL).",
learning_unit=lu,
)
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id="X1"),
competence_id="X1.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=lu,
)
LearningSequenceFactory(title="Training", parent=circle)
LearningUnitFactory(title="Unterlagen", parent=circle)
LearningContentFactory(
title="Unterlagen für den Unterricht",
parent=circle,
)
LearningUnitFactory(title="Präsenztag", parent=circle)
LearningContentFactory(
title="Präsenztag Fahrzeug",
parent=circle,
contents=[
(
"attendance_day",
AttendanceDayBlockFactory(),
)
],
)
LearningUnitFactory(title="Kompetenznachweis", parent=circle)
LearningContentFactory(
title="Wissens- und Verständnisfragen",
parent=circle,
)
LearningSequenceFactory(title="Transfer", parent=circle, icon="it-icon-ls-end")
LearningUnitFactory(title="Transfer", parent=circle)
LearningContentFactory(
title="Reflexion",
parent=circle,
)
LearningContentFactory(
title="Überprüfen einer Motorfahrzeug-Versicherungspolice",
parent=circle,
contents=[
(
"assignment",
AssignmentBlockFactory(
assignment=Assignment.objects.get(
slug__startswith="test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs"
)
),
)
],
)
LearningContentFactory(
title="Feedback",
parent=circle,
contents=[
(
"feedback",
FeedbackBlockFactory(),
)
],
)
def create_test_circle_reisen(lp):
circle = CircleFactory(
title="Reisen",
parent=lp,
)
LearningSequenceFactory(title="Starten", parent=circle, icon="it-icon-ls-start")
LearningUnitFactory(title="Einführung", parent=circle)
LearningContentFactory(
title="Verschaff dir einen Überblick",
parent=circle,
contents=[
(
"video",
VideoBlockFactory(
url="https://player.vimeo.com/video/772512710?h=30f912f15a",
description="Willkommen im Lehrgang Versicherungsvermitler VBV",
),
)
],
)
LearningContentFactory(
title=f"Mediathek Reisen",
parent=circle,
contents=[
(
"media_library",
MediaLibraryBlockFactory(
url=f"/media/test-lehrgang-media/category/reisen"
),
)
],
)
LearningSequenceFactory(title="Analyse", parent=circle)
# analyse
lu = LearningUnitFactory(
title="Bedarfsanalyse, Ist- und Soll-Situation",
parent=circle,
course_category=CourseCategory.objects.get(
course_id=COURSE_TEST_ID, title="Reisen"
),
)
LearningContentFactory(
title="Reiseversicherung",
title="Emma und Ayla campen durch Amerika - Analyse",
parent=circle,
minutes=240,
contents=[("exercise", ExerciseBlockFactory())],
)
LearningContentFactory(
title="Emma und Ayla campen durch Amerika",
parent=circle,
minutes=120,
contents=[
(
"learningmodule",
LearningModuleBlockFactory(
url="/static/media/web_based_trainings/story-06-a-01-emma-und-ayla-campen-durch-amerika-einstieg/scormcontent/index.html"
url="https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
),
)
],
)
LearningSequenceFactory(title="Beenden", parent=circle, icon="it-icon-ls-end")
LearningUnitFactory(title="Beenden", parent=circle)
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id="Y1"),
competence_id=f"Y1.1",
title=f"Ich bin fähig zu Reisen eine Gesprächsführung zu machen",
learning_unit=lu,
)
PerformanceCriteriaFactory(
parent=CompetencePage.objects.get(competence_id="Y2"),
competence_id=f"Y2.1",
title=f"Ich bin fähig zu Reisen eine Analyse zu machen",
learning_unit=lu,
)
# transfer
parent = circle
LearningSequenceFactory(title="Transfer", parent=parent, icon="it-icon-ls-end")
LearningUnitFactory(title="Transfer, Reflexion, Feedback", parent=parent)
LearningContentFactory(
title="KompetenzNavi anschauen",
parent=circle,
minutes=30,
contents=[("document", DocumentBlockFactory())],
title="Auswandern: Woran muss ich denken?",
parent=parent,
)
LearningContentFactory(
title='Circle "Analyse" abschliessen',
parent=circle,
minutes=30,
contents=[("document", DocumentBlockFactory())],
title=f"Fachcheck Reisen",
parent=parent,
)
LearningContentFactory(
title="Reflexion",
parent=parent,
)
LearningContentFactory(
title="Feedback",
parent=parent,
contents=[
(
"feedback",
FeedbackBlockFactory(),
)
],
)
@ -249,32 +361,6 @@ def create_test_competence_profile():
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)

View File

@ -67,13 +67,7 @@ def command(course):
create_course_uk_fr()
if COURSE_TEST_ID in course:
create_test_course()
# course sessions
CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Test Lehrgang Session",
)
create_test_course(with_sessions=True)
def create_versicherungsvermittlerin_course():

View File

@ -17,7 +17,7 @@ from vbv_lernwelt.learnpath.models import LearningContent
class CourseCompletionApiTestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
create_test_course(include_uk=False)
self.user = User.objects.get(username="admin")
self.cs = CourseSession.objects.create(
course_id=COURSE_TEST_ID,
@ -30,7 +30,7 @@ class CourseCompletionApiTestCase(APITestCase):
self.client.login(username="admin", password="test")
def test_completeLearningContent_works(self):
learning_content = LearningContent.objects.get(title="Fachcheck Fahrzeug")
learning_content = LearningContent.objects.get(title="Fachcheck Reisen")
learning_content_key = str(learning_content.translation_key)
mark_url = f"/api/course/completion/mark/"

View File

@ -12,7 +12,7 @@ from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
class CourseCompletionApiTestCase(APITestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
create_test_course(include_uk=False)
self.user = User.objects.get(username="student")

View File

@ -30,7 +30,7 @@ class DocumentUploadApiTestCase(APITestCase):
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(Circle.objects.get(slug="test-lehrgang-lp-circle-analyse"))
csu.expert.add(Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug"))
_csu = CourseSessionUser.objects.create(
course_session=self.course_session,
@ -52,7 +52,7 @@ class DocumentUploadApiTestCase(APITestCase):
@override_settings(FILE_UPLOAD_STORAGE="s3")
def test_can_start_upload(self):
ls = LearningSequence.objects.get(
slug="test-lehrgang-lp-circle-analyse-ls-beobachten"
slug="test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung"
)
self.test_data["learning_sequence"] = ls.id
@ -78,7 +78,7 @@ class DocumentUploadApiTestCase(APITestCase):
def test_cannot_start_upload_in_other_circle(self):
ls = LearningSequence.objects.get(
slug="test-lehrgang-lp-circle-basis-ls-starten"
slug="test-lehrgang-lp-circle-reisen-ls-analyse"
)
self.test_data["learning_sequence"] = ls.id
response = self.client.post(f"/api/core/document/start/", self.test_data)
@ -88,7 +88,7 @@ class DocumentUploadApiTestCase(APITestCase):
def test_student_cannot_start_uploads(self):
self.client.login(username="student", password="test")
ls = LearningSequence.objects.get(
slug="test-lehrgang-lp-circle-basis-ls-starten"
slug="test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung"
)
self.test_data["learning_sequence"] = ls.id
response = self.client.post(f"/api/core/document/start/", self.test_data)
@ -97,7 +97,7 @@ class DocumentUploadApiTestCase(APITestCase):
def test_expert_can_finish_own_upload(self):
ls = LearningSequence.objects.get(
slug="test-lehrgang-lp-circle-analyse-ls-beobachten"
slug="test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung"
)
self.test_data["learning_sequence"] = ls.id
response = self.client.post(f"/api/core/document/start/", self.test_data)
@ -135,7 +135,7 @@ class DocumentUploadApiTestCase(APITestCase):
def test_can_delete_document(self):
ls = LearningSequence.objects.get(
slug="test-lehrgang-lp-circle-analyse-ls-beobachten"
slug="test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung"
)
file = UploadFile(
original_file_name="test.pdf",
@ -169,7 +169,7 @@ class DocumentUploadApiTestCase(APITestCase):
def test_student_cannot_delete_document(self):
self.client.login(username="student", password="test")
ls = LearningSequence.objects.get(
slug="test-lehrgang-lp-circle-analyse-ls-beobachten"
slug="test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung"
)
file = UploadFile(
original_file_name="test.pdf",

View File

@ -30,7 +30,7 @@ class FeedbackApiBaseTestCase(APITestCase):
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(Circle.objects.get(slug="test-lehrgang-lp-circle-analyse"))
csu.expert.add(Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug"))
_csu = CourseSessionUser.objects.create(
course_session=self.course_session,
@ -58,7 +58,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
user=expert,
role=CourseSessionUser.Role.EXPERT,
)
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-reisen")
csu.expert.add(basis_circle)
FeedbackFactory(circle=basis_circle, course_session=csu.course_session).save()
@ -81,7 +81,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
user=expert,
role=CourseSessionUser.Role.EXPERT,
)
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-reisen")
csu.expert.add(basis_circle)
feedback = FeedbackFactory(
@ -100,26 +100,26 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
self.assertEqual(len(Notification.objects.all()), 0)
def test_can_get_feedback_summary_for_circles(self):
number_basis_feedback = 5
number_analyse_feedback = 10
number_reisen_feedback = 5
number_fahrzeug_feedback = 10
csu = CourseSessionUser.objects.get(
course_session=self.course_session,
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
analyse_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
csu.expert.add(basis_circle)
fahrzeug_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug")
reisen_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-reisen")
csu.expert.add(reisen_circle)
for i in range(number_basis_feedback):
for i in range(number_reisen_feedback):
FeedbackFactory(
circle=basis_circle, course_session=csu.course_session
circle=reisen_circle, course_session=csu.course_session
).save()
for i in range(number_analyse_feedback):
for i in range(number_fahrzeug_feedback):
FeedbackFactory(
circle=analyse_circle, course_session=csu.course_session
circle=fahrzeug_circle, course_session=csu.course_session
).save()
response = self.client.get(
@ -128,8 +128,8 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
self.assertEqual(response.status_code, 200)
expected = [
{"circle_id": basis_circle.id, "count": number_basis_feedback},
{"circle_id": analyse_circle.id, "count": number_analyse_feedback},
{"circle_id": fahrzeug_circle.id, "count": number_fahrzeug_feedback},
{"circle_id": reisen_circle.id, "count": number_reisen_feedback},
]
self.assertEqual(response.data, expected)
@ -142,17 +142,17 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
analyse_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
basis_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
fahrzeug_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug")
reisen_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-reisen")
for i in range(number_basis_feedback):
FeedbackFactory(
circle=basis_circle, course_session=csu.course_session
circle=reisen_circle, course_session=csu.course_session
).save()
for i in range(number_analyse_feedback):
FeedbackFactory(
circle=analyse_circle, course_session=csu.course_session
circle=fahrzeug_circle, course_session=csu.course_session
).save()
response = self.client.get(
@ -161,7 +161,7 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
self.assertEqual(response.status_code, 200)
expected = [
{"circle_id": analyse_circle.id, "count": number_analyse_feedback},
{"circle_id": fahrzeug_circle.id, "count": number_analyse_feedback},
]
self.assertEqual(response.data, expected)
@ -171,8 +171,10 @@ class FeedbackSummaryApiTestCase(FeedbackApiBaseTestCase):
course_session=self.course_session,
user=self.user,
)
analyse_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
FeedbackFactory(circle=analyse_circle, course_session=csu.course_session).save()
fahrzeug_circle = Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug")
FeedbackFactory(
circle=fahrzeug_circle, course_session=csu.course_session
).save()
response = self.client.get(
f"/api/core/feedback/{csu.course_session.course.id}/summary/"
@ -202,7 +204,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
user=User.objects.get(username="patrizia.huggel@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
circle = Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug")
for i in range(3):
FeedbackFactory(
@ -249,7 +251,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
role=CourseSessionUser.Role.EXPERT,
)
circle = Circle.objects.get(slug="test-lehrgang-lp-circle-basis")
circle = Circle.objects.get(slug="test-lehrgang-lp-circle-reisen")
FeedbackFactory(circle=circle, course_session=csu.course_session).save()
response = self.client.get(
@ -265,7 +267,7 @@ class FeedbackDetailApiTestCase(FeedbackApiBaseTestCase):
course_session=self.course_session,
user=self.user,
)
circle = Circle.objects.get(slug="test-lehrgang-lp-circle-analyse")
circle = Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug")
FeedbackFactory(circle=circle, course_session=csu.course_session).save()
response = self.client.get(

View File

@ -28,7 +28,7 @@ class TestRetrieveLearingPathContents(APITestCase):
# topics and circles
self.assertEqual(4, len(data["children"]))
# circle "analyse" contents
self.assertEqual(14, len(data["children"][3]["children"]))
self.assertEqual(13, len(data["children"][3]["children"]))
def test_normalUser_withoutCourseSession_cannotAccess(self):
self.user = User.objects.get(username="student")

View File

@ -8,12 +8,12 @@ from vbv_lernwelt.learnpath.models import LearningContent
class SaveSlugTestCase(TestCase):
def setUp(self) -> None:
create_default_users()
create_test_course()
create_test_course(include_uk=False)
def test_save_willHandleSlug(self):
lc_fachcheck = LearningContent.objects.get(title="Fachcheck Fahrzeug")
lc_fachcheck = LearningContent.objects.get(title="Fachcheck Reisen")
self.assertEqual(
lc_fachcheck.slug, "test-lehrgang-lp-circle-analyse-lc-fachcheck-fahrzeug"
lc_fachcheck.slug, "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen"
)
# only changing minutes should not change slug
@ -21,7 +21,7 @@ class SaveSlugTestCase(TestCase):
lc_fachcheck.save()
lc_fachcheck = LearningContent.objects.get(id=lc_fachcheck.id)
self.assertEqual(
lc_fachcheck.slug, "test-lehrgang-lp-circle-analyse-lc-fachcheck-fahrzeug"
lc_fachcheck.slug, "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen"
)
# changing title should change slug
@ -29,5 +29,5 @@ class SaveSlugTestCase(TestCase):
lc_fachcheck.save()
lc_fachcheck = LearningContent.objects.get(id=lc_fachcheck.id)
self.assertEqual(
lc_fachcheck.slug, "test-lehrgang-lp-circle-analyse-lc-fachcheck-foobar"
lc_fachcheck.slug, "test-lehrgang-lp-circle-reisen-lc-fachcheck-foobar"
)