mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 06:07:21 +01:00
Added requested approval fields and logic
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user