Fix cypress tests
This commit is contained in:
parent
726d5dc9bd
commit
d1907182a3
|
|
@ -54,7 +54,7 @@ async function startEvaluation() {
|
|||
</p>
|
||||
|
||||
<p class="my-4">
|
||||
Die Gesamtpunktzahl und die daruas resultierende Note wird auf Grund des
|
||||
Die Gesamtpunktzahl und die daraus resultierende Note wird auf Grund des
|
||||
hinterlegeten Beurteilungsinstrument berechnet.
|
||||
</p>
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,9 @@ export function userAssignmentPoints(
|
|||
});
|
||||
|
||||
return sum(
|
||||
// transform the object of { [expert_id]: { expert_data: { points } } } to an array
|
||||
// of [ [expert_id, { expert_data: { points } }], ... ] so that we can easily sum
|
||||
// the points of the user
|
||||
Object.entries(pick(assignmentCompletion.completion_data, evaluationTaskIds)).map(
|
||||
(entry) => {
|
||||
return entry[1]?.expert_data?.points ?? 0;
|
||||
|
|
|
|||
|
|
@ -1,16 +1,12 @@
|
|||
import { login } from "./helpers";
|
||||
|
||||
const navigateToAssignment = () => {
|
||||
cy.visit(
|
||||
"/course/überbetriebliche-kurse/learn/fahrzeug/überprüfen-einer-motorfahrzeug-versicherungspolice"
|
||||
);
|
||||
};
|
||||
|
||||
describe("assignment completion", () => {
|
||||
describe("student test", () => {
|
||||
beforeEach(() => {
|
||||
cy.manageCommand("cypress_reset");
|
||||
login("admin", "test");
|
||||
navigateToAssignment();
|
||||
login("test-student1@example.com", "test");
|
||||
cy.visit(
|
||||
"/course/test-lehrgang/learn/fahrzeug/überprüfen-einer-motorfahrzeug-versicherungspolice"
|
||||
);
|
||||
});
|
||||
|
||||
it("can open assignment", () => {
|
||||
|
|
@ -46,10 +42,7 @@ describe("assignment completion", () => {
|
|||
);
|
||||
// Click confirmation
|
||||
cy.get('[data-cy="it-checkbox-confirmation-1"]').click({ force: true });
|
||||
cy.wait(250);
|
||||
cy.reload();
|
||||
// 1 Step forward
|
||||
cy.learningContentMultiLayoutNextStep();
|
||||
cy.get('[data-cy="it-checkbox-confirmation-1"]').should("be.checked");
|
||||
});
|
||||
|
||||
|
|
@ -64,12 +57,10 @@ describe("assignment completion", () => {
|
|||
cy.get('[data-cy="it-textarea-user-text-input-1"]')
|
||||
.clear()
|
||||
.type("Hallovelo");
|
||||
// wait because of input debounce
|
||||
cy.wait(550);
|
||||
cy.reload();
|
||||
|
||||
// 2 Step forward
|
||||
cy.learningContentMultiLayoutNextStep();
|
||||
cy.learningContentMultiLayoutNextStep();
|
||||
cy.get('[data-cy="it-textarea-user-text-input-1"]').should(
|
||||
"have.value",
|
||||
"Hallovelo"
|
||||
|
|
@ -456,6 +456,8 @@ def create_uk_assignments(course_id=COURSE_UK):
|
|||
|
||||
assignment.save()
|
||||
|
||||
return assignment
|
||||
|
||||
|
||||
def create_test_assignment(course_id=COURSE_TEST_ID):
|
||||
course_page = CoursePage.objects.get(course_id=course_id)
|
||||
|
|
@ -494,6 +496,185 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
|||
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(
|
||||
"""
|
||||
<ul>
|
||||
<li>Worum geht es? Was ist die Aufgabe?</li>
|
||||
<li>Sind das Kundenprofil und die Kundenbeziehung vollständig und nachvollziehbar dargestellt?</li>
|
||||
<li>Ist das Alter des Fahrzeugs dokumentiert?</li>
|
||||
<li>Welche Ressourcen stehen zur Verfügung?</li>
|
||||
</ul>
|
||||
"""
|
||||
)
|
||||
),
|
||||
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(
|
||||
(
|
||||
|
|
@ -501,14 +682,16 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
|||
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
|
||||
# create a `StreamValue` manually. Ask Daniel and/or Ramon
|
||||
content=StreamValue(
|
||||
TaskContentStreamBlock(),
|
||||
stream_data=[
|
||||
(
|
||||
"explanation",
|
||||
ExplanationBlockFactory(
|
||||
text=RichText("Dies ist ein Beispieltext.")
|
||||
text=RichText(
|
||||
"Bitte jemand aus deiner Familie oder deinem Freundeskreis darum, dir seine/ihre Motorfahrzeugversicherungspolice zur Verfügung zu stellen."
|
||||
)
|
||||
),
|
||||
),
|
||||
(
|
||||
|
|
@ -710,185 +893,6 @@ def create_test_assignment(course_id=COURSE_TEST_ID):
|
|||
)
|
||||
)
|
||||
|
||||
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(
|
||||
"""
|
||||
<ul>
|
||||
<li>Worum geht es? Was ist die Aufgabe?</li>
|
||||
<li>Sind das Kundenprofil und die Kundenbeziehung vollständig und nachvollziehbar dargestellt?</li>
|
||||
<li>Ist das Alter des Fahrzeugs dokumentiert?</li>
|
||||
<li>Welche Ressourcen stehen zur Verfügung?</li>
|
||||
</ul>
|
||||
"""
|
||||
)
|
||||
),
|
||||
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.save()
|
||||
|
||||
return assignment
|
||||
|
|
|
|||
|
|
@ -230,6 +230,23 @@ def create_default_users(user_model=User, group_model=Group, default_password=No
|
|||
language="fr",
|
||||
)
|
||||
|
||||
# users for cypress tests
|
||||
_create_student_user(
|
||||
email="test-trainer1@example.com",
|
||||
first_name="Test",
|
||||
last_name="Trainer1",
|
||||
)
|
||||
_create_student_user(
|
||||
email="test-student1@example.com",
|
||||
first_name="Test",
|
||||
last_name="Student1",
|
||||
)
|
||||
_create_student_user(
|
||||
email="test-student2@example.com",
|
||||
first_name="Test",
|
||||
last_name="Student2",
|
||||
)
|
||||
|
||||
|
||||
def _get_or_create_user(user_model, *args, **kwargs):
|
||||
username = kwargs.get("username", None)
|
||||
|
|
|
|||
|
|
@ -13,10 +13,18 @@ from vbv_lernwelt.competence.factories import (
|
|||
PerformanceCriteriaFactory,
|
||||
)
|
||||
from vbv_lernwelt.competence.models import CompetencePage
|
||||
from vbv_lernwelt.core.models import User
|
||||
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, CourseSession
|
||||
from vbv_lernwelt.course.models import (
|
||||
Course,
|
||||
CourseCategory,
|
||||
CoursePage,
|
||||
CourseSession,
|
||||
CourseSessionUser,
|
||||
)
|
||||
from vbv_lernwelt.learnpath.models import Circle
|
||||
from vbv_lernwelt.learnpath.tests.learning_path_factories import (
|
||||
AssignmentBlockFactory,
|
||||
AttendanceDayBlockFactory,
|
||||
|
|
@ -55,15 +63,40 @@ def create_test_course(include_uk=True, include_vv=True, with_sessions=False):
|
|||
|
||||
if with_sessions:
|
||||
# course sessions
|
||||
CourseSession.objects.create(
|
||||
cs_bern = CourseSession.objects.create(
|
||||
course_id=COURSE_TEST_ID,
|
||||
title="Bern 2022 a",
|
||||
)
|
||||
CourseSession.objects.create(
|
||||
cs_zurich = CourseSession.objects.create(
|
||||
course_id=COURSE_TEST_ID,
|
||||
title="Zürich 2022 a",
|
||||
)
|
||||
|
||||
trainer1 = User.objects.get(email="test-trainer1@example.com")
|
||||
csu = CourseSessionUser.objects.create(
|
||||
course_session=cs_bern,
|
||||
user=trainer1,
|
||||
role=CourseSessionUser.Role.EXPERT,
|
||||
)
|
||||
csu.expert.add(Circle.objects.get(slug="test-lehrgang-lp-circle-fahrzeug"))
|
||||
|
||||
student1 = User.objects.get(email="test-student1@example.com")
|
||||
_csu = CourseSessionUser.objects.create(
|
||||
course_session=cs_bern,
|
||||
user=student1,
|
||||
)
|
||||
|
||||
student2 = User.objects.get(email="test-student2@example.com")
|
||||
_csu = CourseSessionUser.objects.create(
|
||||
course_session=cs_bern,
|
||||
user=student2,
|
||||
)
|
||||
student2 = User.objects.get(email="test-student2@example.com")
|
||||
_csu = CourseSessionUser.objects.create(
|
||||
course_session=cs_zurich,
|
||||
user=student2,
|
||||
)
|
||||
|
||||
return course
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue