Skip to content

Commit

Permalink
Merge 958feaa into 9c9a97b
Browse files Browse the repository at this point in the history
  • Loading branch information
sojida committed Apr 3, 2019
2 parents 9c9a97b + 958feaa commit 61d2c06
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 0 deletions.
33 changes: 33 additions & 0 deletions server/controllers/profile.controllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,39 @@ const controller = {
data: [profile],
});
},

async getProfileByField(req, res) {
try {
if (!validations.validProfileQueryString(req.query)) {
return res.status(400).json({
error: 'invalid query sring',
});
}
const users = await User.findAll({
where: req.query,
attributes: [
'first_name',
'last_name',
'title',
'phone_number',
'email',
'is_reviewer',
'research_field',
'createdAt',
'updatedAt',
],
});

return res.status(200).json({
data: users,
});
} catch (error) {
return res.status(500).json({
error,
message: 'Oops! There seem to be a database error',
});
}
},
};

export default controller;
19 changes: 19 additions & 0 deletions server/helpers/validations.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,25 @@ const validations = {
return true;
},
validateArticlePage,
validProfileQueryString(query) {
let valid = true;
const searchableProfileFields = [
'first_name',
'last_name',
'title',
'email',
'is_reviewer',
'research_field',
];

Object.keys(query).forEach(item => {
if (!searchableProfileFields.includes(item)) {
valid = false;
}
});

return valid;
},
};

export default validations;
1 change: 1 addition & 0 deletions server/routes/profile.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ const { profileController } = controllers;
const router = express.Router();

router.get('/profile/:id', profileController.getUserProfile);
router.get('/profile', profileController.getProfileByField);

export default router;
23 changes: 23 additions & 0 deletions tests/profile.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,27 @@ describe('PROFILE', () => {
done();
});
});

it('should respond with user based on query string', done => {
chai
.request(app)
.get(`/api/v1/profile?first_name=Ameachi`)
.end((err, res) => {
expect(res).to.have.status(200);
const { first_name: firstname } = res.body.data[0];
expect(firstname).to.equal('Ameachi');
done();
});
});

it('should respond with error as not a serchable parameter', done => {
chai
.request(app)
.get(`/api/v1/profile?firstname=Ameachi`)
.end((err, res) => {
expect(res).to.have.status(400);
expect(res.body.error).to.equal('invalid query sring');
done();
});
});
});

0 comments on commit 61d2c06

Please sign in to comment.