diff --git a/test/api/v2/user/PUT-user.test.js b/test/api/v2/user/PUT-user.test.js index 033a278646..e4774528ae 100644 --- a/test/api/v2/user/PUT-user.test.js +++ b/test/api/v2/user/PUT-user.test.js @@ -175,4 +175,27 @@ describe('PUT /user', () => { }); }); }); + + context('Improvement Categories', () => { + it('sets valid categories', async () => { + await user.put('/user', { + 'preferences.improvementCategories': ['work', 'school'], + }); + + await user.sync(); + + expect(user.preferences.improvementCategories).to.eql(['work', 'school']); + }); + + it('discards invalid categories', async () => { + await expect(user.put('/user', { + 'preferences.improvementCategories': ['work', 'procrastination', 'school'], + })).to.eventually.be.rejected.and.eql({ + code: 400, + text: [ + 'Validator failed for path `preferences.improvementCategories` with value `work,procrastination,school`', + ], + }); + }); + }); }); diff --git a/website/src/controllers/api-v2/user.js b/website/src/controllers/api-v2/user.js index 201d1d034d..d06bb96288 100644 --- a/website/src/controllers/api-v2/user.js +++ b/website/src/controllers/api-v2/user.js @@ -355,7 +355,15 @@ api.update = (req, res, next) => { user.save((err) => { if (!_.isEmpty(errors)) return res.json(401, {err: errors}); - if (err) return next(err); + if (err) { + if (err.name == 'ValidationError') { + let errorMessages = _.map(_.values(err.errors), (error) => { + return error.message; + }); + return res.json(400, {err: errorMessages}); + } + return next(err); + } res.json(200, user); user = errors = null; diff --git a/website/src/models/user.js b/website/src/models/user.js index d23d401f0d..9c2f11bcfd 100644 --- a/website/src/models/user.js +++ b/website/src/models/user.js @@ -395,7 +395,7 @@ var UserSchema = new Schema({ type: Array, validate: (categories) => { const validCategories = ['work', 'exercise', 'healthWellness', 'school', 'teams', 'chores', 'creativity']; - let isValidCategory = categories.every(category => validValues.indexOf(category) !== -1); + let isValidCategory = categories.every(category => validCategories.indexOf(category) !== -1); return isValidCategory; }} },