VBV-584 feat: only show "Kompetenznachweis-Elemente" in Regio-Dashboard Arbeiten

This commit is contained in:
Daniel Egger 2023-11-07 13:57:24 +01:00
parent 25c6021b82
commit be2488ff73
5 changed files with 54 additions and 37 deletions

View File

@ -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"

View File

@ -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»");
});
});
});

View File

@ -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,

View File

@ -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)

View File

@ -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,