Skip to content

Commit

Permalink
🚧 api: uncancel route
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreiaPena committed Jan 27, 2025
1 parent 370f587 commit e405c81
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ const cancel = async function (request, h) {
};

const uncancel = async function (request, h) {
const juryId = request.auth.credentials.userId;
const certificationCourseId = request.params.certificationCourseId;
await usecases.uncancelCertificationCourse({ certificationCourseId });
await usecases.uncancel({ certificationCourseId, juryId });

return h.response().code(204);
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@ export const cancel = async function ({
juryId,
});

return certificationRescoringRepository.execute({ certificationCancelledEvent });
return certificationRescoringRepository.execute({ event: certificationCancelledEvent });
};

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* @typedef {import('./index.js'.CertificationCourseRepository} CertificationCourseRepository
* @typedef {import('./index.js'.CertificationRescoringRepository} CertificationRescoringRepository
*/

import CertificationUncancelled from '../../../../shared/domain/events/CertificationUncancelled.js';

/**
* @param {Object} params
* @param {number} params.certificationCourseId
* @param {number} params.juryId
* @param {CertificationCourseRepository} params.certificationCourseRepository
* @param {CertificationRescoringRepository} params.certificationRescoringRepository
*/
const uncancel = async function ({
certificationCourseId,
juryId,
certificationCourseRepository,
certificationRescoringRepository,
}) {
const certificationCourse = await certificationCourseRepository.get({ id: certificationCourseId });
certificationCourse.uncancel();
await certificationCourseRepository.update({ certificationCourse });

const certificationUncancelledEvent = new CertificationUncancelled({
certificationCourseId: certificationCourse.getId(),
juryId,
});

return certificationRescoringRepository.execute({ event: certificationUncancelledEvent });
};

export { uncancel };
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
/**
* @typedef {import('../../../../../src/shared/domain/events/CertificationCancelled.js'} CertificationCancelled
* @typedef {import('./index.js'.LibServices} LibServices
*/

/**
* @param {Object} params
* @param {CertificationCancelled} params.certificationCancelledEvent
* @param {??} params.event
* @param {LibServices} params.libServices
*/
export const execute = async ({ certificationCancelledEvent, libServices }) => {
export const execute = async ({ event, libServices }) => {
return libServices.handleCertificationRescoring({
event: certificationCancelledEvent,
event,
});
};
15 changes: 15 additions & 0 deletions api/src/shared/domain/events/CertificationUncancelled.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { assertNotNullOrUndefined } from '../models/asserts.js';

export default class CertificationUncancelled {
/**
* @param {Object} params
* @param {number} params.certificationCourseId - certification course that will be rescored
* @param {number} params.juryId - Id of the jury member who uncancelled the certification
*/
constructor({ certificationCourseId, juryId }) {
assertNotNullOrUndefined(certificationCourseId);
this.certificationCourseId = certificationCourseId;
assertNotNullOrUndefined(juryId);
this.juryId = juryId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ describe('Integration | Repository | certification-rescoring-repository', functi

// when
const error = await catchErr(sessionRepositories.certificationRescoringRepository.execute)({
certificationCancelledEvent,
event: certificationCancelledEvent,
});

// then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,22 +30,27 @@ describe('Certification | Session-management | Unit | Application | Controller |
});
});

describe('#uncancelCertificationCourse', function () {
it('should call uncancel-certification-course usecase', async function () {
describe('#uncancel', function () {
it('should call uncancel usecase', async function () {
// given
sinon.stub(usecases, 'uncancelCertificationCourse');
sinon.stub(usecases, 'uncancel');
const request = {
auth: {
credentials: {
userId: 345,
},
},
params: {
certificationCourseId: 123,
},
};
usecases.uncancelCertificationCourse.resolves();
usecases.uncancel.resolves();

// when
await cancellationController.uncancel(request, hFake);

// then
expect(usecases.uncancelCertificationCourse).to.have.been.calledWithExactly({ certificationCourseId: 123 });
expect(usecases.uncancel).to.have.been.calledWithExactly({ certificationCourseId: 123, juryId: 345 });
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ describe('Certification | Session-management | Unit | Domain | UseCases | cancel
expect(certificationCourse.cancel).to.have.been.calledOnce;
expect(certificationCourseRepository.update).to.have.been.calledWithExactly({ certificationCourse });
expect(certificationRescoringRepository.execute).to.have.been.calledWithExactly({
certificationCancelledEvent: new CertificationCancelled({
event: new CertificationCancelled({
certificationCourseId: certificationCourse.getId(),
juryId,
}),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,40 @@
import { uncancelCertificationCourse } from '../../../../../../src/certification/session-management/domain/usecases/uncancel-certification-course.js';
import { uncancel } from '../../../../../../src/certification/session-management/domain/usecases/uncancel.js';
import CertificationUncancelled from '../../../../../../src/shared/domain/events/CertificationUncancelled.js';
import { domainBuilder, expect, sinon } from '../../../../../test-helper.js';

describe('Certification | Session-management | Unit | Domain | UseCases | uncancel-certification-course', function () {
describe('Certification | Session-management | Unit | Domain | UseCases | uncancel', function () {
it('should uncancel the certification course', async function () {
// given
const juryId = 123;
const certificationCourse = domainBuilder.buildCertificationCourse({ id: 123 });
sinon.spy(certificationCourse, 'uncancel');
const certificationCourseRepository = {
update: sinon.stub(),
get: sinon.stub(),
};
const certificationRescoringRepository = {
execute: sinon.stub(),
};
certificationCourseRepository.get.withArgs({ id: 123 }).resolves(certificationCourse);
certificationCourseRepository.update.resolves();
certificationRescoringRepository.execute.resolves();

// when
await uncancelCertificationCourse({
await uncancel({
certificationCourseId: 123,
juryId,
certificationCourseRepository,
certificationRescoringRepository,
});

// then
expect(certificationCourse.uncancel).to.have.been.calledOnce;
expect(certificationCourseRepository.update).to.have.been.calledWithExactly({ certificationCourse });
expect(certificationRescoringRepository.execute).to.have.been.calledWithExactly({
event: new CertificationUncancelled({
certificationCourseId: certificationCourse.getId(),
juryId,
}),
});
});
});

0 comments on commit e405c81

Please sign in to comment.