From 0aa7e74b7ca27444955727369dad6c43e6c6771e Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Fri, 27 Sep 2024 18:11:40 +0200 Subject: [PATCH] Add cypress test --- .../evaluation/EvaluationSummary.vue | 3 +- .../assignmentTrainerBearbeiten.cy.js | 145 ++++++++++++++++++ .../core/management/commands/cypress_reset.py | 7 +- 3 files changed, 153 insertions(+), 2 deletions(-) create mode 100644 cypress/e2e/assignment/assignmentTrainerBearbeiten.cy.js diff --git a/client/src/components/assignment/evaluation/EvaluationSummary.vue b/client/src/components/assignment/evaluation/EvaluationSummary.vue index f0a23e69..1488780a 100644 --- a/client/src/components/assignment/evaluation/EvaluationSummary.vue +++ b/client/src/components/assignment/evaluation/EvaluationSummary.vue @@ -301,11 +301,12 @@ const showPassed = computed(() => { > -
+
{{ dayjs(historyEntry.timestamp).format("DD.MM.YYYY HH.mm") }}: {{ $t(historyEntry.translation_key) }} diff --git a/cypress/e2e/assignment/assignmentTrainerBearbeiten.cy.js b/cypress/e2e/assignment/assignmentTrainerBearbeiten.cy.js new file mode 100644 index 00000000..373894c4 --- /dev/null +++ b/cypress/e2e/assignment/assignmentTrainerBearbeiten.cy.js @@ -0,0 +1,145 @@ +import { TEST_STUDENT1_USER_ID, TEST_TRAINER1_USER_ID } from "../../consts"; +import { EXPERT_COCKPIT_URL, login } from "../helpers"; + +describe("assignmentTrainer.cy.js", () => { + beforeEach(() => { + cy.manageCommand( + "cypress_reset --create-assignment-completion --create-assignment-evaluation", + ); + login("test-trainer1@example.com", "test"); + }); + + describe("Can reevaluation assignment", () => { + it("can start evaluation and store evaluation results", () => { + cy.visit(EXPERT_COCKPIT_URL); + cy.get( + '[data-cy="show-details-btn-test-lehrgang-lp-circle-fahrzeug-lc-überprüfen-einer-motorfahrzeug-versicherungspolice"]', + ).click(); + + cy.get('[data-cy="Student1"]').find('[data-cy="show-results"]').click(); + + // on EvaluationSummary page + cy.get( + '[data-cy="assignment-history"] [data-cy="assignment-history-entry"]', + ).should("have.length", 2); + cy.get('[data-cy="assignment-history"]') + .should("contain", "Ergebnisse abgegeben") + .should("contain", "Bewertung freigegeben"); + cy.get('[data-cy="user-points"]').should("contain", "24"); + cy.get('[data-cy="total-points"]').should("contain", "100%"); + + // reevaluation + cy.get('[data-cy="btn-reopen"]').click(); + + cy.get('[data-cy="evaluation-task"]').should( + "contain", + "Beurteilungskriterium 1 / 5", + ); + cy.get('[data-cy="subtask-4"]').click(); + cy.wait(500); + cy.get('[data-cy="next-step"]').click(); + + cy.get('[data-cy="evaluation-task"]').should( + "contain", + "Beurteilungskriterium 2 / 5", + ); + cy.get('[data-cy="next-step"]').click(); + + cy.get('[data-cy="evaluation-task"]').should( + "contain", + "Beurteilungskriterium 3 / 5", + ); + cy.get('[data-cy="subtask-4"]').click(); + cy.wait(500); + cy.get('[data-cy="next-step"]').click(); + + cy.get('[data-cy="evaluation-task"]').should( + "contain", + "Beurteilungskriterium 4 / 5", + ); + cy.get('[data-cy="subtask-2"]').click(); + cy.wait(500); + cy.get('[data-cy="next-step"]').click(); + + cy.get('[data-cy="evaluation-task"]').should( + "contain", + "Beurteilungskriterium 5 / 5", + ); + cy.get('[data-cy="next-step"]').click(); + + cy.get('[data-cy="user-points"]').should("contain", "19"); + cy.get('[data-cy="total-points"]').should("contain", "79%"); + + cy.get('[data-cy="reason-text"]').type("nochmal bewertet"); + cy.get( + '[data-cy="assignment-history"] [data-cy="assignment-history-entry"]', + ).should("have.length", 3); + cy.get('[data-cy="assignment-history"]') + .should("contain", "Ergebnisse abgegeben") + .should("contain", "Bewertung freigegeben") + .should("contain", "Bewertung erneut bearbeitet"); + + cy.get('[data-cy="submit-evaluation"]').click(); + + // check stored data + cy.get('[data-cy="result-section"]').should( + "contain", + "Deine Bewertung für Test Student1 wurde freigegeben", + ); + cy.reload(); + cy.get( + '[data-cy="assignment-history"] [data-cy="assignment-history-entry"]', + ).should("have.length", 4); + + cy.loadAssignmentCompletion( + "evaluation_user_id", + TEST_TRAINER1_USER_ID, + ).then((ac) => { + expect(ac.completion_status).to.equal("EVALUATION_SUBMITTED"); + expect(ac.evaluation_points).to.equal(19); + expect(ac.completion_data.expert_evaluation_comment.text).to.equal( + "nochmal bewertet", + ); + expect(ac.additional_json_data.submission_history).to.have.length(4); + expect(ac.additional_json_data.submission_history[0].status).to.equal( + "SUBMITTED", + ); + expect(ac.additional_json_data.submission_history[1].status).to.equal( + "EVALUATION_SUBMITTED", + ); + expect(ac.additional_json_data.submission_history[2].status).to.equal( + "EVALUATION_IN_PROGRESS", + ); + expect(ac.additional_json_data.submission_history[3].status).to.equal( + "EVALUATION_SUBMITTED", + ); + + // check AssignmentCompletionAuditLog + cy.task( + "runSql", + `select * from assignment_assignmentcompletionauditlog + where assignment_slug = 'test-lehrgang-assignment-überprüfen-einer-motorfahrzeugs-versicherungspolice' + and assignment_user_id = '${TEST_STUDENT1_USER_ID}' + order by created_at asc;`, + ).then((res) => { + console.log(res); + expect(res.rows).to.have.length(3); + expect(res.rows[0].completion_status).to.equal("SUBMITTED"); + + expect(res.rows[1].completion_status).to.equal( + "EVALUATION_SUBMITTED", + ); + expect(res.rows[1].evaluation_points).to.equal(24); + + expect(res.rows[2].completion_status).to.equal( + "EVALUATION_SUBMITTED", + ); + expect(res.rows[2].evaluation_points).to.equal(19); + expect(res.rows[2].completion_data.expert_evaluation_comment.text).to.equal( + "nochmal bewertet", + ); + }); + }); + }); + }); +}); diff --git a/server/vbv_lernwelt/core/management/commands/cypress_reset.py b/server/vbv_lernwelt/core/management/commands/cypress_reset.py index 37ae54af..507ff23c 100644 --- a/server/vbv_lernwelt/core/management/commands/cypress_reset.py +++ b/server/vbv_lernwelt/core/management/commands/cypress_reset.py @@ -6,7 +6,11 @@ from django.contrib.auth.hashers import make_password from django.db import connection from django.utils import timezone -from vbv_lernwelt.assignment.models import Assignment, AssignmentCompletion +from vbv_lernwelt.assignment.models import ( + Assignment, + AssignmentCompletion, + AssignmentCompletionAuditLog, +) from vbv_lernwelt.competence.models import PerformanceCriteria from vbv_lernwelt.core.constants import ( TEST_COURSE_SESSION_BERN_ID, @@ -183,6 +187,7 @@ def command( CourseCompletion.objects.all().delete() Notification.objects.all().delete() AssignmentCompletion.objects.all().delete() + AssignmentCompletionAuditLog.objects.all().delete() FeedbackResponse.objects.all().delete() CourseSessionAttendanceCourse.objects.all().update(attendance_user_list=[])