Added a setting to update user’s profile

This commit is contained in:
Jori Lallo
2017-12-03 00:00:23 -08:00
parent e880c9295e
commit cd1d2430bb
5 changed files with 139 additions and 13 deletions

View File

@ -22,3 +22,26 @@ Object {
"status": 200,
}
`;
exports[`#user.update should require authentication 1`] = `
Object {
"error": "authentication_required",
"message": "Authentication required",
"ok": false,
"status": 401,
}
`;
exports[`#user.update should update user profile information 1`] = `
Object {
"data": Object {
"avatarUrl": "http://example.com/avatar.png",
"email": "user1@example.com",
"id": "46fde1d4-0050-428f-9f0b-0bf77f4bdf61",
"name": "New name",
"username": "user1",
},
"ok": true,
"status": 200,
}
`;

View File

@ -11,6 +11,12 @@ export default function validation() {
}
};
ctx.assertNotEmpty = function assertNotEmpty(value, message) {
if (value === '') {
throw apiError(400, 'validation_error', message);
}
};
ctx.assertEmail = (value, message) => {
if (!validator.isEmail(value)) {
throw apiError(400, 'validation_error', message);

View File

@ -11,6 +11,17 @@ router.post('user.info', auth(), async ctx => {
ctx.body = { data: await presentUser(ctx, ctx.state.user) };
});
router.post('user.update', auth(), async ctx => {
const { user } = ctx.state;
const { name } = ctx.body;
ctx.assertNotEmpty(name, "name can't be empty");
if (name) user.name = name;
await user.save();
ctx.body = { data: await presentUser(ctx, user) };
});
router.post('user.s3Upload', auth(), async ctx => {
const { filename, kind, size } = ctx.body;
ctx.assertPresent(filename, 'filename is required');

View File

@ -38,3 +38,31 @@ describe('#user.info', async () => {
expect(body).toMatchSnapshot();
});
});
describe('#user.update', async () => {
it('should update user profile information', async () => {
await seed();
const user = await User.findOne({
where: {
email: 'user1@example.com',
},
});
const res = await server.post('/api/user.update', {
body: { token: user.getJwtToken(), name: 'New name' },
});
const body = await res.json();
expect(res.status).toEqual(200);
expect(body).toMatchSnapshot();
});
it('should require authentication', async () => {
await seed();
const res = await server.post('/api/user.update');
const body = await res.json();
expect(res.status).toEqual(401);
expect(body).toMatchSnapshot();
});
});