Skip to content

Commit

Permalink
Merge 0ecc161 into 91152a5
Browse files Browse the repository at this point in the history
  • Loading branch information
gmemmy committed Sep 5, 2019
2 parents 91152a5 + 0ecc161 commit cfd3e2f
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 2 deletions.
36 changes: 36 additions & 0 deletions src/controllers/RequestController.js
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,42 @@ class RequestController {
return HelperMethods.serverError(res);
}
}

/**
* Re-Confirm an approved request
* Route: PATCH: /request/reject
* @param {object} req - HTTP Request object
* @param {object} res - HTTP Response object
* @return {res} res - HTTP Response object
* @memberof RequestController
*/
static async confirmRequestApproval(req, res) {
try {
const approvedRequest = await Request.findOne({
where: {
id: req.body.id,
status: 'approved',
},
});
if (approvedRequest) {
const requestConfirmed = await approvedRequest.update(
{ status: 'confirmed' }, { hooks: false }
);
if (requestConfirmed.dataValues.id) {
return HelperMethods
.requestSuccessful(res, {
success: true,
message: 'Request approval confirmed successfully',
}, 200);
}
}
return HelperMethods.clientError(res,
'No approved request found or the request has not been approved', 404);
} catch (error) {
if (error.errors) return HelperMethods.sequelizeValidationError(res, error);
return HelperMethods.serverError(res);
}
}
}

export default RequestController;
2 changes: 1 addition & 1 deletion src/migrations/03-create-requests.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ module.exports = {
},
status: {
type: Sequelize.ENUM,
values: ['open', 'approved', 'rejected'],
values: ['open', 'approved', 'confirmed', 'rejected'],
defaultValue: 'open'
},
createdAt: {
Expand Down
2 changes: 1 addition & 1 deletion src/models/Request.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export default (sequelize, DataTypes) => {
},
status: {
type: DataTypes.ENUM,
values: ['open', 'approved', 'rejected'],
values: ['open', 'approved', 'confirmed', 'rejected'],
defaultValue: 'open'
},

Expand Down
7 changes: 7 additions & 0 deletions src/routes/requestRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ const requestRoutes = app => {
SearchRequestsMiddleware.setMultiDestinationAndFlightDate,
RequestController.searchRequests
);

app.patch(
'/api/v1/request/confirm',
Authorization.checkToken,
Authorization.confirmRole,
RequestController.confirmRequestApproval
);
};

export default requestRoutes;
65 changes: 65 additions & 0 deletions src/test/integrationTests/requestController.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -837,4 +837,69 @@ describe('Integration tests for the request controller', () => {
.equal('Invalid search query.');
});
});

describe('Test For A Manager to Confirm an Approved Travel Request', () => {
it('should send an error message when a user who isn\'t'
+ ' the line manager attempts to confirm an approved request ', async () => {
const response = await chai.request(app)
.patch('/api/v1/request/confirm')
.set('x-access-token', nonLineManagerToken)
.send({
id: '1b26c8d1-768d-4bcb-8407-f6d85b1f1dee',
});
expect(response.body.success).to.equal(false);
expect(response.body.message).to
.equal('Only managers can perform this action');
});

it('should send an error message when a user'
+ ' tries to access this route without a token', async () => {
const response = await chai.request(app)
.patch('/api/v1/request/confirm')
.set('x-access-token', 'ghbhbjbjbj')
.send({
id: '1b26c8d1-768d-4bcb-8407-f6d85b1f1dee',
});
expect(response.body.success).to.equal(false);
expect(response.body.message).to
.equal('User not authorized');
});

it('should send an error message when a user'
+ ' tries to access this route with an invalid token', async () => {
const response = await chai.request(app)
.patch('/api/v1/request/confirm')
.set('x-access-token', 'heyiminvalid')
.send({
id: '1b26c8d1-768d-4bcb-8407-f6d85b1f1dee',
});
expect(response.body.success).to.equal(false);
expect(response.body.message).to
.equal('User not authorized');
});

it('should confirm an approved request', async () => {
const response = await chai.request(app)
.patch('/api/v1/request/confirm')
.set('x-access-token', managerToken)
.send({
id: '1b26c8d1-768d-4bcb-8407-f6d85b1f1dee',
});
expect(response.body.data.success).to.equal(true);
expect(response.body.data.message).to
.equal('Request approval confirmed successfully');
});

it('should return an error if there is no approved request', async () => {
const response = await chai.request(app)
.patch('/api/v1/request/confirm')
.set('x-access-token', managerToken)
.send({
id: '1b26c8d1-768d-4bcb-8407-f6d85b1f1dee',
});
expect(response.body.success).to.equal(false);
expect(response.body.message).to
.equal('No approved request found or the request has not been approved');
});
});
});

0 comments on commit cfd3e2f

Please sign in to comment.