From 14702122556c8a9abececced639f763fc2016429 Mon Sep 17 00:00:00 2001 From: Jonathan Shyaka Date: Fri, 22 Nov 2019 17:12:43 +0200 Subject: [PATCH] bug(requests): fix autofill on user requests [Finishes ] --- src/controllers/userController.js | 23 +++++++++++++++++++ .../20191122045102-add-autofill-preference.js | 5 ++++ src/database/models/users.js | 5 ++++ src/middlewares/auth.js | 3 ++- src/routes/api/users.js | 6 +++++ src/services/userProfileService.js | 2 +- src/test/user.test.js | 13 +++++++++++ src/utils/sessionManager.js | 1 + 8 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/database/migrations/20191122045102-add-autofill-preference.js diff --git a/src/controllers/userController.js b/src/controllers/userController.js index cc162b8..0f87e47 100644 --- a/src/controllers/userController.js +++ b/src/controllers/userController.js @@ -447,5 +447,28 @@ class Users { return next(error); } } + + /** + * switchAutofill. + * @param {object} req details. + * @param {object} res details. + * @param {object} next nest task + * @returns {object}. + */ + async switchAutofill(req, res, next) { + try { + const { id, requestAutofill } = req.user; + const data = await userService.updateUser({ id }, { requestAutofill: !requestAutofill }); + return Response.customResponse( + res, + 200, + 'Your request autofill preference has been successfully updated', + { requestAutofill: data[1][0].requestAutofill } + ); + } catch (error) { + return next(error); + } + } } + export default new Users(); diff --git a/src/database/migrations/20191122045102-add-autofill-preference.js b/src/database/migrations/20191122045102-add-autofill-preference.js new file mode 100644 index 0000000..c095501 --- /dev/null +++ b/src/database/migrations/20191122045102-add-autofill-preference.js @@ -0,0 +1,5 @@ +/* eslint-disable no-unused-vars */ +export default { + up: (queryInterface, Sequelize) => queryInterface.addColumn('Users', 'requestAutofill', Sequelize.BOOLEAN), + down: (queryInterface, Sequelize) => queryInterface.removeColumn('Users', 'requestAutofill') +}; diff --git a/src/database/models/users.js b/src/database/models/users.js index c30db71..0174acb 100644 --- a/src/database/models/users.js +++ b/src/database/models/users.js @@ -55,6 +55,11 @@ export default (sequelize, DataTypes) => { type: DataTypes.BOOLEAN, defaultValue: true, allowNull: false + }, + requestAutofill: { + type: DataTypes.BOOLEAN, + defaultValue: false, + allowNull: false } }); diff --git a/src/middlewares/auth.js b/src/middlewares/auth.js index b4f3032..03b24f4 100644 --- a/src/middlewares/auth.js +++ b/src/middlewares/auth.js @@ -12,9 +12,10 @@ const verify = async (req, res, next) => { if (result === null) return Response.authenticationError(res, 'User not logged In'); const { userEmail } = payload; // checking for the updated userRole from the db not from the token - const { userRoles, emailAllowed } = await userService.findUser({ userEmail }); + const { userRoles, emailAllowed, requestAutofill } = await userService.findUser({ userEmail }); payload.userRoles = userRoles; payload.emailAllowed = emailAllowed; + payload.requestAutofill = requestAutofill; req.user = payload; next(); } catch (error) { diff --git a/src/routes/api/users.js b/src/routes/api/users.js index aaefc7b..7c8806e 100644 --- a/src/routes/api/users.js +++ b/src/routes/api/users.js @@ -83,6 +83,12 @@ router .route('/email-preferences') .patch(verify, Users.emailPreferences) .all(method); + +router + .route('/autofill-preference') + .patch(verify, Users.switchAutofill) + .all(method); + router .route('/unsubscribe') .patch(userValidator.validateUnsubscribe, Users.unsubscribe) diff --git a/src/services/userProfileService.js b/src/services/userProfileService.js index 53bf18f..cde2562 100644 --- a/src/services/userProfileService.js +++ b/src/services/userProfileService.js @@ -27,7 +27,7 @@ class UserProfileService { async getProfile(userId) { try { const profile = await Users.findOne({ - attributes: ['firstName', 'lastName', 'userEmail', 'userRoles'], + attributes: ['firstName', 'lastName', 'userEmail', 'userRoles', 'requestAutofill'], where: { id: userId }, include: [{ model: UserProfile, as: 'userProfile' }] }); diff --git a/src/test/user.test.js b/src/test/user.test.js index f933cf3..5f05332 100644 --- a/src/test/user.test.js +++ b/src/test/user.test.js @@ -26,6 +26,7 @@ const googleRedirect = '/api/v1/auth/google/redirect'; const facebookRedirect = '/api/v1/auth/facebook/redirect'; const signout = '/api/v1/auth/signout'; const emailPreferences = '/api/v1/auth/email-preferences'; +const autofillPreference = '/api/v1/auth/autofill-preference'; chai.use(chaiHttp); @@ -653,6 +654,18 @@ describe('Email Preference', () => { done(); }); }); + it('should update user autofill preference', (done) => { + chai + .request(server) + .patch(autofillPreference) + .set('Authorization', `Bearer ${token}`) + .end((_err, res) => { + if (_err) done(_err); + expect(res.status).to.eq(200); + expect(res.body.data.requestAutofill).to.eq(true); + done(); + }); + }); }); describe('Users Logout', () => { diff --git a/src/utils/sessionManager.js b/src/utils/sessionManager.js index df05b12..54825c1 100644 --- a/src/utils/sessionManager.js +++ b/src/utils/sessionManager.js @@ -31,6 +31,7 @@ class SessionManager { lastName: data.lastName, accountVerified: data.accountVerified, emailAllowed: data.emailAllowed, + requestAutofill: data.requestAutofill, userRoles: data.userRoles }, data.secret || process.env.TOKEN,