Fix cypress tests

This commit is contained in:
Daniel Egger 2023-10-14 12:34:51 +02:00
parent bfda331e47
commit 00357ad4f3
13 changed files with 27 additions and 491 deletions

View File

@ -10,6 +10,7 @@ import { useCourseSessionsStore } from "@/stores/courseSessions";
import { useUserStore } from "@/stores/user"; import { useUserStore } from "@/stores/user";
import type { import type {
ActionCompetence, ActionCompetence,
Course,
CourseCompletion, CourseCompletion,
CourseCompletionStatus, CourseCompletionStatus,
CourseSession, CourseSession,
@ -148,6 +149,7 @@ export function flatCircles(learningPath: LearningPathType) {
export function useLearningPath(courseSlug: string) { export function useLearningPath(courseSlug: string) {
const learningPath = ref<LearningPathType | undefined>(undefined); const learningPath = ref<LearningPathType | undefined>(undefined);
const actionCompetences = ref<ActionCompetence[]>([]); const actionCompetences = ref<ActionCompetence[]>([]);
const course = ref<Course | undefined>(undefined);
// urql.useQuery is not meant to be used programmatically, so we use graphqlClient.query instead // urql.useQuery is not meant to be used programmatically, so we use graphqlClient.query instead
const resultPromise = graphqlClient const resultPromise = graphqlClient
@ -155,6 +157,7 @@ export function useLearningPath(courseSlug: string) {
.toPromise(); .toPromise();
resultPromise.then((result) => { resultPromise.then((result) => {
course.value = result.data?.course as Course;
actionCompetences.value = result.data?.course actionCompetences.value = result.data?.course
?.action_competences as ActionCompetence[]; ?.action_competences as ActionCompetence[];
learningPath.value = result.data?.course?.learning_path as LearningPathType; learningPath.value = result.data?.course?.learning_path as LearningPathType;
@ -264,6 +267,7 @@ export function useLearningPath(courseSlug: string) {
return { return {
resultPromise, resultPromise,
course,
learningPath, learningPath,
actionCompetences, actionCompetences,
circles, circles,
@ -336,11 +340,11 @@ export function useLearningPathWithCompletion(
} }
function calcNextLearningContent(completionData: CourseCompletion[]) { function calcNextLearningContent(completionData: CourseCompletion[]) {
const lastCompleted = findLastCompletedLearningContent(completionData);
if (lastCompleted) {
const flatLearningContents = (courseResult.circles.value ?? []).flatMap((c) => { const flatLearningContents = (courseResult.circles.value ?? []).flatMap((c) => {
return circleFlatLearningContents(c); return circleFlatLearningContents(c);
}); });
const lastCompleted = findLastCompletedLearningContent(completionData);
if (lastCompleted) {
const lastCompletedIndex = flatLearningContents.findIndex((lc) => { const lastCompletedIndex = flatLearningContents.findIndex((lc) => {
return lc.id === lastCompleted.id; return lc.id === lastCompleted.id;
}); });
@ -349,6 +353,8 @@ export function useLearningPathWithCompletion(
} else { } else {
nextLearningContent.value = undefined; nextLearningContent.value = undefined;
} }
} else {
nextLearningContent.value = flatLearningContents[0];
} }
} }

View File

@ -20,7 +20,7 @@ const documents = {
"\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument, "\n query assignmentCompletionQuery(\n $assignmentId: ID!\n $courseSessionId: ID!\n $learningContentId: ID\n $assignmentUserId: UUID\n ) {\n assignment(id: $assignmentId) {\n assignment_type\n needs_expert_evaluation\n max_points\n content_type\n effort_required\n evaluation_description\n evaluation_document_url\n evaluation_tasks\n id\n intro_text\n performance_objectives\n slug\n tasks\n title\n translation_key\n competence_certificate {\n ...CoursePageFields\n }\n }\n assignment_completion(\n assignment_id: $assignmentId\n course_session_id: $courseSessionId\n assignment_user_id: $assignmentUserId\n learning_content_page_id: $learningContentId\n ) {\n id\n completion_status\n submitted_at\n evaluation_submitted_at\n evaluation_user {\n id\n }\n assignment_user {\n id\n }\n evaluation_points\n evaluation_max_points\n evaluation_passed\n edoniq_extended_time_flag\n completion_data\n task_completion_data\n }\n }\n": types.AssignmentCompletionQueryDocument,
"\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument, "\n query competenceCertificateQuery($courseSlug: String!, $courseSessionId: ID!) {\n competence_certificate_list(course_slug: $courseSlug) {\n ...CoursePageFields\n competence_certificates {\n ...CoursePageFields\n assignments {\n ...CoursePageFields\n assignment_type\n max_points\n completion(course_session_id: $courseSessionId) {\n id\n completion_status\n submitted_at\n evaluation_points\n evaluation_max_points\n evaluation_passed\n }\n learning_content {\n ...CoursePageFields\n circle {\n id\n title\n slug\n }\n }\n }\n }\n }\n }\n": types.CompetenceCertificateQueryDocument,
"\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument, "\n query courseSessionDetail($courseSessionId: ID!) {\n course_session(id: $courseSessionId) {\n id\n title\n course {\n id\n title\n slug\n }\n users {\n id\n user_id\n first_name\n last_name\n email\n avatar_url\n role\n circles {\n id\n title\n slug\n }\n }\n attendance_courses {\n id\n location\n trainer\n due_date {\n id\n start\n end\n }\n learning_content_id\n learning_content {\n id\n title\n circle {\n id\n title\n slug\n }\n }\n }\n assignments {\n id\n submission_deadline {\n id\n start\n }\n evaluation_deadline {\n id\n start\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n edoniq_tests {\n id\n deadline {\n id\n start\n end\n }\n learning_content {\n id\n title\n content_assignment {\n id\n title\n assignment_type\n }\n }\n }\n }\n }\n": types.CourseSessionDetailDocument,
"\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument, "\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n": types.CourseQueryDocument,
"\n mutation SendFeedbackMutation(\n $courseSessionId: ID!\n $learningContentId: ID!\n $data: GenericScalar!\n $submitted: Boolean\n ) {\n send_feedback(\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n data: $data\n submitted: $submitted\n ) {\n feedback_response {\n id\n data\n submitted\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument, "\n mutation SendFeedbackMutation(\n $courseSessionId: ID!\n $learningContentId: ID!\n $data: GenericScalar!\n $submitted: Boolean\n ) {\n send_feedback(\n course_session_id: $courseSessionId\n learning_content_page_id: $learningContentId\n data: $data\n submitted: $submitted\n ) {\n feedback_response {\n id\n data\n submitted\n }\n errors {\n field\n messages\n }\n }\n }\n": types.SendFeedbackMutationDocument,
}; };
@ -69,7 +69,7 @@ export function graphql(source: "\n query courseSessionDetail($courseSessionId:
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n"]; export function graphql(source: "\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n"): (typeof documents)["\n query courseQuery($slug: String!) {\n course(slug: $slug) {\n id\n title\n slug\n category_name\n action_competences {\n competence_id\n ...CoursePageFields\n performance_criteria {\n competence_id\n learning_unit {\n id\n slug\n evaluate_url\n }\n ...CoursePageFields\n }\n }\n learning_path {\n ...CoursePageFields\n topics {\n is_visible\n ...CoursePageFields\n circles {\n description\n goals\n ...CoursePageFields\n learning_sequences {\n icon\n ...CoursePageFields\n learning_units {\n evaluate_url\n ...CoursePageFields\n performance_criteria {\n ...CoursePageFields\n }\n learning_contents {\n can_user_self_toggle_course_completion\n content_url\n minutes\n description\n ...CoursePageFields\n ... on LearningContentAssignmentObjectType {\n assignment_type\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentEdoniqTestObjectType {\n checkbox_text\n has_extended_time_test\n content_assignment {\n id\n }\n competence_certificate {\n ...CoursePageFields\n }\n }\n ... on LearningContentRichTextObjectType {\n text\n }\n }\n }\n }\n }\n }\n }\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

File diff suppressed because one or more lines are too long

View File

@ -197,6 +197,7 @@ export const COURSE_QUERY = graphql(`
query courseQuery($slug: String!) { query courseQuery($slug: String!) {
course(slug: $slug) { course(slug: $slug) {
id id
title
slug slug
category_name category_name
action_competences { action_competences {

View File

@ -113,7 +113,12 @@ const evaluationUser = computed(() => {
</div> </div>
</section> </section>
<div v-if="!props.assignmentCompletion.evaluation_passed"> <div
v-if="
props.assignmentCompletion.completion_status === 'EVALUATION_SUBMITTED' &&
!props.assignmentCompletion.evaluation_passed
"
>
<span class="my-2 rounded-md bg-error-red-200 px-2.5 py-0.5"> <span class="my-2 rounded-md bg-error-red-200 px-2.5 py-0.5">
{{ $t("a.Nicht Bestanden") }} {{ $t("a.Nicht Bestanden") }}
</span> </span>

View File

@ -142,7 +142,7 @@ const onSubmit = async () => {
data-cy="confirm-submit-person" data-cy="confirm-submit-person"
@toggle="state.confirmPerson = !state.confirmPerson" @toggle="state.confirmPerson = !state.confirmPerson"
></ItCheckbox> ></ItCheckbox>
<div class="flex flex-row items-center pb-6 pl-[49px]"> <div class="flex flex-row items-center pb-6 pl-[49px]" v-if="circleExpert">
<img <img
alt="Notification icon" alt="Notification icon"
class="mr-2 h-[45px] min-w-[45px] rounded-full" class="mr-2 h-[45px] min-w-[45px] rounded-full"

View File

@ -9,7 +9,7 @@ const props = defineProps<{
<template> <template>
<router-link <router-link
class="btn-blue mt-2 pl-6" class="btn-blue mt-2 pl-6"
:to="nextLearningContent?.continueUrl ?? '/hello'" :to="nextLearningContent?.continueUrl ?? '/'"
data-cy="lp-continue-button" data-cy="lp-continue-button"
translate translate
> >

View File

@ -26,6 +26,7 @@ const selectedView = ref<ViewType>(
const lpQueryResult = useLearningPathWithCompletion(props.courseSlug); const lpQueryResult = useLearningPathWithCompletion(props.courseSlug);
const learningPath = computed(() => lpQueryResult.learningPath.value); const learningPath = computed(() => lpQueryResult.learningPath.value);
const course = computed(() => lpQueryResult.course.value);
const circlesCount = computed(() => { const circlesCount = computed(() => {
return lpQueryResult.circles.value?.length ?? 0; return lpQueryResult.circles.value?.length ?? 0;
@ -59,7 +60,7 @@ const changeViewType = (viewType: ViewType) => {
{{ $t("learningPathPage.welcomeBack") }} {{ $t("learningPathPage.welcomeBack") }}
</p> </p>
<h2 data-cy="learning-path-title"> <h2 data-cy="learning-path-title">
{{ learningPath?.title }} {{ course?.title }}
</h2> </h2>
</div> </div>

View File

@ -1,15 +0,0 @@
import type { WagtailCircle } from "@/types";
import { describe, it } from "vitest";
import { OldCircle } from "../oldCircle";
import data from "./learning_path_json.json";
describe("Circle.parseJson", () => {
it("can parse circle from api response", () => {
const cirleData = data.children.find(
(c) => c.slug === "test-lehrgang-lp-circle-fahrzeug"
) as unknown as WagtailCircle;
const circle = OldCircle.fromJson(cirleData, undefined);
expect(circle.learningSequences.length).toBe(3);
expect(circle.flatLearningContents.length).toBe(9);
});
});

View File

@ -1,15 +0,0 @@
import { describe, it } from "vitest";
import { LearningPath } from "../learningPath";
import data from "./learning_path_json.json";
describe("LearningPath.parseJson", () => {
it("can parse learning sequences from api response", () => {
const learningPath = LearningPath.fromJson(data, [], undefined);
expect(learningPath.circles.length).toBe(2);
expect(learningPath.circles[0].title).toBe("Fahrzeug");
expect(learningPath.circles[1].title).toBe("Reisen");
expect(learningPath.topics.length).toBe(2);
});
});

View File

@ -1,447 +0,0 @@
{
"id": 10,
"title": "Test Lernpfad",
"slug": "test-lehrgang-lp",
"content_type": "learnpath.LearningPath",
"translation_key": "9cf4fea4-9d6f-4297-ab99-68a65bf07bb5",
"frontend_url": "/course/test-lehrgang/learn",
"children": [
{
"id": 11,
"title": "Circle \u00dcK",
"slug": "test-lehrgang-lp-topic-circle-\u00fck",
"content_type": "learnpath.Topic",
"translation_key": "983f97f7-fd68-4678-860f-7a19bab0b94d",
"frontend_url": "",
"is_visible": false
},
{
"id": 12,
"title": "Fahrzeug",
"slug": "test-lehrgang-lp-circle-fahrzeug",
"content_type": "learnpath.Circle",
"translation_key": "0286b096-2a55-4242-a277-ba15d478b79a",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug",
"children": [
{
"id": 13,
"title": "Vorbereitung",
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-vorbereitung",
"content_type": "learnpath.LearningSequence",
"translation_key": "dbc0e05f-a899-4524-b021-39a97ac1c542",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-vorbereitung",
"icon": "it-icon-ls-start"
},
{
"id": 14,
"title": "Vorbereitung",
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-vorbereitung",
"content_type": "learnpath.LearningUnit",
"translation_key": "626d656a-15d6-49ce-8b20-c035482802cd",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-vorbereitung",
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/vorbereitung",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": [
{
"id": 18,
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die Ziele und Pl\u00e4ne des Kunden zu ergr\u00fcnden (SOLL).",
"slug": "test-lehrgang-competence-crit-x11-allgemein",
"content_type": "competence.PerformanceCriteria",
"translation_key": "d49be54d-51e5-4bf4-9238-365006c3b95d",
"frontend_url": "",
"competence_id": "X1.1"
},
{
"id": 19,
"title": "Innerhalb des Handlungsfelds \u00abFahrzeug\u00bb bin ich f\u00e4hig, die IST-Situation des Kunden mit der geeigneten Gespr\u00e4chs-/Fragetechnik zu erfassen.",
"slug": "test-lehrgang-competence-crit-x11-allgemein-1",
"content_type": "competence.PerformanceCriteria",
"translation_key": "2fb68d58-3ab7-4192-865c-1e67ab9bcd15",
"frontend_url": "",
"competence_id": "X1.1"
}
]
},
{
"id": 15,
"title": "Verschaffe dir einen \u00dcberblick",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-verschaffe-dir-einen-\u00fcberblick",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "47698ce1-0e4f-446d-a23d-8a9e9c906ff7",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/verschaffe-dir-einen-\u00fcberblick",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 16,
"title": "Mediathek Fahrzeug",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-mediathek-fahrzeug",
"content_type": "learnpath.LearningContentMediaLibrary",
"translation_key": "34e79a3b-c1f9-49ff-b779-0149d614f02c",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/mediathek-fahrzeug",
"minutes": 15,
"description": "",
"content_url": "/media/\u00fcberbetriebliche-kurse-media/category/fahrzeug"
},
{
"id": 17,
"title": "Vorbereitungsauftrag",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-vorbereitungsauftrag",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "8feca9cd-4937-4406-b44d-564f341e8bfe",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/vorbereitungsauftrag",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 20,
"title": "Training",
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-training",
"content_type": "learnpath.LearningSequence",
"translation_key": "b09f87c7-01fb-4967-98c1-894ac3144595",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-training",
"icon": "it-icon-ls-apply"
},
{
"id": 21,
"title": "Unterlagen",
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-unterlagen",
"content_type": "learnpath.LearningUnit",
"translation_key": "772d5352-87fa-46a7-8470-368d59565d3a",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-unterlagen",
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/unterlagen",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": []
},
{
"id": 22,
"title": "Unterlagen f\u00fcr den Unterricht",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-unterlagen-f\u00fcr-den-unterricht",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "ace9f1e8-5cb7-4b7c-b1c8-d43f2e4f7269",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/unterlagen-f\u00fcr-den-unterricht",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 23,
"title": "Pr\u00e4senztag",
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-pr\u00e4senztag",
"content_type": "learnpath.LearningUnit",
"translation_key": "18bc5d1d-ddcf-4e54-b58c-58f1e8833af2",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-pr\u00e4senztag",
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/pr\u00e4senztag",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": []
},
{
"id": 24,
"title": "Pr\u00e4senztag Fahrzeug",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-pr\u00e4senztag-fahrzeug",
"content_type": "learnpath.LearningContentAttendanceCourse",
"translation_key": "2441afae-83ea-4fb5-a938-8db4352ed6c5",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/pr\u00e4senztag-fahrzeug",
"minutes": 15,
"description": "Platzhalter Beschreibung",
"content_url": ""
},
{
"id": 25,
"title": "Kompetenznachweis",
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-kompetenznachweis",
"content_type": "learnpath.LearningUnit",
"translation_key": "b115d4e0-f487-4d03-a7cf-08d90bb4813d",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-kompetenznachweis",
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/kompetenznachweis",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": []
},
{
"id": 26,
"title": "Wissens- und Verst\u00e4ndnisfragen",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verst\u00e4ndnisfragen",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "053c32bd-6174-444b-95fe-35ad2e15edf5",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/wissens-und-verst\u00e4ndnisfragen",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 27,
"title": "Transfer",
"slug": "test-lehrgang-lp-circle-fahrzeug-ls-transfer",
"content_type": "learnpath.LearningSequence",
"translation_key": "58939dc7-dd19-4996-b4bf-aba348be092a",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#ls-transfer",
"icon": "it-icon-ls-end"
},
{
"id": 28,
"title": "Transfer",
"slug": "test-lehrgang-lp-circle-fahrzeug-lu-transfer",
"content_type": "learnpath.LearningUnit",
"translation_key": "185568d3-9ba3-433d-9480-4f492d9d3235",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug#lu-transfer",
"evaluate_url": "/course/test-lehrgang/learn/fahrzeug/evaluate/transfer",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": []
},
{
"id": 29,
"title": "Reflexion",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-reflexion",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "c62d4cf6-2505-40f7-8764-41fa1ea0057c",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/reflexion",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 30,
"title": "\u00dcberpr\u00fcfen einer Motorfahrzeug-Versicherungspolice",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
"content_type": "learnpath.LearningContentAssignment",
"translation_key": "53cc2b76-ea59-47a2-a15a-ebf19897e9b1",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/\u00fcberpr\u00fcfen-einer-motorfahrzeug-versicherungspolice",
"minutes": 15,
"description": "",
"content_url": "",
"content_assignment_id": 9
},
{
"id": 31,
"title": "Feedback",
"slug": "test-lehrgang-lp-circle-fahrzeug-lc-feedback",
"content_type": "learnpath.LearningContentFeedback",
"translation_key": "d78bded2-a760-492c-9249-283230d98ce0",
"frontend_url": "/course/test-lehrgang/learn/fahrzeug/feedback",
"minutes": 15,
"description": "",
"content_url": ""
}
],
"description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist.\nZudem lernst du die wichtigsten Grundlagen,\ndamit du erfolgreich mit deinem Lernpfad (durch-)starten kannst.",
"goals": "\n <p class=\"mt-4\">In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.</p>\n <p class=\"mt-4\">Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Umgang mit den sozialen Medien und Datenschutz</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungswirtschaft</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungsrecht</li>\n </ul>\n <p class=\"mt-4\">Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:</p>\n <h3>Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb</h3>\n <p class=\"mt-4\">Ich bin f\u00e4hig, \u2026</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.3. \u2026 die Inhalte compliant zu halten</li>\n </ul>\n "
},
{
"id": 32,
"title": "Circle VV",
"slug": "test-lehrgang-lp-topic-circle-vv",
"content_type": "learnpath.Topic",
"translation_key": "19611237-22e1-40e6-b5b1-a34ff470df14",
"frontend_url": "",
"is_visible": false
},
{
"id": 33,
"title": "Reisen",
"slug": "test-lehrgang-lp-circle-reisen",
"content_type": "learnpath.Circle",
"translation_key": "2aaf0215-693a-407c-9f1c-bdb80f982c92",
"frontend_url": "/course/test-lehrgang/learn/reisen",
"children": [
{
"id": 34,
"title": "Starten",
"slug": "test-lehrgang-lp-circle-reisen-ls-starten",
"content_type": "learnpath.LearningSequence",
"translation_key": "e4b0eac3-3a7c-435f-8151-f69c40b35fd6",
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-starten",
"icon": "it-icon-ls-start"
},
{
"id": 35,
"title": "Einf\u00fchrung",
"slug": "test-lehrgang-lp-circle-reisen-lu-einf\u00fchrung",
"content_type": "learnpath.LearningUnit",
"translation_key": "9f0d6302-d058-4f93-b08e-9dbd4b8b8ed3",
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-einf\u00fchrung",
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/einf\u00fchrung",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": []
},
{
"id": 36,
"title": "Verschaff dir einen \u00dcberblick",
"slug": "test-lehrgang-lp-circle-reisen-lc-verschaff-dir-einen-\u00fcberblick",
"content_type": "learnpath.LearningContentVideo",
"translation_key": "e666b414-175f-439d-9dfd-e1c434a8cc0e",
"frontend_url": "/course/test-lehrgang/learn/reisen/verschaff-dir-einen-\u00fcberblick",
"minutes": 15,
"description": "Willkommen im Lehrgang Versicherungsvermitler VBV",
"content_url": "https://player.vimeo.com/video/772512710?h=30f912f15a"
},
{
"id": 37,
"title": "Mediathek Reisen",
"slug": "test-lehrgang-lp-circle-reisen-lc-mediathek-reisen",
"content_type": "learnpath.LearningContentMediaLibrary",
"translation_key": "3b4cae41-185f-40f2-86c0-f96057214ada",
"frontend_url": "/course/test-lehrgang/learn/reisen/mediathek-reisen",
"minutes": 15,
"description": "",
"content_url": "/media/test-lehrgang-media/category/reisen"
},
{
"id": 38,
"title": "Analyse",
"slug": "test-lehrgang-lp-circle-reisen-ls-analyse",
"content_type": "learnpath.LearningSequence",
"translation_key": "84be9e5b-6517-4a6d-85a3-1bdf90f78780",
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-analyse",
"icon": "it-icon-ls-apply"
},
{
"id": 39,
"title": "Bedarfsanalyse, Ist- und Soll-Situation",
"slug": "test-lehrgang-lp-circle-reisen-lu-reisen",
"content_type": "learnpath.LearningUnit",
"translation_key": "7cc1e966-75db-4703-8de4-1a3171372299",
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-reisen",
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/reisen",
"course_category": {
"id": 3,
"title": "Reisen",
"general": false
},
"children": [
{
"id": 41,
"title": "Ich bin f\u00e4hig zu Reisen eine Gespr\u00e4chsf\u00fchrung zu machen",
"slug": "test-lehrgang-competence-crit-y11-reisen",
"content_type": "competence.PerformanceCriteria",
"translation_key": "b82dfd37-649f-488c-a78e-c6a3257c3f43",
"frontend_url": "",
"competence_id": "Y1.1"
},
{
"id": 42,
"title": "Ich bin f\u00e4hig zu Reisen eine Analyse zu machen",
"slug": "test-lehrgang-competence-crit-y21-reisen",
"content_type": "competence.PerformanceCriteria",
"translation_key": "9cf4e552-9dc1-46f8-b3e2-800e7bfd4afe",
"frontend_url": "",
"competence_id": "Y2.1"
}
]
},
{
"id": 40,
"title": "Emma und Ayla campen durch Amerika - Analyse",
"slug": "test-lehrgang-lp-circle-reisen-lc-emma-und-ayla-campen-durch-amerika-analyse",
"content_type": "learnpath.LearningContentLearningModule",
"translation_key": "a2b7889c-1143-4cc1-b4f7-0e611de60ee1",
"frontend_url": "/course/test-lehrgang/learn/reisen/emma-und-ayla-campen-durch-amerika-analyse",
"minutes": 15,
"description": "",
"content_url": "https://s3.eu-central-1.amazonaws.com/myvbv-wbt.iterativ.ch/emma-und-ayla-campen-durch-amerika-analyse-xapi-FZoZOP9y/index.html"
},
{
"id": 43,
"title": "Transfer",
"slug": "test-lehrgang-lp-circle-reisen-ls-transfer",
"content_type": "learnpath.LearningSequence",
"translation_key": "655a349d-48e4-4831-b518-872d0714d9e3",
"frontend_url": "/course/test-lehrgang/learn/reisen#ls-transfer",
"icon": "it-icon-ls-end"
},
{
"id": 44,
"title": "Transfer, Reflexion, Feedback",
"slug": "test-lehrgang-lp-circle-reisen-lu-transfer-reflexion-feedback",
"content_type": "learnpath.LearningUnit",
"translation_key": "8d7cc58a-3a91-49ea-906f-c1de57fec0b2",
"frontend_url": "/course/test-lehrgang/learn/reisen#lu-transfer-reflexion-feedback",
"evaluate_url": "/course/test-lehrgang/learn/reisen/evaluate/transfer-reflexion-feedback",
"course_category": {
"id": 1,
"title": "Allgemein",
"general": true
},
"children": []
},
{
"id": 45,
"title": "Auswandern: Woran muss ich denken?",
"slug": "test-lehrgang-lp-circle-reisen-lc-auswandern-woran-muss-ich-denken",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "691d7659-8bd9-4baa-92fd-022e9d418c46",
"frontend_url": "/course/test-lehrgang/learn/reisen/auswandern-woran-muss-ich-denken",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 46,
"title": "Fachcheck Reisen",
"slug": "test-lehrgang-lp-circle-reisen-lc-fachcheck-reisen",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "26294bc1-9dfe-4c17-a231-02a1387e8dcf",
"frontend_url": "/course/test-lehrgang/learn/reisen/fachcheck-reisen",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 47,
"title": "Reflexion",
"slug": "test-lehrgang-lp-circle-reisen-lc-reflexion",
"content_type": "learnpath.LearningContentPlaceholder",
"translation_key": "cd091a5d-63e8-4a4d-8178-d0224e869146",
"frontend_url": "/course/test-lehrgang/learn/reisen/reflexion",
"minutes": 15,
"description": "Platzhalter",
"content_url": ""
},
{
"id": 48,
"title": "Feedback",
"slug": "test-lehrgang-lp-circle-reisen-lc-feedback",
"content_type": "learnpath.LearningContentFeedback",
"translation_key": "ca35688c-f8ee-4aaf-b435-6e84163d9ea6",
"frontend_url": "/course/test-lehrgang/learn/reisen/feedback",
"minutes": 15,
"description": "",
"content_url": ""
}
],
"description": "In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen, damit du\nerfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.",
"goals": "\n <p class=\"mt-4\">In diesem Circle erf\u00e4hrst du wie der Lehrgang aufgebaut ist. Zudem lernst du die wichtigsten Grundlagen,\n damit du erfolgreich mit deinem Lernpfad und in deinem Job (durch-)starten kannst.</p>\n <p class=\"mt-4\">Du baust das Grundlagenwissen f\u00fcr die folgenden Themenfelder auf:</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Aufbau von myVBV und wie du dich im Lernpfad zurechtfindest</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Worauf die Ausbildung und die Zulassungspr\u00fcfung zum/zur Versicherungsvermittler/-in VBV basieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Organisation deiner Lernreise und deiner Zusammenarbeit mit deiner Lernbegleitung und einem\n Lernpartner/einer Lernpartnerin</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Tipps und Tricks zur Organisation eines erfolgreichen Arbeitsalltags</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Umgang mit den sozialen Medien und Datenschutz</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungswirtschaft</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>Basiswissen Versicherungsrecht</li>\n </ul>\n <p class=\"mt-4\">Du arbeitest an folgenden Leistungskriterien aus dem Qualifikationsprofil:</p>\n <h3>Arbeitsalltag/Lerneinheit: \u00abLucas Auftritt in den sozialen Medien und der Umgang mit sensiblen Daten\u00bb</h3>\n <p class=\"mt-4\">Ich bin f\u00e4hig, \u2026</p>\n <ul>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.1: \u2026 in Zusammenarbeit mit den IT-Spezialisten und der Marketingabteilung die Inhalte f\u00fcr den zu\n realisierenden Medienauftritt zielgruppengerecht festzulegen</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.2: \u2026 f\u00fcr die verschiedenen Kundensegmente die passenden sozialen Medien zu definieren</li>\n <li class=\"flex items-center\"><it-icon-check class=\"hidden h-12 w-12 flex-none text-sky-500 lg:inline-block it-icon\"></it-icon-check>A3.3. \u2026 die Inhalte compliant zu halten</li>\n </ul>\n "
}
],
"course": {
"id": -1,
"title": "Test Lehrgang",
"category_name": "Handlungsfeld",
"slug": "test-lehrgang"
}
}

View File

@ -27,6 +27,9 @@ class Course(models.Model):
def get_course_url(self): def get_course_url(self):
return f"/course/{self.slug}" return f"/course/{self.slug}"
def get_cockpit_url(self):
return f"/{self.get_course_url()}/cockpit"
def get_learning_path(self): def get_learning_path(self):
from vbv_lernwelt.learnpath.models import LearningPath from vbv_lernwelt.learnpath.models import LearningPath

View File

@ -35,9 +35,6 @@ class LearningPath(CourseBasePage):
def get_frontend_url(self): def get_frontend_url(self):
return f"/course/{self.slug.replace('-lp', '')}/learn" return f"/course/{self.slug.replace('-lp', '')}/learn"
def get_cockpit_url(self):
return f"/course/{self.slug.replace('-lp', '')}/cockpit"
class Topic(CourseBasePage): class Topic(CourseBasePage):
serialize_field_names = ["is_visible"] serialize_field_names = ["is_visible"]