@@ -123,6 +123,7 @@ const itemDetailUrl = (item: AssignmentStatisticsRecordType) => {
{{ $t("a.Details anschauen") }}
diff --git a/client/src/pages/userProfile/CompetenceProfilePage.vue b/client/src/pages/userProfile/CompetenceProfilePage.vue
index 58fdb156..fccf43f6 100644
--- a/client/src/pages/userProfile/CompetenceProfilePage.vue
+++ b/client/src/pages/userProfile/CompetenceProfilePage.vue
@@ -84,6 +84,7 @@ const route = useRoute();
entry.routeMatch.includes(convertRouteRecordNameToString(record?.name))
),
}"
+ :data-cy="`side-menu-${entry.routeMatch[0]}`"
>
{{ $t(entry.label) }}
diff --git a/client/src/types.ts b/client/src/types.ts
index fcd32d40..93ed9552 100644
--- a/client/src/types.ts
+++ b/client/src/types.ts
@@ -401,6 +401,9 @@ export interface CompetenceCertificateAssignment extends BaseCourseWagtailPage {
| null;
completions: {
id: string;
+ assignment_user: {
+ id: string;
+ };
completion_status: AssignmentCompletionStatus;
evaluation_submitted_at: string | null;
evaluation_points: number | null;
diff --git a/cypress/e2e/berufsbildner/berufsbildner.cy.js b/cypress/e2e/berufsbildner/berufsbildner.cy.js
new file mode 100644
index 00000000..583530f1
--- /dev/null
+++ b/cypress/e2e/berufsbildner/berufsbildner.cy.js
@@ -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");
+ });
+});
diff --git a/cypress/e2e/competenceNavi/competenceCertificate.cy.js b/cypress/e2e/competenceNavi/competenceCertificate.cy.js
index 86cf58a1..8d014348 100644
--- a/cypress/e2e/competenceNavi/competenceCertificate.cy.js
+++ b/cypress/e2e/competenceNavi/competenceCertificate.cy.js
@@ -1,392 +1,404 @@
-import { login } from "../helpers"
+import { login } from "../helpers";
describe("competenceCertificate.cy.js", () => {
- beforeEach(() => { })
+ beforeEach(() => {});
it("check without points", () => {
- cy.manageCommand("cypress_reset")
- login("test-student1@example.com", "test")
- cy.visit("/course/test-lehrgang/competence")
+ cy.manageCommand("cypress_reset");
+ login("test-student1@example.com", "test");
+ cy.visit("/course/test-lehrgang/competence");
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(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
- ).and("contain", "0 von 2 Kompetenznachweis-Elementen")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
+ ).and("contain", "0 von 2 Kompetenznachweis-Elementen");
// 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(
- "Der Punktestand wird zu einem späteren Zeitpunkt berechnet."
- )
+ "Der Punktestand wird zu einem späteren Zeitpunkt berechnet.",
+ );
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
)
.should(
"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
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
- ).click()
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
+ ).click();
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]'
- ).should("contain", "Höchstpunktzahl")
+ '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"]',
+ ).should("contain", "Höchstpunktzahl");
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]'
- ).should("contain", "Höchstpunktzahl")
- })
+ '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"]',
+ ).should("contain", "Höchstpunktzahl");
+ });
it("check with finished passed edoniq test", () => {
cy.manageCommand(
- "cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 0"
- )
- login("test-student1@example.com", "test")
- cy.visit("/course/test-lehrgang/competence")
+ "cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 0",
+ );
+ login("test-student1@example.com", "test");
+ cy.visit("/course/test-lehrgang/competence");
cy.get('[data-cy="certificate-total-points-text"]').contains(
- "Erfahrungsnote üK: 5"
- )
+ "Erfahrungsnote üK: 5",
+ );
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
)
.should("contain", "Note: 5")
- .and("contain", "1 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "1 von 2 Kompetenznachweis-Elementen");
// 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"]')
.should("contain", "Erfahrungsnote üK")
- .and("contain", "Zwischenstand")
- cy.get('[data-cy="certificate-total-grade"]').should("contain", "Note: 5")
+ .and("contain", "Zwischenstand");
+ cy.get('[data-cy="certificate-total-grade"]').should("contain", "Note: 5");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
- ).should("contain", "Note: 5")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
+ ).should("contain", "Note: 5");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
- ).should("contain", "Ungerundete Note: 4.96")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
+ ).should("contain", "Ungerundete Note: 4.96");
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", "1 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "1 von 2 Kompetenznachweis-Elementen");
// check certificate detail page
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
- ).click()
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
+ ).click();
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")
- .and("contain", "Ergebnisse abgegeben")
+ .and("contain", "Ergebnisse abgegeben");
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")
.and("contain", "Bewertung freigegeben")
- .and("not.contain", "Nicht Bestanden")
+ .and("not.contain", "Nicht Bestanden");
// it can open learning content page directly
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
- ).click()
+ '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
+ ).click();
cy.get('[data-cy="test-result"]')
.should("contain", "19 von 24 Punkten")
- .and("contain", "79%")
- })
+ .and("contain", "79%");
+ });
it("check with finished failed edoniq test", () => {
cy.manageCommand(
- "cypress_reset --create-assignment-completion --create-edoniq-test-results 10 24 0"
- )
- login("test-student1@example.com", "test")
+ "cypress_reset --create-assignment-completion --create-edoniq-test-results 10 24 0",
+ );
+ login("test-student1@example.com", "test");
// go to certificate detail page
cy.visit(
- "/course/test-lehrgang/competence/certificates/kompetenznachweis-1"
- )
+ "/course/test-lehrgang/competence/certificates/kompetenznachweis-1",
+ );
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
- ).should("contain", "Note: 3")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
+ ).should("contain", "Note: 3");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
- ).should("contain", "Ungerundete Note: 3.08")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
+ ).should("contain", "Ungerundete Note: 3.08");
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")
.and("contain", "Bewertung freigegeben")
.and("contain", "42%")
- .and("contain", "Nicht bestanden")
+ .and("contain", "Nicht bestanden");
// it can open learning content page directly
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
- ).click()
+ '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
+ ).click();
cy.get('[data-cy="test-result"]')
.should("contain", "10 von 24 Punkten")
.and("contain", "42%")
- .and("contain", "Nicht bestanden")
- })
+ .and("contain", "Nicht bestanden");
+ });
it("check with finished edoniq test and finished casework", () => {
cy.manageCommand(
- "cypress_reset --create-assignment-evaluation --create-edoniq-test-results 19 24 0"
- )
- login("test-student1@example.com", "test")
- cy.visit("/course/test-lehrgang/competence")
+ "cypress_reset --create-assignment-evaluation --create-edoniq-test-results 19 24 0",
+ );
+ login("test-student1@example.com", "test");
+ cy.visit("/course/test-lehrgang/competence");
cy.get('[data-cy="certificate-total-points-text"]').contains(
- "Erfahrungsnote üK: 5.5"
- )
+ "Erfahrungsnote üK: 5.5",
+ );
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")
- .and("contain", "2 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "2 von 2 Kompetenznachweis-Elementen");
// 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"]')
.should("contain", "Erfahrungsnote üK")
.and("contain", "Note: 5.5")
- .and("not.contain", "Zwischenstand")
+ .and("not.contain", "Zwischenstand");
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("contain", "2 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "2 von 2 Kompetenznachweis-Elementen");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
- ).should("contain", "Note: 5.5")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
+ ).should("contain", "Note: 5.5");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
- ).should("contain", "Ungerundete Note: 5.48")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
+ ).should("contain", "Ungerundete Note: 5.48");
// check certificate detail page
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
- ).click()
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
+ ).click();
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")
.and("contain", "von 24 Punkten")
- .and("contain", "Bewertung freigegeben")
+ .and("contain", "Bewertung freigegeben");
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")
.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", () => {
- 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
+ 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")
+ `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");
cy.get('[data-cy="certificate-total-points-text"]').contains(
- "Erfahrungsnote üK: 5.5"
- )
+ "Erfahrungsnote üK: 5.5",
+ );
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")
- .and("contain", "2 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "2 von 2 Kompetenznachweis-Elementen");
// 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"]')
.should("contain", "Erfahrungsnote üK")
.and("contain", "Note: 5.5")
- .and("not.contain", "Zwischenstand")
+ .and("not.contain", "Zwischenstand");
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("contain", "2 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "2 von 2 Kompetenznachweis-Elementen");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
- ).should("contain", "Note: 5.5")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
+ ).should("contain", "Note: 5.5");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
- ).should("contain", "Ungerundete Note: 5.48")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
+ ).should("contain", "Ungerundete Note: 5.48");
// check certificate detail page
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
- ).click()
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
+ ).click();
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")
.and("contain", "von 24 Punkten")
- .and("contain", "Bewertung freigegeben")
+ .and("contain", "Bewertung freigegeben");
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")
.and("contain", "von 24 Punkten")
- .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")
+ .and("contain", "Bewertung freigegeben");
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
- ).click()
+ '[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");
+ });
- 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", () => {
cy.manageCommand(
- "cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 8"
- )
- login("test-student1@example.com", "test")
+ "cypress_reset --create-assignment-completion --create-edoniq-test-results 19 24 8",
+ );
+ login("test-student1@example.com", "test");
// go to certificate detail page
cy.visit(
- "/course/test-lehrgang/competence/certificates/kompetenznachweis-1"
- )
+ "/course/test-lehrgang/competence/certificates/kompetenznachweis-1",
+ );
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
- ).should("contain", "Note: 3.5")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
+ ).should("contain", "Note: 3.5");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
- ).should("contain", "Ungerundete Note: 3.29")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
+ ).should("contain", "Ungerundete Note: 3.29");
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")
.and("contain", "Bewertung freigegeben")
.and("contain", "46%")
.and("contain", "mit Abzug")
- .and("contain", "Nicht bestanden")
+ .and("contain", "Nicht bestanden");
// it can open learning content page directly
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]'
- ).click()
+ '[data-cy="assignment-test-lehrgang-assignment-edoniq-wissens-und-verständisfragen-circle-fahrzeug-demo"] [data-cy="open-learning-content"]',
+ ).click();
cy.get('[data-cy="test-result"]')
.should("contain", "11 von 24 Punkten")
.and("contain", "46%")
.and("contain", "Punkte aus Bewertung: 19")
.and("contain", "Abgezogene Punkte: 8")
.and("contain", "Grund: Edoniq Punkteabzug Test")
- .and("contain", "Nicht bestanden")
- })
+ .and("contain", "Nicht bestanden");
+ });
it("check with finished casework and points deducted", () => {
cy.manageCommand(
- "cypress_reset --create-assignment-evaluation --assignment-evaluation-scores 4,6,4,3,2 --assignment-points-deducted 5"
- )
- login("test-student1@example.com", "test")
- cy.visit("/course/test-lehrgang/competence")
+ "cypress_reset --create-assignment-evaluation --assignment-evaluation-scores 4,6,4,3,2 --assignment-points-deducted 5",
+ );
+ login("test-student1@example.com", "test");
+ cy.visit("/course/test-lehrgang/competence");
cy.get('[data-cy="certificate-total-points-text"]').contains(
- "Erfahrungsnote üK: 4"
- )
+ "Erfahrungsnote üK: 4",
+ );
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]'
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1"]',
)
.should("contain", "Note: 4")
- .and("contain", "1 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "1 von 2 Kompetenznachweis-Elementen");
// 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"]')
.should("contain", "Erfahrungsnote üK")
.and("contain", "Note: 4")
- .and("contain", "Zwischenstand")
+ .and("contain", "Zwischenstand");
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", "1 von 2 Kompetenznachweis-Elementen")
+ .and("contain", "1 von 2 Kompetenznachweis-Elementen");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]'
- ).should("contain", "Note: 4")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade"]',
+ ).should("contain", "Note: 4");
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]'
- ).should("contain", "Ungerundete Note: 3.92")
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-grade-percent"]',
+ ).should("contain", "Ungerundete Note: 3.92");
// check certificate detail page
cy.get(
- '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]'
- ).click()
+ '[data-cy="certificate-test-lehrgang-competencenavi-certificates-kompetenznachweis-1-detail-link"]',
+ ).click();
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")
.and("contain", "von 24 Punkten")
.and("contain", "58%")
.and("contain", "mit Abzug")
- .and("contain", "Bewertung freigegeben")
+ .and("contain", "Bewertung freigegeben");
cy.get(
- '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"] [data-cy="open-learning-content"]'
- ).click()
- cy.get('[data-cy="user-points"]').should("contain", "14")
+ '[data-cy="assignment-test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice"] [data-cy="open-learning-content"]',
+ ).click();
+ cy.get('[data-cy="user-points"]').should("contain", "14");
cy.get('[data-cy="total-points"]').should(
"contain",
- "von 24 Punkten (58%)"
- )
+ "von 24 Punkten (58%)",
+ );
cy.get('[data-cy="points-deducted"]')
.should("contain", "Punkte aus Bewertung: 19")
.and("contain", "Abgezogene Punkte: 5")
- .and("contain", "Grund: Assignment Punkteabzug Test")
- })
+ .and("contain", "Grund: Assignment Punkteabzug Test");
+ });
it("should display link to details", () => {
- cy.manageCommand("cypress_reset")
- login("test-student1@example.com", "test")
- cy.visit("/course/test-lehrgang/competence/self-evaluation-and-feedback")
+ cy.manageCommand("cypress_reset");
+ login("test-student1@example.com", "test");
+ cy.visit("/course/test-lehrgang/competence/self-evaluation-and-feedback");
cy.get('[data-cy^="self-eval-"][data-cy$="-detail-url"]:first').contains(
- "Selbsteinschätzung anschauen"
- )
- })
-})
+ "Selbsteinschätzung anschauen",
+ );
+ });
+});
diff --git a/cypress/e2e/dashboard/dashboardSupervisor.cy.js b/cypress/e2e/dashboard/dashboardSupervisor.cy.js
index edf704b6..9e944dbd 100644
--- a/cypress/e2e/dashboard/dashboardSupervisor.cy.js
+++ b/cypress/e2e/dashboard/dashboardSupervisor.cy.js
@@ -123,11 +123,11 @@ describe("dashboardSupervisor.cy.js", () => {
'[data-cy="dashboard.stats.assignments"] [data-cy="basebox.detailsLink"]'
).click();
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");
cy.get(
- '[data-cy="Überprüfen einer Motorfahrzeugs-Versicherungspolice"]'
+ '[data-cy="Überprüfen einer Motorfahrzeugs-Versicherungspolice@-1"]'
).should("contain", "0 von 3 bestanden");
});
});
diff --git a/cypress/e2e/dueDates.cy.js b/cypress/e2e/dueDates.cy.js
index 8939158b..f4fc87e3 100644
--- a/cypress/e2e/dueDates.cy.js
+++ b/cypress/e2e/dueDates.cy.js
@@ -14,29 +14,29 @@ describe("dueDates.cy.js", () => {
});
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
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");
cy.get('[data-cy="due-date-list"]').children().should("have.length", 6);
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
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");
cy.get('[data-cy="due-date-list"]').children().should("have.length", 1);
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
selectDropboxItem('[data-cy="select-type"]', "Präsenzkurs");
cy.get('[data-cy="due-date-list"]').children().should("have.length", 3);
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
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);
selectDropboxItem('[data-cy="select-session"]', "Zürich");
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");
});
});
diff --git a/server/vbv_lernwelt/assignment/export.py b/server/vbv_lernwelt/assignment/export.py
index 230cb661..fada4f82 100644
--- a/server/vbv_lernwelt/assignment/export.py
+++ b/server/vbv_lernwelt/assignment/export.py
@@ -1,7 +1,9 @@
from dataclasses import dataclass
+from datetime import datetime
from io import BytesIO
import structlog
+from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from openpyxl import Workbook
@@ -34,7 +36,8 @@ COMPETENCE_ELEMENT_EXPORT_FILE_NAME = _("export_kompetenznachweis_elemente")
@dataclass
class CompetenceCertificateElement:
assignment: Assignment
- date: DueDate
+ # date: DueDate
+ sort_datetime: datetime
learning_content: LearningContent
course_session: CourseSession
@@ -227,7 +230,7 @@ def _get_competence_certificate_elements(
cse = [
CompetenceCertificateElement(
assignment=csa.learning_content.content_assignment,
- date=csa.submission_deadline,
+ sort_datetime=csa.submission_deadline.start or timezone.now(),
learning_content=csa.learning_content,
course_session=csa.course_session,
)
@@ -237,7 +240,7 @@ def _get_competence_certificate_elements(
cse += [
CompetenceCertificateElement(
assignment=cset.learning_content.content_assignment,
- date=cset.deadline,
+ sort_datetime=cset.deadline.start or timezone.now(),
learning_content=cset.learning_content,
course_session=cset.course_session,
)
@@ -245,6 +248,6 @@ def _get_competence_certificate_elements(
]
# 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
diff --git a/server/vbv_lernwelt/core/constants.py b/server/vbv_lernwelt/core/constants.py
index e36702b8..dd19d88a 100644
--- a/server/vbv_lernwelt/core/constants.py
+++ b/server/vbv_lernwelt/core/constants.py
@@ -25,6 +25,7 @@ TEST_STUDENT1_USER_ID = "65c73ad0-6d53-43a9-a4a4-64143f27b03a"
TEST_STUDENT2_USER_ID = "19c40d94-15cc-4198-aaad-ef707c4b0900"
TEST_STUDENT3_USER_ID = "bcf94dba-53bc-474b-a22d-e4af39aa042b"
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_STUDENT2_VV_AND_VV_MENTOR_USER_ID = "7e8ebf0b-e6e2-4022-88f4-6e663ba0a9db"
TEST_USER_EMPTY_ID = "daecbabe-4ab9-4edf-a71f-4119042ccb02"
diff --git a/server/vbv_lernwelt/core/create_default_users.py b/server/vbv_lernwelt/core/create_default_users.py
index beeaca53..e50e9549 100644
--- a/server/vbv_lernwelt/core/create_default_users.py
+++ b/server/vbv_lernwelt/core/create_default_users.py
@@ -12,6 +12,7 @@ env.read_env()
from vbv_lernwelt.core.constants import (
ADMIN_USER_ID,
+ TEST_BERUFSBILDNER1_USER_ID,
TEST_MENTOR1_USER_ID,
TEST_STUDENT1_USER_ID,
TEST_STUDENT1_VV_USER_ID,
@@ -410,6 +411,15 @@ def create_default_users(default_password="test", set_avatar=False):
language="de",
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(
id=TEST_STUDENT2_VV_AND_VV_MENTOR_USER_ID,
email="test-student-and-mentor2@example.com",
diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py
index 3be6b86c..1175a50a 100644
--- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py
+++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py
@@ -189,7 +189,7 @@ def command(
SelfEvaluationFeedback.objects.all().delete()
CourseCompletionFeedback.objects.all().delete()
- AgentParticipantRelation.objects.all().delete()
+ AgentParticipantRelation.objects.filter(role="LEARNING_MENTOR").delete()
# LearningMentor.objects.all().delete()
MentorInvitation.objects.all().delete()
User.objects.all().update(organisation=Organisation.objects.first())
diff --git a/server/vbv_lernwelt/course/creators/test_course.py b/server/vbv_lernwelt/course/creators/test_course.py
index 968be54e..9a3fdd56 100644
--- a/server/vbv_lernwelt/course/creators/test_course.py
+++ b/server/vbv_lernwelt/course/creators/test_course.py
@@ -34,6 +34,7 @@ from vbv_lernwelt.competence.factories import (
)
from vbv_lernwelt.competence.models import ActionCompetence
from vbv_lernwelt.core.constants import (
+ TEST_BERUFSBILDNER1_USER_ID,
TEST_COURSE_SESSION_BERN_ID,
TEST_COURSE_SESSION_ZURICH_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.feedback.services import update_feedback_response
+from vbv_lernwelt.learning_mentor.models import AgentParticipantRelation
from vbv_lernwelt.learnpath.models import (
Circle,
LearningContentAssignment,
@@ -158,6 +160,14 @@ def create_test_course(
id=TEST_COURSE_SESSION_BERN_ID,
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(
course_session=cs_bern,
learning_content=LearningContentAttendanceCourse.objects.get(
@@ -201,25 +211,26 @@ def create_test_course(
)
csac.due_date.save()
- csa = CourseSessionAssignment.objects.create(
- course_session=cs_bern,
- 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
+ for course_session in [cs_bern, cs_zurich]:
+ csa = CourseSessionAssignment.objects.create(
+ course_session=course_session,
+ learning_content=LearningContentAssignment.objects.get(
+ slug=f"{course.slug}-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"
+ ),
)
- )
- csa.submission_deadline.save()
- csa.evaluation_deadline.start = timezone.make_aware(
- (next_thursday + relativedelta(weeks=5)).replace(
- hour=23, minute=59, second=59, microsecond=0
+ 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
+ )
)
- )
- csa.evaluation_deadline.save()
+ csa.submission_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(
course_session=cs_bern,
@@ -235,18 +246,19 @@ def create_test_course(
)
csa.submission_deadline.save()
- cset = CourseSessionEdoniqTest.objects.create(
- course_session=cs_bern,
- 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
+ for course_session in [cs_bern, cs_zurich]:
+ cset = CourseSessionEdoniqTest.objects.create(
+ course_session=course_session,
+ learning_content=LearningContentEdoniqTest.objects.get(
+ slug="test-lehrgang-lp-circle-fahrzeug-lc-wissens-und-verständnisfragen"
+ ),
)
- )
- cset.deadline.save()
+ cset.deadline.start = timezone.make_aware(
+ (next_monday + relativedelta(days=3)).replace(
+ hour=21, minute=0, second=0, microsecond=0
+ )
+ )
+ cset.deadline.save()
if include_vv:
_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(
course_session=cs_zurich,
learning_content=LearningContentAttendanceCourse.objects.get(
@@ -322,6 +327,40 @@ def create_test_course(
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
diff --git a/server/vbv_lernwelt/dashboard/graphql/types/assignment.py b/server/vbv_lernwelt/dashboard/graphql/types/assignment.py
index 1c614e72..74f5aa15 100644
--- a/server/vbv_lernwelt/dashboard/graphql/types/assignment.py
+++ b/server/vbv_lernwelt/dashboard/graphql/types/assignment.py
@@ -92,8 +92,8 @@ def create_assignment_summary(
total_failed = sum([m.failed_count for m in completed_metrics])
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(
_id=urql_id, # noqa
diff --git a/server/vbv_lernwelt/sso/tests/test_signals.py b/server/vbv_lernwelt/sso/tests/test_signals.py
index dfa30a1c..ef00e2ba 100644
--- a/server/vbv_lernwelt/sso/tests/test_signals.py
+++ b/server/vbv_lernwelt/sso/tests/test_signals.py
@@ -57,7 +57,8 @@ class CourseSessionUserTests(TestCase):
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(
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(
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.reset_mock()
self.csu1_student2.delete()