Skip to content

Commit

Permalink
Development: Enhance exam creation e2e tests (#6094)
Browse files Browse the repository at this point in the history
  • Loading branch information
TheZoker authored Jan 22, 2023
1 parent b28f031 commit 0613cb5
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 61 deletions.
5 changes: 5 additions & 0 deletions src/test/cypress/e2e/exam/ExamAssessment.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ const examManagement = artemis.pageobjects.exam.management;

// Common primitives
const admin = artemis.users.getAdmin();
const instructor = artemis.users.getInstructor();
const student = artemis.users.getStudentOne();
const tutor = artemis.users.getTutor();
let exam: Exam;
Expand Down Expand Up @@ -71,6 +72,7 @@ describe('Exam assessment', () => {
});

beforeEach('Create exam, exercise and submission', () => {
cy.login(instructor);
courseManagementRequests
.createProgrammingExercise(
{ exerciseGroup },
Expand Down Expand Up @@ -117,6 +119,7 @@ describe('Exam assessment', () => {

describe('Modeling exercise assessment', () => {
beforeEach('Create exercise and submission', () => {
cy.login(instructor);
courseManagementRequests.createModelingExercise({ exerciseGroup }).then(() => {
courseManagementRequests.generateMissingIndividualExams(exam);
courseManagementRequests.prepareExerciseStartForExam(exam);
Expand Down Expand Up @@ -151,6 +154,7 @@ describe('Exam assessment', () => {

describe('Text exercise assessment', () => {
beforeEach('Create exercise and submission', () => {
cy.login(instructor);
const exerciseTitle = 'Cypress Text Exercise';
courseManagementRequests.createTextExercise({ exerciseGroup }, exerciseTitle);
courseManagementRequests.generateMissingIndividualExams(exam);
Expand Down Expand Up @@ -190,6 +194,7 @@ describe('Exam assessment', () => {
});

beforeEach('Create exercise and submission', () => {
cy.login(instructor);
courseManagementRequests.createQuizExercise({ exerciseGroup }, [multipleChoiceQuizTemplate], 'Cypress Quiz').then((quizResponse) => {
courseManagementRequests.generateMissingIndividualExams(exam);
courseManagementRequests.prepareExerciseStartForExam(exam);
Expand Down
144 changes: 83 additions & 61 deletions src/test/cypress/e2e/exam/ExamCreationDeletion.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ import { Course } from 'app/entities/course.model';
import { CypressExamBuilder, convertCourseAfterMultiPart } from '../../support/requests/CourseManagementRequests';
import dayjs from 'dayjs/esm';
import { artemis } from '../../support/ArtemisTesting';
import { generateUUID } from '../../support/utils';
import { dayjsToString, generateUUID, trimDate } from '../../support/utils';

// Requests
const courseManagementRequests = artemis.requests.courseManagement;

// Pageobjects
const navigationBar = artemis.pageobjects.navigationBar;
const courseManagement = artemis.pageobjects.course.management;
const examManagement = artemis.pageobjects.exam.management;
const creationPage = artemis.pageobjects.exam.creation;
const courseManagementPage = artemis.pageobjects.course.management;
const examManagementPage = artemis.pageobjects.exam.management;
const examCreationPage = artemis.pageobjects.exam.creation;
const examDetailsPage = artemis.pageobjects.exam.details;

const examData = {
Expand Down Expand Up @@ -60,36 +60,47 @@ describe('Exam creation/deletion', () => {

it('Creates an exam', () => {
navigationBar.openCourseManagement();
courseManagement.openExamsOfCourse(course.shortName!);

examManagement.createNewExam();
creationPage.setTitle(examData.title);
creationPage.setVisibleDate(examData.visibleDate);
creationPage.setStartDate(examData.startDate);
creationPage.setEndDate(examData.endDate);
creationPage.setNumberOfExercises(examData.numberOfExercises);
creationPage.setExamMaxPoints(examData.maxPoints);

creationPage.setStartText(examData.startText);
creationPage.setEndText(examData.endText);
creationPage.setConfirmationStartText(examData.confirmationStartText);
creationPage.setConfirmationEndText(examData.confirmationEndText);
creationPage.submit().then((examResponse: Interception) => {
examId = examResponse.response!.body.id;
courseManagementPage.openExamsOfCourse(course.shortName!);

examManagementPage.createNewExam();
examCreationPage.setTitle(examData.title);
examCreationPage.setVisibleDate(examData.visibleDate);
examCreationPage.setStartDate(examData.startDate);
examCreationPage.setEndDate(examData.endDate);
examCreationPage.setNumberOfExercises(examData.numberOfExercises);
examCreationPage.setExamMaxPoints(examData.maxPoints);

examCreationPage.setStartText(examData.startText);
examCreationPage.setEndText(examData.endText);
examCreationPage.setConfirmationStartText(examData.confirmationStartText);
examCreationPage.setConfirmationEndText(examData.confirmationEndText);
examCreationPage.submit().then((examResponse: Interception) => {
const examBody = examResponse.response!.body;
examId = examBody.id;
expect(examResponse.response!.statusCode).to.eq(201);
expect(examBody.testExam).to.be.false;
expect(trimDate(examBody.visibleDate)).to.eq(trimDate(dayjsToString(examData.visibleDate)));
expect(trimDate(examBody.startDate)).to.eq(trimDate(dayjsToString(examData.startDate)));
expect(trimDate(examBody.endDate)).to.eq(trimDate(dayjsToString(examData.endDate)));
expect(examBody.numberOfExercisesInExam).to.eq(examData.numberOfExercises);
expect(examBody.examMaxPoints).to.eq(examData.maxPoints);
expect(examBody.startText).to.eq(examData.startText);
expect(examBody.endText).to.eq(examData.endText);
expect(examBody.confirmationStartText).to.eq(examData.confirmationStartText);
expect(examBody.confirmationEndText).to.eq(examData.confirmationEndText);
cy.url().should('contain', `/exams/${examId}`);
});
cy.get('#exam-detail-title').should('contain.text', examData.title);
cy.get('#exam-visible-date').should('contain.text', examData.visibleDate.format(dateFormat));
cy.get('#exam-start-date').should('contain.text', examData.startDate.format(dateFormat));
cy.get('#exam-end-date').should('contain.text', examData.endDate.format(dateFormat));
cy.get('#exam-number-of-exercises').should('contain.text', examData.numberOfExercises);
cy.get('#exam-max-points').should('contain.text', examData.maxPoints);
cy.get('#exam-start-text').should('contain.text', examData.startText);
cy.get('#exam-end-text').should('contain.text', examData.endText);
cy.get('#exam-confirmation-start-text').should('contain.text', examData.confirmationStartText);
cy.get('#exam-confirmation-end-text').should('contain.text', examData.confirmationEndText);
cy.get('#exam-working-time').should('contain.text', '1d 0h');
examManagementPage.getExamTitle().contains(examData.title);
examManagementPage.getExamVisibleDate().contains(examData.visibleDate.format(dateFormat));
examManagementPage.getExamStartDate().contains(examData.startDate.format(dateFormat));
examManagementPage.getExamEndDate().contains(examData.endDate.format(dateFormat));
examManagementPage.getExamNumberOfExercises().contains(examData.numberOfExercises);
examManagementPage.getExamMaxPoints().contains(examData.maxPoints);
examManagementPage.getExamStartText().contains(examData.startText);
examManagementPage.getExamEndText().contains(examData.endText);
examManagementPage.getExamConfirmationStartText().contains(examData.confirmationStartText);
examManagementPage.getExamConfirmationEndText().contains(examData.confirmationEndText);
examManagementPage.getExamWorkingTime().contains('1d 0h');
});

describe('Exam deletion', () => {
Expand All @@ -103,10 +114,10 @@ describe('Exam creation/deletion', () => {

it('Deletes an existing exam', () => {
navigationBar.openCourseManagement();
courseManagement.openExamsOfCourse(course.shortName!);
examManagement.openExam(examId);
courseManagementPage.openExamsOfCourse(course.shortName!);
examManagementPage.openExam(examId);
examDetailsPage.deleteExam(examData.title);
examManagement.getExamSelector(examData.title).should('not.exist');
examManagementPage.getExamSelector(examData.title).should('not.exist');
});
});

Expand All @@ -121,38 +132,49 @@ describe('Exam creation/deletion', () => {

it('Edits an existing exam', () => {
navigationBar.openCourseManagement();
courseManagement.openExamsOfCourse(course.shortName!);
examManagement.openExam(examId);
cy.get('#exam-detail-title').should('contain.text', examData.title);
courseManagementPage.openExamsOfCourse(course.shortName!);
examManagementPage.openExam(examId);
cy.get('#exam-detail-title').contains(examData.title);
cy.get('#editButton').click();

creationPage.setTitle(editedExamData.title);
creationPage.setVisibleDate(editedExamData.visibleDate);
creationPage.setStartDate(editedExamData.startDate);
creationPage.setEndDate(editedExamData.endDate);
creationPage.setNumberOfExercises(editedExamData.numberOfExercises);
creationPage.setExamMaxPoints(editedExamData.maxPoints);

creationPage.setStartText(editedExamData.startText);
creationPage.setEndText(editedExamData.endText);
creationPage.setConfirmationStartText(editedExamData.confirmationStartText);
creationPage.setConfirmationEndText(editedExamData.confirmationEndText);
creationPage.update().then((examResponse: Interception) => {
examId = examResponse.response!.body.id;
examCreationPage.setTitle(editedExamData.title);
examCreationPage.setVisibleDate(editedExamData.visibleDate);
examCreationPage.setStartDate(editedExamData.startDate);
examCreationPage.setEndDate(editedExamData.endDate);
examCreationPage.setNumberOfExercises(editedExamData.numberOfExercises);
examCreationPage.setExamMaxPoints(editedExamData.maxPoints);

examCreationPage.setStartText(editedExamData.startText);
examCreationPage.setEndText(editedExamData.endText);
examCreationPage.setConfirmationStartText(editedExamData.confirmationStartText);
examCreationPage.setConfirmationEndText(editedExamData.confirmationEndText);
examCreationPage.update().then((examResponse: Interception) => {
const examBody = examResponse.response!.body;
examId = examBody.id;
expect(examResponse.response!.statusCode).to.eq(200);
expect(examBody.testExam).to.be.false;
expect(trimDate(examBody.visibleDate)).to.eq(trimDate(dayjsToString(editedExamData.visibleDate)));
expect(trimDate(examBody.startDate)).to.eq(trimDate(dayjsToString(editedExamData.startDate)));
expect(trimDate(examBody.endDate)).to.eq(trimDate(dayjsToString(editedExamData.endDate)));
expect(examBody.numberOfExercisesInExam).to.eq(editedExamData.numberOfExercises);
expect(examBody.examMaxPoints).to.eq(editedExamData.maxPoints);
expect(examBody.startText).to.eq(editedExamData.startText);
expect(examBody.endText).to.eq(editedExamData.endText);
expect(examBody.confirmationStartText).to.eq(editedExamData.confirmationStartText);
expect(examBody.confirmationEndText).to.eq(editedExamData.confirmationEndText);
cy.url().should('contain', `/exams/${examId}`);
});
cy.get('#exam-detail-title').should('contain.text', editedExamData.title);
cy.get('#exam-visible-date').should('contain.text', editedExamData.visibleDate.format(dateFormat));
cy.get('#exam-start-date').should('contain.text', editedExamData.startDate.format(dateFormat));
cy.get('#exam-end-date').should('contain.text', editedExamData.endDate.format(dateFormat));
cy.get('#exam-number-of-exercises').should('contain.text', editedExamData.numberOfExercises);
cy.get('#exam-max-points').should('contain.text', editedExamData.maxPoints);
cy.get('#exam-start-text').should('contain.text', editedExamData.startText);
cy.get('#exam-end-text').should('contain.text', editedExamData.endText);
cy.get('#exam-confirmation-start-text').should('contain.text', editedExamData.confirmationStartText);
cy.get('#exam-confirmation-end-text').should('contain.text', editedExamData.confirmationEndText);
cy.get('#exam-working-time').should('contain.text', '2d 0h');
examManagementPage.getExamTitle().contains(editedExamData.title);
examManagementPage.getExamVisibleDate().contains(editedExamData.visibleDate.format(dateFormat));
examManagementPage.getExamStartDate().contains(editedExamData.startDate.format(dateFormat));
examManagementPage.getExamEndDate().contains(editedExamData.endDate.format(dateFormat));
examManagementPage.getExamNumberOfExercises().contains(editedExamData.numberOfExercises);
examManagementPage.getExamMaxPoints().contains(editedExamData.maxPoints);
examManagementPage.getExamStartText().contains(editedExamData.startText);
examManagementPage.getExamEndText().contains(editedExamData.endText);
examManagementPage.getExamConfirmationStartText().contains(editedExamData.confirmationStartText);
examManagementPage.getExamConfirmationEndText().contains(editedExamData.confirmationEndText);
examManagementPage.getExamWorkingTime().contains('2d 0h');
});
});

Expand Down
47 changes: 47 additions & 0 deletions src/test/cypress/support/pageobjects/exam/ExamManagementPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,51 @@ export class ExamManagementPage {
openAssessmentDashboard(examId: number, timeout: number) {
cy.get('#exercises-button-' + examId, { timeout }).click();
}

/**
* helper methods to get information of course
* */
getExamTitle() {
return cy.get('#exam-detail-title');
}

getExamVisibleDate() {
return cy.get('#exam-visible-date');
}

getExamStartDate() {
return cy.get('#exam-start-date');
}

getExamEndDate() {
return cy.get('#exam-end-date');
}

getExamNumberOfExercises() {
return cy.get('#exam-number-of-exercises');
}

getExamMaxPoints() {
return cy.get('#exam-max-points');
}

getExamStartText() {
return cy.get('#exam-start-text');
}

getExamEndText() {
return cy.get('#exam-end-text');
}

getExamConfirmationStartText() {
return cy.get('#exam-confirmation-start-text');
}

getExamConfirmationEndText() {
return cy.get('#exam-confirmation-end-text');
}

getExamWorkingTime() {
return cy.get('#exam-working-time');
}
}

0 comments on commit 0613cb5

Please sign in to comment.