From 642ca01db4ae1f609cf202c07f1d5a377a109fab Mon Sep 17 00:00:00 2001 From: jsbuddy Date: Tue, 3 Sep 2019 03:16:55 +0100 Subject: [PATCH] feat(request): modify create request controller - add check to find out if user has a line manager - return a 403 response if check fails else proceed with creating the request. finishes [#168233662] --- src/controllers/requestController.js | 13 ++++++------- src/test/routes/request.spec.js | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/controllers/requestController.js b/src/controllers/requestController.js index 980b469..f5bd074 100644 --- a/src/controllers/requestController.js +++ b/src/controllers/requestController.js @@ -53,6 +53,8 @@ const createTrip = async (userId, { const requestTrip = async (req, res) => { try { const { id: userId } = req.decoded; + const sender = await findById(userId); + if (!sender.lineManager) return response(res, 403, 'error', { message: 'You have not been assigned to a line manager' }); const { type, originCity, destinationCity, departureDate, returnDate, reason, accommodation, subRequest @@ -63,13 +65,10 @@ const requestTrip = async (req, res) => { type, originCity, destinationCity, departureDate, returnDate, reason, accommodation, subRequest }); - const sender = await findById(userId); - if (sender.lineManager) { - const receiver = await findById(sender.lineManager); - await createNotification({ - sender, receiver, type: 'newRequest', ref: subRequest ? trip.requestedTrip.id : trip.id - }); - } + const receiver = await findById(sender.lineManager); + await createNotification({ + sender, receiver, type: 'newRequest', ref: subRequest ? trip.requestedTrip.id : trip.id + }); return response(res, 201, 'success', trip); } catch (error) { diff --git a/src/test/routes/request.spec.js b/src/test/routes/request.spec.js index a2232c4..1770e88 100644 --- a/src/test/routes/request.spec.js +++ b/src/test/routes/request.spec.js @@ -17,11 +17,13 @@ const { generateToken } = authHelper; describe('REQUESTS', () => { const requestTripEndpoint = `${BASE_URL}/requests`; const searchRequestTripEndpoint = `${BASE_URL}/search/requests`; - let user, token; + let user, token, unassignedUser, unassignedUserToken; before(async () => { user = await User.findOne({ where: { lineManager: { [Op.ne]: null } } }); + unassignedUser = await User.findOne({ where: { lineManager: { [Op.eq]: null } } }); token = `Bearer ${generateToken({ id: user.id })}`; + unassignedUserToken = `Bearer ${generateToken({ id: unassignedUser.id })}`; }); describe('POST /requests', () => { @@ -62,6 +64,18 @@ describe('REQUESTS', () => { }); }); + it('should not create a request if user has no line manager', (done) => { + chai.request(app) + .post(requestTripEndpoint) + .set('authorization', unassignedUserToken) + .send(validReturnTripRequest) + .end((err, res) => { + expect(res.status).to.equal(403); + expect(res.body).to.have.property('status').that.equals('error'); + done(err); + }); + }); + it('should show missing key validation error', (done) => { chai.request(app) .post(requestTripEndpoint)