Added requested approval fields and logic

This commit is contained in:
Keith Holliday
2016-10-08 06:29:23 -05:00
parent 393a9290e9
commit f2e5bc52e5
3 changed files with 25 additions and 1 deletions

View File

@@ -37,6 +37,20 @@ describe('POST /tasks/:id/score/:direction', () => {
let memberTasks = await member.get('/tasks/user'); let memberTasks = await member.get('/tasks/user');
let syncedTask = find(memberTasks, findAssignedTask); let syncedTask = find(memberTasks, findAssignedTask);
let response = await member.post(`/tasks/${syncedTask._id}/score/up`);
let updatedTask = await member.get(`/tasks/${syncedTask._id}`);
expect(response.message).to.equal(t('taskRequiresApproval'));
expect(updatedTask.approvalRequested).to.equal(true);
expect(updatedTask.approvalRequestedDate).to.be.a('string'); // date gets converted to a string as json doesn't have a Date type
});
it('errors when approval has already been requested', async () => {
let memberTasks = await member.get('/tasks/user');
let syncedTask = find(memberTasks, findAssignedTask);
await member.post(`/tasks/${syncedTask._id}/score/up`);
await expect(member.post(`/tasks/${syncedTask._id}/score/up`)) await expect(member.post(`/tasks/${syncedTask._id}/score/up`))
.to.eventually.be.rejected.and.eql({ .to.eventually.be.rejected.and.eql({
code: 401, code: 401,

View File

@@ -316,7 +316,13 @@ api.scoreTask = {
if (!task) throw new NotFound(res.t('taskNotFound')); if (!task) throw new NotFound(res.t('taskNotFound'));
if (task.requiresApproval && !task.approved) { if (task.requiresApproval && !task.approved) {
throw new NotAuthorized(res.t('taskRequiresApproval')); if (task.approvalRequested) {
throw new NotAuthorized(res.t('taskRequiresApproval'));
}
task.approvalRequested = true;
task.approvalRequestedDate = new Date();
await task.save();
return res.respond(200, {message: res.t('taskRequiresApproval'), task});
} }
let wasCompleted = task.completed; let wasCompleted = task.completed;

View File

@@ -73,6 +73,10 @@ export let TaskSchema = new Schema({
requiresApproval: {type: Boolean, default: false}, requiresApproval: {type: Boolean, default: false},
approved: {type: Boolean, default: false}, approved: {type: Boolean, default: false},
approvedDate: {type: Date},
approvingUser: [{type: String, ref: 'User', validate: [validator.isUUID, 'Invalid uuid.']}],
approvalRequested: {type: Boolean, default: false},
approvalRequestedDate: {type: Date},
reminders: [{ reminders: [{
_id: false, _id: false,