VBV-584 feat: only show "Kompetenznachweis-Elemente" in Regio-Dashboard Arbeiten
This commit is contained in:
parent
25c6021b82
commit
be2488ff73
|
|
@ -45,7 +45,7 @@ const total = (metrics: AssignmentCompletionMetricsType) => {
|
|||
<template>
|
||||
<main v-if="statistics">
|
||||
<div class="mb-10 flex items-center justify-between">
|
||||
<h3>{{ $t("a.Arbeiten") }}</h3>
|
||||
<h3>{{ $t("a.Kompetenznachweis-Elemente") }}</h3>
|
||||
<ItDropdownSelect
|
||||
:model-value="dashboardStore.currentDashboardConfig"
|
||||
class="mt-4 w-full lg:mt-0 lg:w-96"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
import {login} from "../helpers";
|
||||
import { login } from "../helpers";
|
||||
|
||||
// ignore automatic import mess-up...
|
||||
|
||||
const getDashboardStatistics = (what) => {
|
||||
return cy.get(`[data-cy="dashboard.stats.${what}"]`);
|
||||
|
|
@ -7,12 +9,14 @@ const getDashboardStatistics = (what) => {
|
|||
const clickOnDetailsLink = (within) => {
|
||||
cy.get(`[data-cy="dashboard.stats.${within}"]`).within(() => {
|
||||
cy.get('[data-cy="basebox.detailsLink"]').click();
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
describe("dashboardSupervisor.cy.js", () => {
|
||||
beforeEach(() => {
|
||||
cy.manageCommand("cypress_reset --create-assignment-evaluation --create-feedback-responses --create-course-completion-performance-criteria --create-attendance-days");
|
||||
cy.manageCommand(
|
||||
"cypress_reset --create-assignment-evaluation --create-feedback-responses --create-course-completion-performance-criteria --create-attendance-days"
|
||||
);
|
||||
login("test-supervisor1@example.com", "test");
|
||||
cy.visit("/");
|
||||
});
|
||||
|
|
@ -31,15 +35,21 @@ describe("dashboardSupervisor.cy.js", () => {
|
|||
// might be improved: roughly check
|
||||
// that the correct data is displayed
|
||||
cy.contains("Noch nicht bestätigt");
|
||||
cy.contains("Fahrzeug - Mein erstes Auto");
|
||||
cy.contains("Überprüfen einer Motorfahrzeugs-Versicherungspolice");
|
||||
cy.contains("Test Bern 2022 a");
|
||||
});
|
||||
});
|
||||
|
||||
describe("attendance day summary box", () => {
|
||||
it("contains correct numbers", () => {
|
||||
getDashboardStatistics("attendance.dayCompleted").should("have.text", "1");
|
||||
getDashboardStatistics("attendance.participantsPresent").should("have.text", "34%");
|
||||
getDashboardStatistics("attendance.dayCompleted").should(
|
||||
"have.text",
|
||||
"1"
|
||||
);
|
||||
getDashboardStatistics("attendance.participantsPresent").should(
|
||||
"have.text",
|
||||
"34%"
|
||||
);
|
||||
});
|
||||
it("contains correct details link", () => {
|
||||
clickOnDetailsLink("attendance");
|
||||
|
|
@ -53,7 +63,6 @@ describe("dashboardSupervisor.cy.js", () => {
|
|||
});
|
||||
});
|
||||
|
||||
|
||||
describe("overall summary box", () => {
|
||||
it("contains correct numbers (members, experts etc.)", () => {
|
||||
getDashboardStatistics("participant.count").should("have.text", "4");
|
||||
|
|
@ -66,7 +75,6 @@ describe("dashboardSupervisor.cy.js", () => {
|
|||
it("contains correct numbers", () => {
|
||||
getDashboardStatistics("feedback.average").should("have.text", "3.3");
|
||||
getDashboardStatistics("feedback.count").should("have.text", "3");
|
||||
|
||||
});
|
||||
it("contains correct details link", () => {
|
||||
clickOnDetailsLink("feedback");
|
||||
|
|
@ -76,8 +84,8 @@ describe("dashboardSupervisor.cy.js", () => {
|
|||
// that the correct data is displayed
|
||||
cy.contains("3.3 von 4");
|
||||
cy.contains("Test Trainer1");
|
||||
cy.contains("Durchführung «Test Bern 2022 a»")
|
||||
cy.contains("Circle «Fahrzeug»")
|
||||
cy.contains("Durchführung «Test Bern 2022 a»");
|
||||
cy.contains("Circle «Fahrzeug»");
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -94,8 +102,7 @@ describe("dashboardSupervisor.cy.js", () => {
|
|||
// that the correct data is displayed
|
||||
cy.contains("Selbsteinschätzung: Vorbereitung");
|
||||
cy.contains("Durchführung «Test Bern 2022 a»");
|
||||
cy.contains("Circle «Fahrzeug»")
|
||||
cy.contains("Circle «Fahrzeug»");
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
|||
|
|
@ -19,8 +19,10 @@ from vbv_lernwelt.competence.factories import (
|
|||
ActionCompetenceListPageFactory,
|
||||
CompetenceNaviPageFactory,
|
||||
PerformanceCriteriaFactory,
|
||||
CompetenceCertificateListFactory,
|
||||
CompetenceCertificateFactory,
|
||||
)
|
||||
from vbv_lernwelt.competence.models import PerformanceCriteria
|
||||
from vbv_lernwelt.competence.models import PerformanceCriteria, CompetenceCertificate
|
||||
from vbv_lernwelt.core.models import User
|
||||
from vbv_lernwelt.course.factories import CoursePageFactory
|
||||
from vbv_lernwelt.course.models import (
|
||||
|
|
@ -160,6 +162,12 @@ def create_attendance_course(
|
|||
)
|
||||
|
||||
|
||||
def create_competence_certificate(course: Course) -> CompetenceCertificate:
|
||||
navi = CompetenceNaviPageFactory(parent=course.coursepage)
|
||||
certificate_list = CompetenceCertificateListFactory(parent=navi)
|
||||
return CompetenceCertificateFactory(parent=certificate_list)
|
||||
|
||||
|
||||
def create_assignment(
|
||||
course: Course,
|
||||
assignment_type: AssignmentType,
|
||||
|
|
|
|||
|
|
@ -121,12 +121,14 @@ def create_record(
|
|||
|
||||
return AssignmentStatisticsRecordType(
|
||||
# make sure it's unique, across all types of assignments!
|
||||
_id=f"{course_session_assignment._meta.model_name}#{course_session_assignment.id}", # noqa
|
||||
_id=f"{course_session_assignment._meta.model_name}#{course_session_assignment.id}",
|
||||
# noqa
|
||||
course_session_id=str(course_session_assignment.course_session.id), # noqa
|
||||
circle_id=learning_content.get_circle().id, # noqa
|
||||
course_session_assignment_id=str(course_session_assignment.id), # noqa
|
||||
generation=course_session_assignment.course_session.generation, # noqa
|
||||
assignment_type_translation_key=due_date.assignment_type_translation_key, # noqa
|
||||
assignment_type_translation_key=due_date.assignment_type_translation_key,
|
||||
# noqa
|
||||
assignment_title=learning_content.content_assignment.title, # noqa
|
||||
metrics=get_assignment_completion_metrics( # noqa
|
||||
course_session=course_session_assignment.course_session, # noqa
|
||||
|
|
@ -149,16 +151,17 @@ def assignments(
|
|||
for course_session in course_sessions:
|
||||
for csa in CourseSessionAssignment.objects.filter(
|
||||
course_session=course_session,
|
||||
learning_content__assignment_type__in=[
|
||||
learning_content__content_assignment__assignment_type__in=[
|
||||
AssignmentType.CASEWORK.value,
|
||||
AssignmentType.PREP_ASSIGNMENT.value,
|
||||
],
|
||||
learning_content__content_assignment__competence_certificate__isnull=False,
|
||||
):
|
||||
record = create_record(course_session_assignment=csa)
|
||||
records.append(record)
|
||||
|
||||
for cset in CourseSessionEdoniqTest.objects.filter(
|
||||
course_session=course_session
|
||||
course_session=course_session,
|
||||
learning_content__content_assignment__competence_certificate__isnull=False,
|
||||
):
|
||||
record = create_record(course_session_assignment=cset)
|
||||
records.append(record)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ from vbv_lernwelt.course.creators.test_utils import (
|
|||
create_course_session_edoniq_test,
|
||||
create_course_session_group,
|
||||
create_user,
|
||||
create_competence_certificate,
|
||||
)
|
||||
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
|
||||
from vbv_lernwelt.course_session.models import (
|
||||
|
|
@ -101,11 +102,6 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
assignment_type=AssignmentType.CASEWORK
|
||||
)
|
||||
|
||||
def test_dashboard_contains_prep_assignments(self):
|
||||
self._test_assignment_type_dashboard_details(
|
||||
assignment_type=AssignmentType.PREP_ASSIGNMENT
|
||||
)
|
||||
|
||||
def test_dashboard_contains_edoniq_tests(self):
|
||||
self._test_assignment_type_dashboard_details(
|
||||
assignment_type=AssignmentType.EDONIQ_TEST
|
||||
|
|
@ -120,7 +116,6 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
|
||||
irrelevant_types_for_dashboard = set(AssignmentType) - {
|
||||
AssignmentType.CASEWORK,
|
||||
AssignmentType.PREP_ASSIGNMENT,
|
||||
AssignmentType.EDONIQ_TEST,
|
||||
}
|
||||
|
||||
|
|
@ -134,6 +129,7 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
deadline_at=datetime(2000, 4, 1),
|
||||
course_session=self.course_session,
|
||||
circle=self.circle,
|
||||
add_competence_certificate=True,
|
||||
)
|
||||
|
||||
create_assignment_completion(
|
||||
|
|
@ -203,6 +199,7 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
assignment_type=AssignmentType.CASEWORK,
|
||||
course_session=self.course_session,
|
||||
circle=self.circle,
|
||||
add_competence_certificate=True,
|
||||
)
|
||||
|
||||
assignment_2, _ = mix_assignment_cocktail(
|
||||
|
|
@ -210,13 +207,15 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
assignment_type=AssignmentType.EDONIQ_TEST,
|
||||
course_session=self.course_session,
|
||||
circle=self.circle,
|
||||
add_competence_certificate=True,
|
||||
)
|
||||
|
||||
assignment_3, _ = mix_assignment_cocktail(
|
||||
deadline_at=datetime(2010, 4, 1),
|
||||
assignment_type=AssignmentType.PREP_ASSIGNMENT,
|
||||
assignment_type=AssignmentType.CASEWORK,
|
||||
course_session=self.course_session,
|
||||
circle=self.circle,
|
||||
add_competence_certificate=True,
|
||||
)
|
||||
|
||||
# no completions for this assignment yet
|
||||
|
|
@ -225,6 +224,7 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
assignment_type=AssignmentType.EDONIQ_TEST,
|
||||
course_session=self.course_session,
|
||||
circle=self.circle,
|
||||
add_competence_certificate=False,
|
||||
)
|
||||
|
||||
# assignment 1
|
||||
|
|
@ -285,13 +285,13 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
# 1 -> incomplete (not counted for average)
|
||||
# 2 -> complete 66% passed ...
|
||||
# 3 -> complete 100% passed --> 83.5%
|
||||
# 4 -> incomplete (not counted for average)
|
||||
# 4 -> not included in certificate
|
||||
summary = dashboard["assignments"]["summary"]
|
||||
self.assertEqual(summary["completed_count"], 2)
|
||||
self.assertEqual(summary["average_passed"], 83.5)
|
||||
|
||||
records = dashboard["assignments"]["records"]
|
||||
self.assertEqual(len(records), 4)
|
||||
self.assertEqual(len(records), 3)
|
||||
|
||||
# 1 -> assigment_1_results (oldest)
|
||||
assignment_1_metrics = records[0]["metrics"]
|
||||
|
|
@ -317,19 +317,12 @@ class AssignmentTestCase(GraphQLTestCase):
|
|||
self.assertEqual(assignment_3_metrics["ranking_completed"], True)
|
||||
self.assertEqual(assignment_3_metrics["average_passed"], 100)
|
||||
|
||||
# 4 -> no completions (newest)
|
||||
assignment_4_metrics = records[3]["metrics"]
|
||||
self.assertEqual(assignment_4_metrics["passed_count"], 0)
|
||||
self.assertEqual(assignment_4_metrics["failed_count"], 0)
|
||||
self.assertEqual(assignment_4_metrics["unranked_count"], 3)
|
||||
self.assertEqual(assignment_4_metrics["ranking_completed"], False)
|
||||
self.assertEqual(assignment_4_metrics["average_passed"], 0)
|
||||
|
||||
|
||||
def mix_assignment_cocktail(
|
||||
assignment_type: AssignmentType,
|
||||
course_session: CourseSession,
|
||||
circle: Circle,
|
||||
add_competence_certificate: bool = False,
|
||||
deadline_at: datetime | None = None,
|
||||
) -> Tuple[Assignment, CourseSessionAssignment | CourseSessionEdoniqTest]:
|
||||
"""
|
||||
|
|
@ -338,9 +331,15 @@ def mix_assignment_cocktail(
|
|||
"""
|
||||
|
||||
assignment = create_assignment(
|
||||
course=course_session.course, assignment_type=assignment_type
|
||||
course=course_session.course,
|
||||
assignment_type=assignment_type,
|
||||
)
|
||||
|
||||
if add_competence_certificate:
|
||||
certificate = create_competence_certificate(course=course_session.course)
|
||||
assignment.competence_certificate = certificate
|
||||
assignment.save()
|
||||
|
||||
if assignment_type == AssignmentType.EDONIQ_TEST:
|
||||
cset = create_course_session_edoniq_test(
|
||||
deadline_at=deadline_at,
|
||||
|
|
|
|||
Loading…
Reference in New Issue