From 0e5b80988d6f3df4cac50315924e5e8835c42472 Mon Sep 17 00:00:00 2001 From: encodedBicoding Date: Wed, 14 Aug 2019 21:51:19 +0100 Subject: [PATCH] ft(role-based): get single user by username Admins can get single user by username [(Delivers) #167907830] --- server/controllers/adminController.js | 22 +++++++++++++++++ server/docs/ah-commando-doc.yml | 34 ++++++++++++++++++++++++--- server/routes/admin.js | 3 ++- server/routes/user.js | 2 -- server/tests/admin.test.js | 26 ++++++++++++++++++++ 5 files changed, 81 insertions(+), 6 deletions(-) diff --git a/server/controllers/adminController.js b/server/controllers/adminController.js index 38ba8a4..6833952 100644 --- a/server/controllers/adminController.js +++ b/server/controllers/adminController.js @@ -114,6 +114,28 @@ class AdminController { }); return successStat(res, 200, 'message', 'Comment deleted successfully'); } + + /** + * @static + * @description gets a single user + * @param {*} req - Request Object + * @param {*} res - Response Object + * @returns {object} - user details containing active status + */ + static async getASingleUser(req, res) { + const { username } = req.params; + const foundUser = await models.User.findOne( + { + where: { + username + }, + attributes: ['isActive', 'image', 'username', 'firstname', 'lastname', 'bio'] + } + ); + if (!foundUser) return errorStat(res, 404, 'User not found'); + + return successStat(res, 200, 'data', foundUser); + } } export default AdminController; diff --git a/server/docs/ah-commando-doc.yml b/server/docs/ah-commando-doc.yml index d483b95..475b492 100644 --- a/server/docs/ah-commando-doc.yml +++ b/server/docs/ah-commando-doc.yml @@ -468,13 +468,12 @@ paths: name: limit schema: type: integer - description: The number of articles to return - description: user can get all articles - parameters: - in: query name: searchQuery schema: type: string + description: The number of articles to return + description: user can get all articles responses: '200': description: successfully view all articles @@ -1677,6 +1676,35 @@ paths: application/json: schema: $ref: "#/components/schemas/errorResponse" + /admin/getUser/{username}: + get: + tags: + - Admin - Role based + security: + - bearerAuth: [] + summary: get a single user by username + description: Admin can get single user by username + parameters: + - in: path + name: username + schema: + type: string + required: true + responses: + '200': + description: successfully view a single user found by username + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/errorResponse" + '500': + description: Server error + content: + application/json: + schema: + $ref: "#/components/schemas/errorResponse" components: securitySchemes: bearerAuth: diff --git a/server/routes/admin.js b/server/routes/admin.js index 0396f7f..68f7a3f 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -8,7 +8,7 @@ const { } = middlewares; const { - assignRole, setActiveStatus, deleteAUser, deleteAnArticle, deleteAComment + assignRole, setActiveStatus, deleteAUser, deleteAnArticle, deleteAComment, getASingleUser } = AdminController; const adminRoute = express(); @@ -17,5 +17,6 @@ adminRoute.put('/setActiveStatus/:username', verifyToken, isActive, isJustAUser, adminRoute.delete('/deleteUser/:username', verifyToken, isActive, isJustAUser, validateParamsInput, deleteAUser); adminRoute.delete('/deleteArticle/:id', verifyToken, isActive, isJustAUser, validateParamsInput, deleteAnArticle); adminRoute.delete('/deleteComment/:id', verifyToken, isActive, isJustAUser, validateParamsInput, deleteAComment); +adminRoute.get('/getUser/:username', verifyToken, isActive, isJustAUser, validateParamsInput, getASingleUser); export default adminRoute; diff --git a/server/routes/user.js b/server/routes/user.js index 0af1659..29cd7e2 100644 --- a/server/routes/user.js +++ b/server/routes/user.js @@ -26,8 +26,6 @@ userRoute.get('/google/callback', passport.authenticate('google', { session: fal userRoute.get('/facebook', passport.authenticate('facebook', { scope: ['email'] })); userRoute.get('/facebook/callback', passport.authenticate('facebook', { session: false }), socialSignin); -userRoute.post('/logout', verifyToken, logout); - userRoute.get('/confirmEmail', confirmEmail); userRoute.post('/logout', verifyToken, logout); diff --git a/server/tests/admin.test.js b/server/tests/admin.test.js index 48cd246..2ac2780 100644 --- a/server/tests/admin.test.js +++ b/server/tests/admin.test.js @@ -424,4 +424,30 @@ describe('Test admin functionality', () => { }); }); }); + describe('Handle admin get single user', () => { + it('Should fail if username is not found in the platform', (done) => { + chai + .request(app) + .get(`${baseUrl}/admin/getUser/idonotexist`) + .set('Authorization', godToken) + .end((err, res) => { + const { status, error } = res.body; + expect(status).to.equal(404); + expect(error).to.equal('User not found'); + done(); + }); + }); + it('Should pass if username is found', (done) => { + chai + .request(app) + .get(`${baseUrl}/admin/getUser/lundii`) + .set('Authorization', godToken) + .end((err, res) => { + const { status, data } = res.body; + expect(status).to.equal(200); + expect(data).to.be.an('object'); + done(); + }); + }); + }); });