Merged in feature/berufsbilnder-cypress (pull request #378)
Feature/berufsbilnder cypress * Berufsbildner cypress test * Fix tests
This commit is contained in:
parent
f8f9ed86dc
commit
0f6ec66122
|
|
@ -40,6 +40,7 @@ onMounted(async () => {
|
||||||
<div :class="['flex flex-row space-x-3 bg-white', slim ? '' : 'pb-6']">
|
<div :class="['flex flex-row space-x-3 bg-white', slim ? '' : 'pb-6']">
|
||||||
<div
|
<div
|
||||||
class="flex h-[74px] items-center justify-center py-1 pr-3 text-3xl font-bold"
|
class="flex h-[74px] items-center justify-center py-1 pr-3 text-3xl font-bold"
|
||||||
|
data-cy="dashboard.mentor.menteeCountValue"
|
||||||
>
|
>
|
||||||
<span>{{ menteeCount }}</span>
|
<span>{{ menteeCount }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,13 @@ onMounted(async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const averageGrade = computed(() => {
|
const averageGrade = computed(() => {
|
||||||
return percentToRoundedGrade(
|
if (assignmentStats.value?.summary.average_evaluation_percent) {
|
||||||
assignmentStats.value?.summary.average_evaluation_percent ?? 0,
|
return percentToRoundedGrade(
|
||||||
false
|
assignmentStats.value?.summary.average_evaluation_percent ?? 0,
|
||||||
);
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -59,7 +62,7 @@ const averageGrade = computed(() => {
|
||||||
>
|
>
|
||||||
<template #title>{{ $t("a.Kompetenznachweise") }}</template>
|
<template #title>{{ $t("a.Kompetenznachweise") }}</template>
|
||||||
<template #content>
|
<template #content>
|
||||||
<div class="flex items-center gap-4">
|
<div v-if="averageGrade" class="flex items-center gap-4">
|
||||||
<div class="min-w-12 text-center">
|
<div class="min-w-12 text-center">
|
||||||
<div
|
<div
|
||||||
class="heading-2 rounded bg-green-500 p-4"
|
class="heading-2 rounded bg-green-500 p-4"
|
||||||
|
|
|
||||||
|
|
@ -104,7 +104,7 @@ function hasActionButton(): boolean {
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
<span class="rounded bg-gray-300 px-2 py-1">
|
<span class="rounded bg-gray-300 px-2 py-1" data-cy="panel-role-key">
|
||||||
{{ $t(courseConfig.role_key) }}
|
{{ $t(courseConfig.role_key) }}
|
||||||
</span>
|
</span>
|
||||||
<router-link
|
<router-link
|
||||||
|
|
|
||||||
|
|
@ -117,18 +117,21 @@ function getFilteredItems() {
|
||||||
v-model="regionFilterValue"
|
v-model="regionFilterValue"
|
||||||
class="min-w-[12rem]"
|
class="min-w-[12rem]"
|
||||||
:items="regionFilter"
|
:items="regionFilter"
|
||||||
|
data-cy="select-region"
|
||||||
borderless
|
borderless
|
||||||
></ItDropdownSelect>
|
></ItDropdownSelect>
|
||||||
<ItDropdownSelect
|
<ItDropdownSelect
|
||||||
v-model="sessionFilterValue"
|
v-model="sessionFilterValue"
|
||||||
class="min-w-[12rem]"
|
class="min-w-[12rem]"
|
||||||
:items="sessionFilter"
|
:items="sessionFilter"
|
||||||
|
data-cy="select-session"
|
||||||
borderless
|
borderless
|
||||||
></ItDropdownSelect>
|
></ItDropdownSelect>
|
||||||
<ItDropdownSelect
|
<ItDropdownSelect
|
||||||
v-model="generationFilterValue"
|
v-model="generationFilterValue"
|
||||||
class="min-w-[12rem]"
|
class="min-w-[12rem]"
|
||||||
:items="generationFilter"
|
:items="generationFilter"
|
||||||
|
data-cy="select-generation"
|
||||||
borderless
|
borderless
|
||||||
></ItDropdownSelect>
|
></ItDropdownSelect>
|
||||||
<ItDropdownSelect
|
<ItDropdownSelect
|
||||||
|
|
@ -136,6 +139,7 @@ function getFilteredItems() {
|
||||||
v-model="circleFilterValue"
|
v-model="circleFilterValue"
|
||||||
class="min-w-[12rem]"
|
class="min-w-[12rem]"
|
||||||
:items="circleFilter"
|
:items="circleFilter"
|
||||||
|
data-cy="select-circle"
|
||||||
borderless
|
borderless
|
||||||
></ItDropdownSelect>
|
></ItDropdownSelect>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -145,6 +149,7 @@ function getFilteredItems() {
|
||||||
v-for="item in filteredItems"
|
v-for="item in filteredItems"
|
||||||
:key="item._id"
|
:key="item._id"
|
||||||
class="mx-6 border-t border-gray-500 first:border-t-0"
|
class="mx-6 border-t border-gray-500 first:border-t-0"
|
||||||
|
data-cy="statistics-filter-list-item"
|
||||||
>
|
>
|
||||||
<div class="py-4">
|
<div class="py-4">
|
||||||
<slot :item="item"></slot>
|
<slot :item="item"></slot>
|
||||||
|
|
|
||||||
|
|
@ -736,9 +736,28 @@ export function useAllCompetenceCertificates(userId: string, courseSlug: string)
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
const isLoaded = computed(() => !certificateQueries.some((q) => q.fetching.value));
|
const isLoaded = computed(() => !certificateQueries.some((q) => q.fetching.value));
|
||||||
const competenceCertificates = computed(() =>
|
const allCompetenceCertificates = computed(() =>
|
||||||
mergeCompetenceCertificates(competenceCertificatesPerCs.value.flat())
|
mergeCompetenceCertificates(competenceCertificatesPerCs.value.flat())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// it is possible that because of caching (?) the query returns completions for other
|
||||||
|
// users, when the logged in user is Berufsbildner, so filter completions by user
|
||||||
|
const competenceCertificates = computed(() => {
|
||||||
|
return (allCompetenceCertificates.value ?? []).map((cc) => {
|
||||||
|
return {
|
||||||
|
...cc,
|
||||||
|
assignments: cc.assignments.map((a) => {
|
||||||
|
return {
|
||||||
|
...a,
|
||||||
|
completions: (a.completions ?? []).filter(
|
||||||
|
(c) => c.assignment_user.id === userId
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
competenceCertificates,
|
competenceCertificates,
|
||||||
isLoaded,
|
isLoaded,
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,14 @@ const props = defineProps<{
|
||||||
log.debug("CompetenceCertificateDetailPage setup", props);
|
log.debug("CompetenceCertificateDetailPage setup", props);
|
||||||
|
|
||||||
const { id: currentUserId } = useUserStore();
|
const { id: currentUserId } = useUserStore();
|
||||||
|
|
||||||
const { competenceCertificates } = useAllCompetenceCertificates(
|
const { competenceCertificates } = useAllCompetenceCertificates(
|
||||||
props.userId ?? currentUserId,
|
props.userId ?? currentUserId,
|
||||||
props.courseSlug
|
props.courseSlug
|
||||||
);
|
);
|
||||||
|
|
||||||
const certificate = computed(() => {
|
const certificate = computed(() => {
|
||||||
if (!competenceCertificates) {
|
if (!competenceCertificates.value) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ log.debug("CompetenceCertificateListPage setup", props);
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { id: currentUserId } = useUserStore();
|
const { id: currentUserId } = useUserStore();
|
||||||
|
|
||||||
const { competenceCertificates } = useAllCompetenceCertificates(
|
const { competenceCertificates } = useAllCompetenceCertificates(
|
||||||
props.userId ?? currentUserId,
|
props.userId ?? currentUserId,
|
||||||
props.courseSlug
|
props.courseSlug
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { percentToRoundedGrade } from "@/services/assignmentService";
|
||||||
import type { CompetenceCertificate, CompetenceCertificateAssignment } from "@/types";
|
import type { CompetenceCertificate, CompetenceCertificateAssignment } from "@/types";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
import log from "loglevel";
|
||||||
|
|
||||||
export function assignmentsMaxEvaluationPoints(
|
export function assignmentsMaxEvaluationPoints(
|
||||||
assignments: CompetenceCertificateAssignment[]
|
assignments: CompetenceCertificateAssignment[]
|
||||||
|
|
@ -103,7 +104,7 @@ export function mergeCompetenceCertificates(
|
||||||
groupedCompetenceCertificates[certificate.id].push(certificate);
|
groupedCompetenceCertificates[certificate.id].push(certificate);
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(
|
log.debug(
|
||||||
`Found ${Object.keys(groupedCompetenceCertificates).length} competence certificates over all course sessions`
|
`Found ${Object.keys(groupedCompetenceCertificates).length} competence certificates over all course sessions`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,9 @@ const displayDueDates = computed(() => {
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<section class="border-b p-8">
|
<section class="border-b p-8">
|
||||||
<h3 class="mb-4">{{ dashboardPersons.length }} {{ $t("a.Personen") }}</h3>
|
<h3 class="mb-4" data-cy="num-dashboard-persons">
|
||||||
|
{{ dashboardPersons.length }} {{ $t("a.Personen") }}
|
||||||
|
</h3>
|
||||||
<div>
|
<div>
|
||||||
<router-link class="btn-secondary" to="/dashboard/persons">
|
<router-link class="btn-secondary" to="/dashboard/persons">
|
||||||
{{ $t("a.Alle Personen anzeigen") }}
|
{{ $t("a.Alle Personen anzeigen") }}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ const learningContentAssignment = computed(() => {
|
||||||
<router-link
|
<router-link
|
||||||
class="btn-text inline-flex items-center pl-0"
|
class="btn-text inline-flex items-center pl-0"
|
||||||
:to="`/statistic/${props.agentRole}/${props.courseSlug}/assignment`"
|
:to="`/statistic/${props.agentRole}/${props.courseSlug}/assignment`"
|
||||||
|
data-cy="back-button"
|
||||||
>
|
>
|
||||||
<it-icon-arrow-left />
|
<it-icon-arrow-left />
|
||||||
<span>{{ $t("general.back") }}</span>
|
<span>{{ $t("general.back") }}</span>
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,10 @@ const totalAverageGrade = computed(() => {
|
||||||
(c) => c?.completion_status == "EVALUATION_SUBMITTED"
|
(c) => c?.completion_status == "EVALUATION_SUBMITTED"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (relevantCompletions.length === 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const averagePercent =
|
const averagePercent =
|
||||||
_.sumBy(relevantCompletions, (c) => c?.evaluation_percent ?? 0) /
|
_.sumBy(relevantCompletions, (c) => c?.evaluation_percent ?? 0) /
|
||||||
relevantCompletions.length;
|
relevantCompletions.length;
|
||||||
|
|
@ -73,7 +77,6 @@ const totalAverageGrade = computed(() => {
|
||||||
return averagePercent * (assignment.competence_certificate_weight ?? 1);
|
return averagePercent * (assignment.competence_certificate_weight ?? 1);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
return percentToRoundedGrade(
|
return percentToRoundedGrade(
|
||||||
_.sum(assignmentAverageGrades) / (divisor ?? 1),
|
_.sum(assignmentAverageGrades) / (divisor ?? 1),
|
||||||
false
|
false
|
||||||
|
|
@ -118,6 +121,7 @@ onMounted(async () => {
|
||||||
<router-link
|
<router-link
|
||||||
class="btn-text inline-flex items-center pl-0"
|
class="btn-text inline-flex items-center pl-0"
|
||||||
:to="`/statistic/${props.agentRole}/${props.courseSlug}/competence-grade`"
|
:to="`/statistic/${props.agentRole}/${props.courseSlug}/competence-grade`"
|
||||||
|
data-cy="back-button"
|
||||||
>
|
>
|
||||||
<it-icon-arrow-left />
|
<it-icon-arrow-left />
|
||||||
<span>{{ $t("general.back") }}</span>
|
<span>{{ $t("general.back") }}</span>
|
||||||
|
|
@ -128,7 +132,10 @@ onMounted(async () => {
|
||||||
<div class="border-b bg-white px-6 py-6">
|
<div class="border-b bg-white px-6 py-6">
|
||||||
{{ courseSession?.session_title }}
|
{{ courseSession?.session_title }}
|
||||||
</div>
|
</div>
|
||||||
<div class="heading-3 border-b bg-white px-6 py-6">
|
<div
|
||||||
|
class="heading-3 border-b bg-white px-6 py-6"
|
||||||
|
data-cy="total-average-grade"
|
||||||
|
>
|
||||||
{{ $t("a.Durchschnittsnote") }}:
|
{{ $t("a.Durchschnittsnote") }}:
|
||||||
{{ totalAverageGrade }}
|
{{ totalAverageGrade }}
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -136,7 +143,7 @@ onMounted(async () => {
|
||||||
<div
|
<div
|
||||||
v-for="person in participants"
|
v-for="person in participants"
|
||||||
:key="person.user_id"
|
:key="person.user_id"
|
||||||
data-cy="person"
|
:data-cy="`person-${person.user_id}`"
|
||||||
class="flex flex-col justify-between gap-4 border-b p-2 last:border-b-0 md:flex-row md:items-center md:justify-between md:gap-16"
|
class="flex flex-col justify-between gap-4 border-b p-2 last:border-b-0 md:flex-row md:items-center md:justify-between md:gap-16"
|
||||||
>
|
>
|
||||||
<div class="w-full flex-auto md:w-1/2">
|
<div class="w-full flex-auto md:w-1/2">
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ const courseSessionCompetenceAssignments = computed(() => {
|
||||||
:hide-circle-filter="true"
|
:hide-circle-filter="true"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="heading-3 border-b px-6 py-4">
|
<div class="heading-3 border-b px-6 py-4" data-cy="average-grade-header">
|
||||||
{{ $t("a.Durchschnittsnote") }}: {{ totalAverageGrade }}
|
{{ $t("a.Durchschnittsnote") }}: {{ totalAverageGrade }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -182,6 +182,7 @@ const courseSessionCompetenceAssignments = computed(() => {
|
||||||
<div
|
<div
|
||||||
v-if="isGroupedAssignmentEntry(item)"
|
v-if="isGroupedAssignmentEntry(item)"
|
||||||
class="flex flex-col justify-between gap-4 border-b last:border-b-0 md:flex-row md:items-center md:justify-between md:gap-16"
|
class="flex flex-col justify-between gap-4 border-b last:border-b-0 md:flex-row md:items-center md:justify-between md:gap-16"
|
||||||
|
:data-cy="`competence-grade@${item.course_session_id}-${item.competenceCertificateTitle}`"
|
||||||
>
|
>
|
||||||
<div class="w-full flex-auto md:w-1/2">
|
<div class="w-full flex-auto md:w-1/2">
|
||||||
<span class="text-bold">
|
<span class="text-bold">
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ const itemDetailUrl = (item: AssignmentStatisticsRecordType) => {
|
||||||
<template #default="{ item }">
|
<template #default="{ item }">
|
||||||
<div
|
<div
|
||||||
class="flex justify-between"
|
class="flex justify-between"
|
||||||
:data-cy="(item as AssignmentStatisticsRecordType).assignment_title"
|
:data-cy="`${(item as AssignmentStatisticsRecordType).assignment_title}@${(item as AssignmentStatisticsRecordType).course_session_id}`"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<h4 class="font-bold">
|
<h4 class="font-bold">
|
||||||
|
|
@ -123,6 +123,7 @@ const itemDetailUrl = (item: AssignmentStatisticsRecordType) => {
|
||||||
<router-link
|
<router-link
|
||||||
class="underline"
|
class="underline"
|
||||||
:to="itemDetailUrl(item as AssignmentStatisticsRecordType)"
|
:to="itemDetailUrl(item as AssignmentStatisticsRecordType)"
|
||||||
|
data-cy="details-link"
|
||||||
>
|
>
|
||||||
{{ $t("a.Details anschauen") }}
|
{{ $t("a.Details anschauen") }}
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ const route = useRoute();
|
||||||
entry.routeMatch.includes(convertRouteRecordNameToString(record?.name))
|
entry.routeMatch.includes(convertRouteRecordNameToString(record?.name))
|
||||||
),
|
),
|
||||||
}"
|
}"
|
||||||
|
:data-cy="`side-menu-${entry.routeMatch[0]}`"
|
||||||
>
|
>
|
||||||
<span>{{ $t(entry.label) }}</span>
|
<span>{{ $t(entry.label) }}</span>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
|
||||||
|
|
@ -401,6 +401,9 @@ export interface CompetenceCertificateAssignment extends BaseCourseWagtailPage {
|
||||||
| null;
|
| null;
|
||||||
completions: {
|
completions: {
|
||||||
id: string;
|
id: string;
|
||||||
|
assignment_user: {
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
completion_status: AssignmentCompletionStatus;
|
completion_status: AssignmentCompletionStatus;
|
||||||
evaluation_submitted_at: string | null;
|
evaluation_submitted_at: string | null;
|
||||||
evaluation_points: number | null;
|
evaluation_points: number | null;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,155 @@
|
||||||
|
import { login } from "../helpers";
|
||||||
|
import {
|
||||||
|
TEST_COURSE_SESSION_ZURICH_ID,
|
||||||
|
TEST_STUDENT1_USER_ID,
|
||||||
|
TEST_STUDENT1_VV_USER_ID,
|
||||||
|
TEST_STUDENT2_USER_ID,
|
||||||
|
} from "../../consts";
|
||||||
|
|
||||||
|
function selectDropboxItem(dropboxSelector, item) {
|
||||||
|
cy.get(dropboxSelector).click();
|
||||||
|
cy.get(dropboxSelector).contains(item).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("berufsbildner.cy.js", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
cy.manageCommand(
|
||||||
|
`cypress_reset --create-assignment-evaluation --assignment-evaluation-scores 4,6,4,3,2 --assignment-points-deducted 3 --create-edoniq-test-results 19 24 8 --edoniq-user-id ${TEST_STUDENT2_USER_ID} --edoniq-course-session-id ${TEST_COURSE_SESSION_ZURICH_ID}`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("check data on dashboard", () => {
|
||||||
|
login("test-berufsbildner1@example.com", "test");
|
||||||
|
cy.visit("/");
|
||||||
|
|
||||||
|
cy.get('[data-cy="panel-role-key"]').should("contain", "Berufsbildner");
|
||||||
|
|
||||||
|
cy.get('[data-cy="num-dashboard-persons"]').should("contain", "3 Personen");
|
||||||
|
|
||||||
|
cy.get('[data-cy="dashboard.stats.competenceGrades"]').should(
|
||||||
|
"contain",
|
||||||
|
"3.81",
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('[data-cy="dashboard.stats.assignments"]').should("contain", "17%");
|
||||||
|
cy.get('[data-cy="dashboard.stats.assignments"]').should(
|
||||||
|
"contain",
|
||||||
|
"2 Elemente abgeschlossen",
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('[data-cy="dashboard.mentor.menteeCountValue"]').should(
|
||||||
|
"contain",
|
||||||
|
"3",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("check competence grades with subpages", () => {
|
||||||
|
login("test-berufsbildner1@example.com", "test");
|
||||||
|
cy.visit("/");
|
||||||
|
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="dashboard.stats.competenceGrades"] [data-cy="basebox.detailsLink"]',
|
||||||
|
).click();
|
||||||
|
|
||||||
|
// check average grade filtered by dropbox selects
|
||||||
|
cy.get('[data-cy="average-grade-header"]').should("contain", "3.81");
|
||||||
|
|
||||||
|
selectDropboxItem('[data-cy="select-session"]', "Bern");
|
||||||
|
cy.get('[data-cy="average-grade-header"]').should("contain", "4.33");
|
||||||
|
|
||||||
|
selectDropboxItem('[data-cy="select-session"]', "Zürich");
|
||||||
|
cy.get('[data-cy="average-grade-header"]').should("contain", "3.29");
|
||||||
|
|
||||||
|
selectDropboxItem('[data-cy="select-session"]', "Alle");
|
||||||
|
cy.get('[data-cy="average-grade-header"]').should("contain", "3.81");
|
||||||
|
|
||||||
|
// go to competence certificate detail page
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="competence-grade@-1-Kompetenznachweis 1"] [data-cy="basebox.detailsLink"]',
|
||||||
|
).click();
|
||||||
|
cy.get('[data-cy="total-average-grade"]').should("contain", "4.33");
|
||||||
|
cy.get(`[data-cy="person-${TEST_STUDENT1_USER_ID}"]`).should(
|
||||||
|
"contain",
|
||||||
|
"4.33",
|
||||||
|
);
|
||||||
|
cy.get('[data-cy="back-button"]').click();
|
||||||
|
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="competence-grade@-2-Kompetenznachweis 1"] [data-cy="basebox.detailsLink"]',
|
||||||
|
).click();
|
||||||
|
cy.get('[data-cy="total-average-grade"]').should("contain", "3.29");
|
||||||
|
|
||||||
|
// open student profile link
|
||||||
|
cy.get(`[data-cy="person-${TEST_STUDENT2_USER_ID}"]`)
|
||||||
|
.find('[data-cy="person-learning-path-link"]')
|
||||||
|
.click();
|
||||||
|
|
||||||
|
cy.get('[data-cy="profileCompetence"]').click();
|
||||||
|
cy.get('[data-cy="side-menu-competenceCertificates"]').click();
|
||||||
|
|
||||||
|
cy.get('[data-cy="certificate-total-grade"]').should(
|
||||||
|
"contain",
|
||||||
|
"Note: 3.5",
|
||||||
|
);
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
|
).should("contain", "3.29");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("check competence elements with subpages", () => {
|
||||||
|
login("test-berufsbildner1@example.com", "test");
|
||||||
|
cy.visit("/");
|
||||||
|
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="dashboard.stats.assignments"] [data-cy="basebox.detailsLink"]',
|
||||||
|
).click();
|
||||||
|
|
||||||
|
// check assignment filter
|
||||||
|
cy.get('[data-cy="statistics-filter-list-item"]').should("have.length", 4);
|
||||||
|
selectDropboxItem('[data-cy="select-session"]', "Bern");
|
||||||
|
cy.get('[data-cy="statistics-filter-list-item"]').should("have.length", 2);
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="Überprüfen einer Motorfahrzeugs-Versicherungspolice@-1"]',
|
||||||
|
).should("contain", "1 von 3 bestanden");
|
||||||
|
|
||||||
|
selectDropboxItem('[data-cy="select-session"]', "Zürich");
|
||||||
|
cy.get('[data-cy="statistics-filter-list-item"]').should("have.length", 2);
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="Edoniq Wissens- und Verständisfragen - Circle Fahrzeug (Demo)@-2"]',
|
||||||
|
).should("contain", "0 von 1 bestanden");
|
||||||
|
|
||||||
|
selectDropboxItem('[data-cy="select-session"]', "Alle");
|
||||||
|
cy.get('[data-cy="statistics-filter-list-item"]').should("have.length", 4);
|
||||||
|
|
||||||
|
// check detail values for Student 1
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="Überprüfen einer Motorfahrzeugs-Versicherungspolice@-1"] [data-cy="details-link"]',
|
||||||
|
).click();
|
||||||
|
|
||||||
|
cy.get('[data-cy="Student1"]').should("contain", "Bewertung freigegeben");
|
||||||
|
cy.get('[data-cy="Student1"]').should("contain", "16 von 24 Punkten");
|
||||||
|
cy.get('[data-cy="Student1"]').should("contain", "67%");
|
||||||
|
cy.get('[data-cy="Student1"] [data-cy="show-results"]').click();
|
||||||
|
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
|
).should("contain", "4.5");
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
|
).should("contain", "4.33");
|
||||||
|
cy.get('[data-cy="back-button"]').click();
|
||||||
|
cy.get(".heading-2").should(
|
||||||
|
"contain",
|
||||||
|
"Überprüfen einer Motorfahrzeug-Versicherungspolice",
|
||||||
|
);
|
||||||
|
cy.get('[data-cy="back-button"]').click();
|
||||||
|
|
||||||
|
// check detail values for Student 2
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="Edoniq Wissens- und Verständisfragen - Circle Fahrzeug (Demo)@-2"] [data-cy="details-link"]',
|
||||||
|
).click();
|
||||||
|
cy.get('[data-cy="Student2"]').should("contain", "Bewertung freigegeben");
|
||||||
|
cy.get('[data-cy="Student2"]').should("contain", "11 von 24 Punkten (46%)");
|
||||||
|
cy.get('[data-cy="Student2"]').should("contain", "Nicht bestanden");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -1,392 +1,404 @@
|
||||||
import { login } from "../helpers"
|
import { login } from "../helpers";
|
||||||
|
|
||||||
describe("competenceCertificate.cy.js", () => {
|
describe("competenceCertificate.cy.js", () => {
|
||||||
beforeEach(() => { })
|
beforeEach(() => {});
|
||||||
|
|
||||||
it("check without points", () => {
|
it("check without points", () => {
|
||||||
cy.manageCommand("cypress_reset")
|
cy.manageCommand("cypress_reset");
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
cy.visit("/course/test-lehrgang/competence")
|
cy.visit("/course/test-lehrgang/competence");
|
||||||
|
|
||||||
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
||||||
"Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
|
"Der Punktestand wird zu einem späteren Zeitpunkt berechnet.",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
).and("contain", "0 von 2 Kompetenznachweis-Elementen")
|
).and("contain", "0 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check on certificates page
|
// check on certificates page
|
||||||
cy.get('[data-cy="certificates-show-all-button"]').click()
|
cy.get('[data-cy="certificates-show-all-button"]').click();
|
||||||
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
||||||
"Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
|
"Der Punktestand wird zu einem späteren Zeitpunkt berechnet.",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.should(
|
.should(
|
||||||
"contain",
|
"contain",
|
||||||
"Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
|
"Der Punktestand wird zu einem späteren Zeitpunkt berechnet.",
|
||||||
)
|
)
|
||||||
.and("contain", "0 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "0 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check certificate detail page
|
// check certificate detail page
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
|
||||||
).click()
|
).click();
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]',
|
||||||
).should("contain", "Höchstpunktzahl")
|
).should("contain", "Höchstpunktzahl");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
|
||||||
).should("contain", "Höchstpunktzahl")
|
).should("contain", "Höchstpunktzahl");
|
||||||
})
|
});
|
||||||
|
|
||||||
it("check with finished passed edoniq test", () => {
|
it("check with finished passed edoniq test", () => {
|
||||||
cy.manageCommand(
|
cy.manageCommand(
|
||||||
"cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 0"
|
"cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 0",
|
||||||
)
|
);
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
cy.visit("/course/test-lehrgang/competence")
|
cy.visit("/course/test-lehrgang/competence");
|
||||||
|
|
||||||
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
||||||
"Erfahrungsnote üK: 5"
|
"Erfahrungsnote üK: 5",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.should("contain", "Note: 5")
|
.should("contain", "Note: 5")
|
||||||
.and("contain", "1 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "1 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check on certificates page
|
// check on certificates page
|
||||||
cy.get('[data-cy="certificates-show-all-button"]').click()
|
cy.get('[data-cy="certificates-show-all-button"]').click();
|
||||||
cy.get('[data-cy="certificate-total-points-text"]')
|
cy.get('[data-cy="certificate-total-points-text"]')
|
||||||
.should("contain", "Erfahrungsnote üK")
|
.should("contain", "Erfahrungsnote üK")
|
||||||
.and("contain", "Zwischenstand")
|
.and("contain", "Zwischenstand");
|
||||||
cy.get('[data-cy="certificate-total-grade"]').should("contain", "Note: 5")
|
cy.get('[data-cy="certificate-total-grade"]').should("contain", "Note: 5");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
).should("contain", "Note: 5")
|
).should("contain", "Note: 5");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
).should("contain", "Ungerundete Note: 4.96")
|
).should("contain", "Ungerundete Note: 4.96");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.and("contain", "Zwischenstand")
|
.and("contain", "Zwischenstand")
|
||||||
.and("contain", "1 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "1 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check certificate detail page
|
// check certificate detail page
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
|
||||||
).click()
|
).click();
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]',
|
||||||
)
|
)
|
||||||
.should("contain", "Höchstpunktzahl")
|
.should("contain", "Höchstpunktzahl")
|
||||||
.and("contain", "Ergebnisse abgegeben")
|
.and("contain", "Ergebnisse abgegeben");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
|
||||||
)
|
)
|
||||||
.should("contain", "19")
|
.should("contain", "19")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben")
|
||||||
.and("not.contain", "Nicht Bestanden")
|
.and("not.contain", "Nicht Bestanden");
|
||||||
|
|
||||||
// it can open learning content page directly
|
// it can open learning content page directly
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
|
||||||
).click()
|
).click();
|
||||||
cy.get('[data-cy="test-result"]')
|
cy.get('[data-cy="test-result"]')
|
||||||
.should("contain", "19 von 24 Punkten")
|
.should("contain", "19 von 24 Punkten")
|
||||||
.and("contain", "79%")
|
.and("contain", "79%");
|
||||||
})
|
});
|
||||||
|
|
||||||
it("check with finished failed edoniq test", () => {
|
it("check with finished failed edoniq test", () => {
|
||||||
cy.manageCommand(
|
cy.manageCommand(
|
||||||
"cypress_reset --create-assignment-completion --create-edoniq-test-results 10 24 0"
|
"cypress_reset --create-assignment-completion --create-edoniq-test-results 10 24 0",
|
||||||
)
|
);
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
|
|
||||||
// go to certificate detail page
|
// go to certificate detail page
|
||||||
cy.visit(
|
cy.visit(
|
||||||
"/course/test-lehrgang/competence/certificates/kompetenznachweis-1"
|
"/course/test-lehrgang/competence/certificates/kompetenznachweis-1",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
).should("contain", "Note: 3")
|
).should("contain", "Note: 3");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
).should("contain", "Ungerundete Note: 3.08")
|
).should("contain", "Ungerundete Note: 3.08");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
|
||||||
)
|
)
|
||||||
.should("contain", "10")
|
.should("contain", "10")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben")
|
||||||
.and("contain", "42%")
|
.and("contain", "42%")
|
||||||
.and("contain", "Nicht bestanden")
|
.and("contain", "Nicht bestanden");
|
||||||
|
|
||||||
// it can open learning content page directly
|
// it can open learning content page directly
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
|
||||||
).click()
|
).click();
|
||||||
cy.get('[data-cy="test-result"]')
|
cy.get('[data-cy="test-result"]')
|
||||||
.should("contain", "10 von 24 Punkten")
|
.should("contain", "10 von 24 Punkten")
|
||||||
.and("contain", "42%")
|
.and("contain", "42%")
|
||||||
.and("contain", "Nicht bestanden")
|
.and("contain", "Nicht bestanden");
|
||||||
})
|
});
|
||||||
|
|
||||||
it("check with finished edoniq test and finished casework", () => {
|
it("check with finished edoniq test and finished casework", () => {
|
||||||
cy.manageCommand(
|
cy.manageCommand(
|
||||||
"cypress_reset --create-assignment-evaluation --create-edoniq-test-results 19 24 0"
|
"cypress_reset --create-assignment-evaluation --create-edoniq-test-results 19 24 0",
|
||||||
)
|
);
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
cy.visit("/course/test-lehrgang/competence")
|
cy.visit("/course/test-lehrgang/competence");
|
||||||
|
|
||||||
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
||||||
"Erfahrungsnote üK: 5.5"
|
"Erfahrungsnote üK: 5.5",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.should("contain", "Note: 5.5")
|
.should("contain", "Note: 5.5")
|
||||||
.and("contain", "2 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "2 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check on certificates page
|
// check on certificates page
|
||||||
cy.get('[data-cy="certificates-show-all-button"]').click()
|
cy.get('[data-cy="certificates-show-all-button"]').click();
|
||||||
cy.get('[data-cy="certificate-total-points-text"]')
|
cy.get('[data-cy="certificate-total-points-text"]')
|
||||||
.should("contain", "Erfahrungsnote üK")
|
.should("contain", "Erfahrungsnote üK")
|
||||||
.and("contain", "Note: 5.5")
|
.and("contain", "Note: 5.5")
|
||||||
.and("not.contain", "Zwischenstand")
|
.and("not.contain", "Zwischenstand");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.and("not.contain", "Zwischenstand")
|
.and("not.contain", "Zwischenstand")
|
||||||
.and("contain", "2 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "2 von 2 Kompetenznachweis-Elementen");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
).should("contain", "Note: 5.5")
|
).should("contain", "Note: 5.5");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
).should("contain", "Ungerundete Note: 5.48")
|
).should("contain", "Ungerundete Note: 5.48");
|
||||||
|
|
||||||
// check certificate detail page
|
// check certificate detail page
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
|
||||||
).click()
|
).click();
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]',
|
||||||
)
|
)
|
||||||
.should("contain", "24")
|
.should("contain", "24")
|
||||||
.and("contain", "von 24 Punkten")
|
.and("contain", "von 24 Punkten")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
|
||||||
)
|
)
|
||||||
.should("contain", "19")
|
.should("contain", "19")
|
||||||
.and("contain", "von 24 Punkten")
|
.and("contain", "von 24 Punkten")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben");
|
||||||
})
|
});
|
||||||
|
|
||||||
it("check with finished edoniq test and finished casework in different course sessions", () => {
|
it("check with finished edoniq test and finished casework in different course sessions", () => {
|
||||||
const TEST_TRAINER2_USER_ID = "299941ae-1e4b-4f45-8180-876c3ad340b4"
|
const TEST_TRAINER2_USER_ID = "299941ae-1e4b-4f45-8180-876c3ad340b4";
|
||||||
const TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900"
|
const TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900";
|
||||||
const TEST_COURSE_SESSION_ZURICH_ID = -2
|
const TEST_COURSE_SESSION_ZURICH_ID = -2;
|
||||||
cy.manageCommand(
|
cy.manageCommand(
|
||||||
`cypress_reset --create-assignment-evaluation --assignment-evaluation-user-id ${TEST_TRAINER2_USER_ID} --assignment-completion-user-id ${TEST_STUDENT2_USER_ID} --edoniq-user-id ${TEST_STUDENT2_USER_ID} --edoniq-course-session-id '${TEST_COURSE_SESSION_ZURICH_ID}' --create-edoniq-test-results 19 24 0`
|
`cypress_reset --create-assignment-evaluation --assignment-evaluation-user-id ${TEST_TRAINER2_USER_ID} --assignment-completion-user-id ${TEST_STUDENT2_USER_ID} --edoniq-user-id ${TEST_STUDENT2_USER_ID} --edoniq-course-session-id '${TEST_COURSE_SESSION_ZURICH_ID}' --create-edoniq-test-results 19 24 0`,
|
||||||
)
|
);
|
||||||
login("test-student2@example.com", "test")
|
login("test-student2@example.com", "test");
|
||||||
cy.visit("/course/test-lehrgang/competence")
|
cy.visit("/course/test-lehrgang/competence");
|
||||||
|
|
||||||
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
||||||
"Erfahrungsnote üK: 5.5"
|
"Erfahrungsnote üK: 5.5",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.should("contain", "Note: 5.5")
|
.should("contain", "Note: 5.5")
|
||||||
.and("contain", "2 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "2 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check on certificates page
|
// check on certificates page
|
||||||
cy.get('[data-cy="certificates-show-all-button"]').click()
|
cy.get('[data-cy="certificates-show-all-button"]').click();
|
||||||
cy.get('[data-cy="certificate-total-points-text"]')
|
cy.get('[data-cy="certificate-total-points-text"]')
|
||||||
.should("contain", "Erfahrungsnote üK")
|
.should("contain", "Erfahrungsnote üK")
|
||||||
.and("contain", "Note: 5.5")
|
.and("contain", "Note: 5.5")
|
||||||
.and("not.contain", "Zwischenstand")
|
.and("not.contain", "Zwischenstand");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.and("not.contain", "Zwischenstand")
|
.and("not.contain", "Zwischenstand")
|
||||||
.and("contain", "2 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "2 von 2 Kompetenznachweis-Elementen");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
).should("contain", "Note: 5.5")
|
).should("contain", "Note: 5.5");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
).should("contain", "Ungerundete Note: 5.48")
|
).should("contain", "Ungerundete Note: 5.48");
|
||||||
|
|
||||||
// check certificate detail page
|
// check certificate detail page
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
|
||||||
).click()
|
).click();
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]',
|
||||||
)
|
)
|
||||||
.should("contain", "24")
|
.should("contain", "24")
|
||||||
.and("contain", "von 24 Punkten")
|
.and("contain", "von 24 Punkten")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
|
||||||
)
|
)
|
||||||
.should("contain", "19")
|
.should("contain", "19")
|
||||||
.and("contain", "von 24 Punkten")
|
.and("contain", "von 24 Punkten")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben");
|
||||||
|
|
||||||
cy.get('[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice-course-session"]').should("contain", "Test Bern 2022 a")
|
|
||||||
cy.get('[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo-course-session"]').should("contain", "Test Zürich 2022 a")
|
|
||||||
})
|
|
||||||
|
|
||||||
it("check show assignment in different course session", () => {
|
|
||||||
const TEST_TRAINER2_USER_ID = "299941ae-1e4b-4f45-8180-876c3ad340b4"
|
|
||||||
const TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900"
|
|
||||||
const TEST_COURSE_SESSION_ZURICH_ID = -2
|
|
||||||
cy.manageCommand(
|
|
||||||
`cypress_reset --create-assignment-evaluation --assignment-evaluation-user-id ${TEST_TRAINER2_USER_ID} --assignment-completion-user-id ${TEST_STUDENT2_USER_ID} --edoniq-user-id ${TEST_STUDENT2_USER_ID} --edoniq-course-session-id '${TEST_COURSE_SESSION_ZURICH_ID}' --create-edoniq-test-results 19 24 0`
|
|
||||||
)
|
|
||||||
login("test-student2@example.com", "test")
|
|
||||||
cy.visit("course/test-lehrgang/competence/certificates/kompetenznachweis-1")
|
|
||||||
|
|
||||||
cy.get('[data-cy="current-course-session-title"]').should("contain", "Test Bern 2022 a")
|
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice-course-session"]',
|
||||||
).click()
|
).should("contain", "Test Bern 2022 a");
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo-course-session"]',
|
||||||
|
).should("contain", "Test Zürich 2022 a");
|
||||||
|
});
|
||||||
|
|
||||||
cy.get('[data-cy="current-course-session-title"]').should("contain", "Test Zürich 2022 a")
|
it("check show assignment in different course session", () => {
|
||||||
})
|
const TEST_TRAINER2_USER_ID = "299941ae-1e4b-4f45-8180-876c3ad340b4";
|
||||||
|
const TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900";
|
||||||
|
const TEST_COURSE_SESSION_ZURICH_ID = -2;
|
||||||
|
cy.manageCommand(
|
||||||
|
`cypress_reset --create-assignment-evaluation --assignment-evaluation-user-id ${TEST_TRAINER2_USER_ID} --assignment-completion-user-id ${TEST_STUDENT2_USER_ID} --edoniq-user-id ${TEST_STUDENT2_USER_ID} --edoniq-course-session-id '${TEST_COURSE_SESSION_ZURICH_ID}' --create-edoniq-test-results 19 24 0`,
|
||||||
|
);
|
||||||
|
login("test-student2@example.com", "test");
|
||||||
|
cy.visit(
|
||||||
|
"course/test-lehrgang/competence/certificates/kompetenznachweis-1",
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get('[data-cy="current-course-session-title"]').should(
|
||||||
|
"contain",
|
||||||
|
"Test Bern 2022 a",
|
||||||
|
);
|
||||||
|
|
||||||
|
cy.get(
|
||||||
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
|
||||||
|
).click();
|
||||||
|
|
||||||
|
cy.get('[data-cy="current-course-session-title"]').should(
|
||||||
|
"contain",
|
||||||
|
"Test Zürich 2022 a",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("check with finished edoniq test with deducted points", () => {
|
it("check with finished edoniq test with deducted points", () => {
|
||||||
cy.manageCommand(
|
cy.manageCommand(
|
||||||
"cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 8"
|
"cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 8",
|
||||||
)
|
);
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
|
|
||||||
// go to certificate detail page
|
// go to certificate detail page
|
||||||
cy.visit(
|
cy.visit(
|
||||||
"/course/test-lehrgang/competence/certificates/kompetenznachweis-1"
|
"/course/test-lehrgang/competence/certificates/kompetenznachweis-1",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
).should("contain", "Note: 3.5")
|
).should("contain", "Note: 3.5");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
).should("contain", "Ungerundete Note: 3.29")
|
).should("contain", "Ungerundete Note: 3.29");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
|
||||||
)
|
)
|
||||||
.should("contain", "11")
|
.should("contain", "11")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben")
|
||||||
.and("contain", "46%")
|
.and("contain", "46%")
|
||||||
.and("contain", "mit Abzug")
|
.and("contain", "mit Abzug")
|
||||||
.and("contain", "Nicht bestanden")
|
.and("contain", "Nicht bestanden");
|
||||||
|
|
||||||
// it can open learning content page directly
|
// it can open learning content page directly
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
|
'[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
|
||||||
).click()
|
).click();
|
||||||
cy.get('[data-cy="test-result"]')
|
cy.get('[data-cy="test-result"]')
|
||||||
.should("contain", "11 von 24 Punkten")
|
.should("contain", "11 von 24 Punkten")
|
||||||
.and("contain", "46%")
|
.and("contain", "46%")
|
||||||
.and("contain", "Punkte aus Bewertung: 19")
|
.and("contain", "Punkte aus Bewertung: 19")
|
||||||
.and("contain", "Abgezogene Punkte: 8")
|
.and("contain", "Abgezogene Punkte: 8")
|
||||||
.and("contain", "Grund: Edoniq Punkteabzug Test")
|
.and("contain", "Grund: Edoniq Punkteabzug Test")
|
||||||
.and("contain", "Nicht bestanden")
|
.and("contain", "Nicht bestanden");
|
||||||
})
|
});
|
||||||
|
|
||||||
it("check with finished casework and points deducted", () => {
|
it("check with finished casework and points deducted", () => {
|
||||||
cy.manageCommand(
|
cy.manageCommand(
|
||||||
"cypress_reset --create-assignment-evaluation --assignment-evaluation-scores 4,6,4,3,2 --assignment-points-deducted 5"
|
"cypress_reset --create-assignment-evaluation --assignment-evaluation-scores 4,6,4,3,2 --assignment-points-deducted 5",
|
||||||
)
|
);
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
cy.visit("/course/test-lehrgang/competence")
|
cy.visit("/course/test-lehrgang/competence");
|
||||||
|
|
||||||
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
cy.get('[data-cy="certificate-total-points-text"]').contains(
|
||||||
"Erfahrungsnote üK: 4"
|
"Erfahrungsnote üK: 4",
|
||||||
)
|
);
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.should("contain", "Note: 4")
|
.should("contain", "Note: 4")
|
||||||
.and("contain", "1 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "1 von 2 Kompetenznachweis-Elementen");
|
||||||
|
|
||||||
// check on certificates page
|
// check on certificates page
|
||||||
cy.get('[data-cy="certificates-show-all-button"]').click()
|
cy.get('[data-cy="certificates-show-all-button"]').click();
|
||||||
cy.get('[data-cy="certificate-total-points-text"]')
|
cy.get('[data-cy="certificate-total-points-text"]')
|
||||||
.should("contain", "Erfahrungsnote üK")
|
.should("contain", "Erfahrungsnote üK")
|
||||||
.and("contain", "Note: 4")
|
.and("contain", "Note: 4")
|
||||||
.and("contain", "Zwischenstand")
|
.and("contain", "Zwischenstand");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
|
||||||
)
|
)
|
||||||
.and("contain", "Zwischenstand")
|
.and("contain", "Zwischenstand")
|
||||||
.and("contain", "1 von 2 Kompetenznachweis-Elementen")
|
.and("contain", "1 von 2 Kompetenznachweis-Elementen");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
|
||||||
).should("contain", "Note: 4")
|
).should("contain", "Note: 4");
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
|
||||||
).should("contain", "Ungerundete Note: 3.92")
|
).should("contain", "Ungerundete Note: 3.92");
|
||||||
|
|
||||||
// check certificate detail page
|
// check certificate detail page
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
|
'[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
|
||||||
).click()
|
).click();
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]',
|
||||||
)
|
)
|
||||||
.should("contain", "14")
|
.should("contain", "14")
|
||||||
.and("contain", "von 24 Punkten")
|
.and("contain", "von 24 Punkten")
|
||||||
.and("contain", "58%")
|
.and("contain", "58%")
|
||||||
.and("contain", "mit Abzug")
|
.and("contain", "mit Abzug")
|
||||||
.and("contain", "Bewertung freigegeben")
|
.and("contain", "Bewertung freigegeben");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"] [data-cy="open-learning-content"]'
|
'[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"] [data-cy="open-learning-content"]',
|
||||||
).click()
|
).click();
|
||||||
cy.get('[data-cy="user-points"]').should("contain", "14")
|
cy.get('[data-cy="user-points"]').should("contain", "14");
|
||||||
cy.get('[data-cy="total-points"]').should(
|
cy.get('[data-cy="total-points"]').should(
|
||||||
"contain",
|
"contain",
|
||||||
"von 24 Punkten (58%)"
|
"von 24 Punkten (58%)",
|
||||||
)
|
);
|
||||||
cy.get('[data-cy="points-deducted"]')
|
cy.get('[data-cy="points-deducted"]')
|
||||||
.should("contain", "Punkte aus Bewertung: 19")
|
.should("contain", "Punkte aus Bewertung: 19")
|
||||||
.and("contain", "Abgezogene Punkte: 5")
|
.and("contain", "Abgezogene Punkte: 5")
|
||||||
.and("contain", "Grund: Assignment Punkteabzug Test")
|
.and("contain", "Grund: Assignment Punkteabzug Test");
|
||||||
})
|
});
|
||||||
|
|
||||||
it("should display link to details", () => {
|
it("should display link to details", () => {
|
||||||
cy.manageCommand("cypress_reset")
|
cy.manageCommand("cypress_reset");
|
||||||
login("test-student1@example.com", "test")
|
login("test-student1@example.com", "test");
|
||||||
cy.visit("/course/test-lehrgang/competence/self-evaluation-and-feedback")
|
cy.visit("/course/test-lehrgang/competence/self-evaluation-and-feedback");
|
||||||
cy.get('[data-cy^="self-eval-"][data-cy$="-detail-url"]:first').contains(
|
cy.get('[data-cy^="self-eval-"][data-cy$="-detail-url"]:first').contains(
|
||||||
"Selbsteinschätzung anschauen"
|
"Selbsteinschätzung anschauen",
|
||||||
)
|
);
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
|
|
||||||
|
|
@ -123,11 +123,11 @@ describe("dashboardSupervisor.cy.js", () => {
|
||||||
'[data-cy="dashboard.stats.assignments"] [data-cy="basebox.detailsLink"]'
|
'[data-cy="dashboard.stats.assignments"] [data-cy="basebox.detailsLink"]'
|
||||||
).click();
|
).click();
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="Edoniq Wissens- und Verständisfragen - Circle Fahrzeug (Demo)"]'
|
'[data-cy="Edoniq Wissens- und Verständisfragen - Circle Fahrzeug (Demo)@-1"]'
|
||||||
).should("contain", "0 von 3 bestanden");
|
).should("contain", "0 von 3 bestanden");
|
||||||
|
|
||||||
cy.get(
|
cy.get(
|
||||||
'[data-cy="Überprüfen einer Motorfahrzeugs-Versicherungspolice"]'
|
'[data-cy="Überprüfen einer Motorfahrzeugs-Versicherungspolice@-1"]'
|
||||||
).should("contain", "0 von 3 bestanden");
|
).should("contain", "0 von 3 bestanden");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -14,29 +14,29 @@ describe("dueDates.cy.js", () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it("can filter due dates by dropbox selects", () => {
|
it("can filter due dates by dropbox selects", () => {
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 7);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 10);
|
||||||
|
|
||||||
// can filter by session
|
// can filter by session
|
||||||
selectDropboxItem('[data-cy="select-session"]', "Zürich");
|
selectDropboxItem('[data-cy="select-session"]', "Zürich");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 4);
|
||||||
selectDropboxItem('[data-cy="select-session"]', "Bern");
|
selectDropboxItem('[data-cy="select-session"]', "Bern");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 6);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 6);
|
||||||
selectDropboxItem('[data-cy="select-session"]', "Alle");
|
selectDropboxItem('[data-cy="select-session"]', "Alle");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 7);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 10);
|
||||||
|
|
||||||
// can filter by circle
|
// can filter by circle
|
||||||
selectDropboxItem('[data-cy="select-circle"]', "Fahrzeug");
|
selectDropboxItem('[data-cy="select-circle"]', "Fahrzeug");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 6);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 9);
|
||||||
selectDropboxItem('[data-cy="select-circle"]', "Reisen");
|
selectDropboxItem('[data-cy="select-circle"]', "Reisen");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
|
||||||
selectDropboxItem('[data-cy="select-circle"]', "Alle");
|
selectDropboxItem('[data-cy="select-circle"]', "Alle");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 7);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 10);
|
||||||
|
|
||||||
// can filter by types
|
// can filter by types
|
||||||
selectDropboxItem('[data-cy="select-type"]', "Präsenzkurs");
|
selectDropboxItem('[data-cy="select-type"]', "Präsenzkurs");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 3);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 3);
|
||||||
selectDropboxItem('[data-cy="select-type"]', "Bewertung");
|
selectDropboxItem('[data-cy="select-type"]', "Bewertung");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 2);
|
||||||
|
|
||||||
// combination
|
// combination
|
||||||
selectDropboxItem('[data-cy="select-session"]', "Bern");
|
selectDropboxItem('[data-cy="select-session"]', "Bern");
|
||||||
|
|
@ -44,7 +44,7 @@ describe("dueDates.cy.js", () => {
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 2);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 2);
|
||||||
selectDropboxItem('[data-cy="select-session"]', "Zürich");
|
selectDropboxItem('[data-cy="select-session"]', "Zürich");
|
||||||
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
|
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
|
||||||
selectDropboxItem('[data-cy="select-type"]', "Bewertung");
|
selectDropboxItem('[data-cy="select-type"]', "Abgabetermin Vorbereitungsauftrag");
|
||||||
cy.get('[data-cy="due-date-list"]').should("contain", "Keine Termine");
|
cy.get('[data-cy="due-date-list"]').should("contain", "Keine Termine");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
import structlog
|
import structlog
|
||||||
|
from django.utils import timezone
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from openpyxl import Workbook
|
from openpyxl import Workbook
|
||||||
|
|
||||||
|
|
@ -34,7 +36,8 @@ COMPETENCE_ELEMENT_EXPORT_FILE_NAME = _("export_kompetenznachweis_elemente")
|
||||||
@dataclass
|
@dataclass
|
||||||
class CompetenceCertificateElement:
|
class CompetenceCertificateElement:
|
||||||
assignment: Assignment
|
assignment: Assignment
|
||||||
date: DueDate
|
# date: DueDate
|
||||||
|
sort_datetime: datetime
|
||||||
learning_content: LearningContent
|
learning_content: LearningContent
|
||||||
course_session: CourseSession
|
course_session: CourseSession
|
||||||
|
|
||||||
|
|
@ -227,7 +230,7 @@ def _get_competence_certificate_elements(
|
||||||
cse = [
|
cse = [
|
||||||
CompetenceCertificateElement(
|
CompetenceCertificateElement(
|
||||||
assignment=csa.learning_content.content_assignment,
|
assignment=csa.learning_content.content_assignment,
|
||||||
date=csa.submission_deadline,
|
sort_datetime=csa.submission_deadline.start or timezone.now(),
|
||||||
learning_content=csa.learning_content,
|
learning_content=csa.learning_content,
|
||||||
course_session=csa.course_session,
|
course_session=csa.course_session,
|
||||||
)
|
)
|
||||||
|
|
@ -237,7 +240,7 @@ def _get_competence_certificate_elements(
|
||||||
cse += [
|
cse += [
|
||||||
CompetenceCertificateElement(
|
CompetenceCertificateElement(
|
||||||
assignment=cset.learning_content.content_assignment,
|
assignment=cset.learning_content.content_assignment,
|
||||||
date=cset.deadline,
|
sort_datetime=cset.deadline.start or timezone.now(),
|
||||||
learning_content=cset.learning_content,
|
learning_content=cset.learning_content,
|
||||||
course_session=cset.course_session,
|
course_session=cset.course_session,
|
||||||
)
|
)
|
||||||
|
|
@ -245,6 +248,6 @@ def _get_competence_certificate_elements(
|
||||||
]
|
]
|
||||||
|
|
||||||
# order by course_session and submission_deadline
|
# order by course_session and submission_deadline
|
||||||
cse.sort(key=lambda x: (x.course_session.title, x.date.start))
|
cse.sort(key=lambda x: (x.course_session.title, x.sort_datetime))
|
||||||
|
|
||||||
return cse
|
return cse
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ TEST_STUDENT1_USER_ID = "65c73ad0-6d53-43a9-a4a4-64143f27b03a"
|
||||||
TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900"
|
TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900"
|
||||||
TEST_STUDENT3_USER_ID = "bcf94dba-53bc-474b-a22d-e4af39aa042b"
|
TEST_STUDENT3_USER_ID = "bcf94dba-53bc-474b-a22d-e4af39aa042b"
|
||||||
TEST_MENTOR1_USER_ID = "d1f5f5a9-5b0a-4e1a-9e1a-9e9b5b5e1b1b"
|
TEST_MENTOR1_USER_ID = "d1f5f5a9-5b0a-4e1a-9e1a-9e9b5b5e1b1b"
|
||||||
|
TEST_BERUFSBILDNER1_USER_ID = "bb83dde0-27e7-4859-8acb-a323025d712c"
|
||||||
TEST_STUDENT1_VV_USER_ID = "5ff59857-8de5-415e-a387-4449f9a0337a"
|
TEST_STUDENT1_VV_USER_ID = "5ff59857-8de5-415e-a387-4449f9a0337a"
|
||||||
TEST_STUDENT2_VV_AND_VV_MENTOR_USER_ID = "7e8ebf0b-e6e2-4022-88f4-6e663ba0a9db"
|
TEST_STUDENT2_VV_AND_VV_MENTOR_USER_ID = "7e8ebf0b-e6e2-4022-88f4-6e663ba0a9db"
|
||||||
TEST_USER_EMPTY_ID = "daecbabe-4ab9-4edf-a71f-4119042ccb02"
|
TEST_USER_EMPTY_ID = "daecbabe-4ab9-4edf-a71f-4119042ccb02"
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ env.read_env()
|
||||||
|
|
||||||
from vbv_lernwelt.core.constants import (
|
from vbv_lernwelt.core.constants import (
|
||||||
ADMIN_USER_ID,
|
ADMIN_USER_ID,
|
||||||
|
TEST_BERUFSBILDNER1_USER_ID,
|
||||||
TEST_MENTOR1_USER_ID,
|
TEST_MENTOR1_USER_ID,
|
||||||
TEST_STUDENT1_USER_ID,
|
TEST_STUDENT1_USER_ID,
|
||||||
TEST_STUDENT1_VV_USER_ID,
|
TEST_STUDENT1_VV_USER_ID,
|
||||||
|
|
@ -410,6 +411,15 @@ def create_default_users(default_password="test", set_avatar=False):
|
||||||
language="de",
|
language="de",
|
||||||
avatar_image="uk1.patrizia.huggel.jpg",
|
avatar_image="uk1.patrizia.huggel.jpg",
|
||||||
)
|
)
|
||||||
|
_create_user(
|
||||||
|
_id=TEST_BERUFSBILDNER1_USER_ID,
|
||||||
|
email="test-berufsbildner1@example.com",
|
||||||
|
first_name="Ursina",
|
||||||
|
last_name="Meier-Bildner",
|
||||||
|
password=default_password,
|
||||||
|
language="de",
|
||||||
|
avatar_image="uk1.patrizia.huggel.jpg",
|
||||||
|
)
|
||||||
_create_student_user(
|
_create_student_user(
|
||||||
id=TEST_STUDENT2_VV_AND_VV_MENTOR_USER_ID,
|
id=TEST_STUDENT2_VV_AND_VV_MENTOR_USER_ID,
|
||||||
email="test-student-and-mentor2@example.com",
|
email="test-student-and-mentor2@example.com",
|
||||||
|
|
|
||||||
|
|
@ -189,7 +189,7 @@ def command(
|
||||||
SelfEvaluationFeedback.objects.all().delete()
|
SelfEvaluationFeedback.objects.all().delete()
|
||||||
CourseCompletionFeedback.objects.all().delete()
|
CourseCompletionFeedback.objects.all().delete()
|
||||||
|
|
||||||
AgentParticipantRelation.objects.all().delete()
|
AgentParticipantRelation.objects.filter(role="LEARNING_MENTOR").delete()
|
||||||
# LearningMentor.objects.all().delete()
|
# LearningMentor.objects.all().delete()
|
||||||
MentorInvitation.objects.all().delete()
|
MentorInvitation.objects.all().delete()
|
||||||
User.objects.all().update(organisation=Organisation.objects.first())
|
User.objects.all().update(organisation=Organisation.objects.first())
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ from vbv_lernwelt.competence.factories import (
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.competence.models import ActionCompetence
|
from vbv_lernwelt.competence.models import ActionCompetence
|
||||||
from vbv_lernwelt.core.constants import (
|
from vbv_lernwelt.core.constants import (
|
||||||
|
TEST_BERUFSBILDNER1_USER_ID,
|
||||||
TEST_COURSE_SESSION_BERN_ID,
|
TEST_COURSE_SESSION_BERN_ID,
|
||||||
TEST_COURSE_SESSION_ZURICH_ID,
|
TEST_COURSE_SESSION_ZURICH_ID,
|
||||||
TEST_STUDENT1_USER_ID,
|
TEST_STUDENT1_USER_ID,
|
||||||
|
|
@ -62,6 +63,7 @@ from vbv_lernwelt.course_session.models import (
|
||||||
)
|
)
|
||||||
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
|
from vbv_lernwelt.course_session_group.models import CourseSessionGroup
|
||||||
from vbv_lernwelt.feedback.services import update_feedback_response
|
from vbv_lernwelt.feedback.services import update_feedback_response
|
||||||
|
from vbv_lernwelt.learning_mentor.models import AgentParticipantRelation
|
||||||
from vbv_lernwelt.learnpath.models import (
|
from vbv_lernwelt.learnpath.models import (
|
||||||
Circle,
|
Circle,
|
||||||
LearningContentAssignment,
|
LearningContentAssignment,
|
||||||
|
|
@ -158,6 +160,14 @@ def create_test_course(
|
||||||
id=TEST_COURSE_SESSION_BERN_ID,
|
id=TEST_COURSE_SESSION_BERN_ID,
|
||||||
start_date=now,
|
start_date=now,
|
||||||
)
|
)
|
||||||
|
cs_zurich = CourseSession.objects.create(
|
||||||
|
course_id=COURSE_TEST_ID,
|
||||||
|
title="Test Zürich 2022 a",
|
||||||
|
import_id="Test Zürich 2022 a",
|
||||||
|
id=TEST_COURSE_SESSION_ZURICH_ID,
|
||||||
|
start_date=now,
|
||||||
|
)
|
||||||
|
|
||||||
csac = CourseSessionAttendanceCourse.objects.create(
|
csac = CourseSessionAttendanceCourse.objects.create(
|
||||||
course_session=cs_bern,
|
course_session=cs_bern,
|
||||||
learning_content=LearningContentAttendanceCourse.objects.get(
|
learning_content=LearningContentAttendanceCourse.objects.get(
|
||||||
|
|
@ -201,25 +211,26 @@ def create_test_course(
|
||||||
)
|
)
|
||||||
csac.due_date.save()
|
csac.due_date.save()
|
||||||
|
|
||||||
csa = CourseSessionAssignment.objects.create(
|
for course_session in [cs_bern, cs_zurich]:
|
||||||
course_session=cs_bern,
|
csa = CourseSessionAssignment.objects.create(
|
||||||
learning_content=LearningContentAssignment.objects.get(
|
course_session=course_session,
|
||||||
slug=f"{course.slug}-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"
|
learning_content=LearningContentAssignment.objects.get(
|
||||||
),
|
slug=f"{course.slug}-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"
|
||||||
)
|
),
|
||||||
next_thursday = datetime.now() + relativedelta(weekday=TH(2))
|
|
||||||
csa.submission_deadline.start = timezone.make_aware(
|
|
||||||
(next_thursday + relativedelta(weeks=3)).replace(
|
|
||||||
hour=23, minute=59, second=59, microsecond=0
|
|
||||||
)
|
)
|
||||||
)
|
next_thursday = datetime.now() + relativedelta(weekday=TH(2))
|
||||||
csa.submission_deadline.save()
|
csa.submission_deadline.start = timezone.make_aware(
|
||||||
csa.evaluation_deadline.start = timezone.make_aware(
|
(next_thursday + relativedelta(weeks=3)).replace(
|
||||||
(next_thursday + relativedelta(weeks=5)).replace(
|
hour=23, minute=59, second=59, microsecond=0
|
||||||
hour=23, minute=59, second=59, microsecond=0
|
)
|
||||||
)
|
)
|
||||||
)
|
csa.submission_deadline.save()
|
||||||
csa.evaluation_deadline.save()
|
csa.evaluation_deadline.start = timezone.make_aware(
|
||||||
|
(next_thursday + relativedelta(weeks=5)).replace(
|
||||||
|
hour=23, minute=59, second=59, microsecond=0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
csa.evaluation_deadline.save()
|
||||||
|
|
||||||
csa = CourseSessionAssignment.objects.create(
|
csa = CourseSessionAssignment.objects.create(
|
||||||
course_session=cs_bern,
|
course_session=cs_bern,
|
||||||
|
|
@ -235,18 +246,19 @@ def create_test_course(
|
||||||
)
|
)
|
||||||
csa.submission_deadline.save()
|
csa.submission_deadline.save()
|
||||||
|
|
||||||
cset = CourseSessionEdoniqTest.objects.create(
|
for course_session in [cs_bern, cs_zurich]:
|
||||||
course_session=cs_bern,
|
cset = CourseSessionEdoniqTest.objects.create(
|
||||||
learning_content=LearningContentEdoniqTest.objects.get(
|
course_session=course_session,
|
||||||
slug="test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verständnisfragen"
|
learning_content=LearningContentEdoniqTest.objects.get(
|
||||||
),
|
slug="test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verständnisfragen"
|
||||||
)
|
),
|
||||||
cset.deadline.start = timezone.make_aware(
|
|
||||||
(next_monday + relativedelta(days=3)).replace(
|
|
||||||
hour=21, minute=0, second=0, microsecond=0
|
|
||||||
)
|
)
|
||||||
)
|
cset.deadline.start = timezone.make_aware(
|
||||||
cset.deadline.save()
|
(next_monday + relativedelta(days=3)).replace(
|
||||||
|
hour=21, minute=0, second=0, microsecond=0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
cset.deadline.save()
|
||||||
|
|
||||||
if include_vv:
|
if include_vv:
|
||||||
_csa = CourseSessionAssignment.objects.create(
|
_csa = CourseSessionAssignment.objects.create(
|
||||||
|
|
@ -256,13 +268,6 @@ def create_test_course(
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
cs_zurich = CourseSession.objects.create(
|
|
||||||
course_id=COURSE_TEST_ID,
|
|
||||||
title="Test Zürich 2022 a",
|
|
||||||
import_id="Test Zürich 2022 a",
|
|
||||||
id=TEST_COURSE_SESSION_ZURICH_ID,
|
|
||||||
start_date=now,
|
|
||||||
)
|
|
||||||
csac = CourseSessionAttendanceCourse.objects.create(
|
csac = CourseSessionAttendanceCourse.objects.create(
|
||||||
course_session=cs_zurich,
|
course_session=cs_zurich,
|
||||||
learning_content=LearningContentAttendanceCourse.objects.get(
|
learning_content=LearningContentAttendanceCourse.objects.get(
|
||||||
|
|
@ -322,6 +327,40 @@ def create_test_course(
|
||||||
user=User.objects.get(id=TEST_STUDENT3_USER_ID),
|
user=User.objects.get(id=TEST_STUDENT3_USER_ID),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# add berufsbildner
|
||||||
|
AgentParticipantRelation.objects.create(
|
||||||
|
agent=User.objects.get(id=TEST_BERUFSBILDNER1_USER_ID),
|
||||||
|
participant=CourseSessionUser.objects.get(
|
||||||
|
user__id=TEST_STUDENT1_USER_ID,
|
||||||
|
course_session=cs_bern,
|
||||||
|
),
|
||||||
|
role="BERUFSBILDNER",
|
||||||
|
)
|
||||||
|
AgentParticipantRelation.objects.create(
|
||||||
|
agent=User.objects.get(id=TEST_BERUFSBILDNER1_USER_ID),
|
||||||
|
participant=CourseSessionUser.objects.get(
|
||||||
|
user__id=TEST_STUDENT2_USER_ID,
|
||||||
|
course_session=cs_bern,
|
||||||
|
),
|
||||||
|
role="BERUFSBILDNER",
|
||||||
|
)
|
||||||
|
AgentParticipantRelation.objects.create(
|
||||||
|
agent=User.objects.get(id=TEST_BERUFSBILDNER1_USER_ID),
|
||||||
|
participant=CourseSessionUser.objects.get(
|
||||||
|
user__id=TEST_STUDENT2_USER_ID,
|
||||||
|
course_session=cs_zurich,
|
||||||
|
),
|
||||||
|
role="BERUFSBILDNER",
|
||||||
|
)
|
||||||
|
AgentParticipantRelation.objects.create(
|
||||||
|
agent=User.objects.get(id=TEST_BERUFSBILDNER1_USER_ID),
|
||||||
|
participant=CourseSessionUser.objects.get(
|
||||||
|
user__id=TEST_STUDENT3_USER_ID,
|
||||||
|
course_session=cs_bern,
|
||||||
|
),
|
||||||
|
role="BERUFSBILDNER",
|
||||||
|
)
|
||||||
|
|
||||||
return course
|
return course
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,8 +92,8 @@ def create_assignment_summary(
|
||||||
total_failed = sum([m.failed_count for m in completed_metrics])
|
total_failed = sum([m.failed_count for m in completed_metrics])
|
||||||
|
|
||||||
total_average_evaluation_percent = (
|
total_average_evaluation_percent = (
|
||||||
sum([m.average_evaluation_percent for m in completed_metrics]) / completed_count
|
sum([m.average_evaluation_percent for m in completed_metrics]) or 0
|
||||||
)
|
) / (completed_count or 1)
|
||||||
|
|
||||||
return AssignmentStatisticsSummaryType(
|
return AssignmentStatisticsSummaryType(
|
||||||
_id=urql_id, # noqa
|
_id=urql_id, # noqa
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,8 @@ class CourseSessionUserTests(TestCase):
|
||||||
|
|
||||||
self.csu1_student1.delete()
|
self.csu1_student1.delete()
|
||||||
|
|
||||||
self.assertEqual(mock_remove_roles_from_user.call_count, 1)
|
# course_session_user and agent_participant_relation will call signal
|
||||||
|
self.assertEqual(mock_remove_roles_from_user.call_count, 2)
|
||||||
|
|
||||||
mock_remove_roles_from_user.assert_called_with(
|
mock_remove_roles_from_user.assert_called_with(
|
||||||
self.student1, [(self.csu1_student1.course_session.course.slug, "MEMBER")]
|
self.student1, [(self.csu1_student1.course_session.course.slug, "MEMBER")]
|
||||||
|
|
@ -67,7 +68,9 @@ class CourseSessionUserTests(TestCase):
|
||||||
def test_dont_remove_roles_for_multiple_roles_in_cs(
|
def test_dont_remove_roles_for_multiple_roles_in_cs(
|
||||||
self, mock_remove_roles_from_user
|
self, mock_remove_roles_from_user
|
||||||
):
|
):
|
||||||
|
AgentParticipantRelation.objects.filter(participant=self.csu1_student2).delete()
|
||||||
mock_remove_roles_from_user.return_value = None
|
mock_remove_roles_from_user.return_value = None
|
||||||
|
mock_remove_roles_from_user.reset_mock()
|
||||||
|
|
||||||
self.csu1_student2.delete()
|
self.csu1_student2.delete()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue