diff --git a/backend/src/test/studyplan.controller.test.js b/backend/src/test/studyplan.controller.test.js index 9d0851097de6cb09ad1912ff9bbf6813f0a5e007..cd55ad83c498c6be44bf4fc13aa818ea7cfdfcd6 100644 --- a/backend/src/test/studyplan.controller.test.js +++ b/backend/src/test/studyplan.controller.test.js @@ -5,14 +5,16 @@ const { User, Student, Lecturer, - StudyPlan + StudyPlan, + StudyPlanCourse, } = require('../models/index'); const { EndpointEnum, CourseClassStatusEnum, SemesterEnum, - StudyPlanStatusEnum + StudyPlanStatusEnum, + StudyPlanCourseStatusEnum } = require('../enums/index'); let chai = require('chai'); @@ -47,7 +49,7 @@ const STUDY_PLAN_EXIST_ERROR = 'Study plan\'s already exist'; const SEMESTER_UNDEFINED_ERROR = 'Undefined semester'; describe('Study Plan Test', () => { - let availableCourseClass, unavailableCourseClass, student, studyPlan; + let availableCourseClass, unavailableCourseClass, student, studyPlan, studyPlanCourse; beforeEach(async() => { await CourseClass.destroy({where: {}}); @@ -98,6 +100,11 @@ describe('Study Plan Test', () => { semester: SemesterEnum.EVEN, notes: NOTES }); + + studyPlanCourse = await StudyPlanCourse.create({ + studyPlanId: studyPlan.id, + courseClassId: availableCourseClass.id, + }); }); afterEach(() => { @@ -276,4 +283,163 @@ describe('Study Plan Test', () => { }); }); }); + + describe("Update study plan", () => { + it("should return correct study plan when updating notes", (done) => { + const newNotes = "So far so good, Dimas said"; + const request = { + notes: newNotes, + }; + + chai + .request(server) + .put(`${EndpointEnum.STUDY_PLAN}/${studyPlan.id}`) + .send(request) + .end((_, res) => { + res.should.have.status(SUCCESS_CODE); + res.body.should.have.property("id").to.not.equal(null); + res.body.should.have.property("startYear").to.not.equal(null); + res.body.should.have.property("creditsTotal").to.not.equal(null); + res.body.should.have.property("semester").to.not.equal(null); + res.body.should.have.property("status").to.not.equal(null); + res.body.should.have.property("notes").to.not.equal(null); + res.body.should.have.property("notes").to.not.equal(NOTES); + res.body.should.have.property("notes").to.equal(newNotes); + res.body.should.have.property("updatedAt").to.not.equal(null); + res.body.should.have.property("createdAt").to.not.equal(null); + res.body.should.have.property("studentId").to.not.equal(null); + res.body.should.have.property("studyPlanCourses").to.not.equal(null); + done(); + }); + }); + + it("should return correct study plan when updating status", (done) => { + const newStatus = StudyPlanStatusEnum.FINAL; + const request = { + status: newStatus, + }; + + chai + .request(server) + .put(`${EndpointEnum.STUDY_PLAN}/${studyPlan.id}`) + .send(request) + .end((_, res) => { + res.should.have.status(SUCCESS_CODE); + res.body.should.have.property("id").to.not.equal(null); + res.body.should.have.property("startYear").to.not.equal(null); + res.body.should.have.property("creditsTotal").to.not.equal(null); + res.body.should.have.property("semester").to.not.equal(null); + res.body.should.have.property("status").to.not.equal(null); + res.body.should.have + .property("status") + .to.not.equal(STUDY_PLAN_STATUS); + res.body.should.have.property("status").to.equal(newStatus); + res.body.should.have.property("notes").to.not.equal(null); + res.body.should.have.property("updatedAt").to.not.equal(null); + res.body.should.have.property("createdAt").to.not.equal(null); + res.body.should.have.property("studentId").to.not.equal(null); + res.body.should.have.property("studyPlanCourses").to.not.equal(null); + done(); + }); + }); + + it("should return correct study plan when updating study plan courses (empty)", (done) => { + const studyPlanCourses = []; + const request = { + studyPlanCourses, + }; + + chai + .request(server) + .put(`${EndpointEnum.STUDY_PLAN}/${studyPlan.id}`) + .send(request) + .end((_, res) => { + res.should.have.status(SUCCESS_CODE); + res.body.should.have.property("id").to.not.equal(null); + res.body.should.have.property("startYear").to.not.equal(null); + res.body.should.have.property("creditsTotal").to.not.equal(null); + res.body.should.have.property("semester").to.not.equal(null); + res.body.should.have.property("status").to.not.equal(null); + res.body.should.have.property("notes").to.not.equal(null); + res.body.should.have.property("updatedAt").to.not.equal(null); + res.body.should.have.property("createdAt").to.not.equal(null); + res.body.should.have.property("studentId").to.not.equal(null); + res.body.should.have.property("studyPlanCourses").to.not.equal(null); + res.body.should.have + .property("studyPlanCourses") + .to.deep.equal(studyPlanCourses); + done(); + }); + }); + + it("should return correct study plan when updating study plan courses (set APPROVED)", (done) => { + studyPlanCourse.status = StudyPlanCourseStatusEnum.APPROVED; + + const studyPlanCourses = [studyPlanCourse]; + + const request = { + studyPlanCourses, + }; + + chai + .request(server) + .put(`${EndpointEnum.STUDY_PLAN}/${studyPlan.id}`) + .send(request) + .end((_, res) => { + res.should.have.status(SUCCESS_CODE); + res.body.should.have.property("id").to.not.equal(null); + res.body.should.have.property("startYear").to.not.equal(null); + res.body.should.have.property("creditsTotal").to.not.equal(null); + res.body.should.have.property("semester").to.not.equal(null); + res.body.should.have.property("status").to.not.equal(null); + res.body.should.have.property("notes").to.not.equal(null); + res.body.should.have.property("updatedAt").to.not.equal(null); + res.body.should.have.property("createdAt").to.not.equal(null); + res.body.should.have.property("studentId").to.not.equal(null); + res.body.should.have.property("studyPlanCourses").to.not.equal(null); + res.body.studyPlanCourses[0].should.have + .property("id") + .to.equal(studyPlanCourse.id); + res.body.studyPlanCourses[0].should.have + .property("status") + .to.equal(StudyPlanCourseStatusEnum.APPROVED); + done(); + }); + }); + + it("should return correct study plan when updating study plan courses (set UNAPPROVED)", (done) => { + studyPlanCourse.status = StudyPlanCourseStatusEnum.UNAPPROVED; + + const studyPlanCourses = [studyPlanCourse]; + + const request = { + studyPlanCourses, + }; + + chai + .request(server) + .put(`${EndpointEnum.STUDY_PLAN}/${studyPlan.id}`) + .send(request) + .end((_, res) => { + res.should.have.status(SUCCESS_CODE); + res.body.should.have.property("id").to.not.equal(null); + res.body.should.have.property("startYear").to.not.equal(null); + res.body.should.have.property("creditsTotal").to.not.equal(null); + res.body.should.have.property("semester").to.not.equal(null); + res.body.should.have.property("status").to.not.equal(null); + res.body.should.have.property("notes").to.not.equal(null); + res.body.should.have.property("updatedAt").to.not.equal(null); + res.body.should.have.property("createdAt").to.not.equal(null); + res.body.should.have.property("studentId").to.not.equal(null); + res.body.should.have.property("studyPlanCourses").to.not.equal(null); + res.body.studyPlanCourses[0].should.have + .property("id") + .to.equal(studyPlanCourse.id); + res.body.studyPlanCourses[0].should.have + .property("status") + .to.equal(StudyPlanCourseStatusEnum.UNAPPROVED); + done(); + }); + }); + }); });