From 528d805cdade56bed69361480634b3baa5b8e5d4 Mon Sep 17 00:00:00 2001 From: Victor Piousbox Date: Thu, 24 Mar 2016 17:51:31 +0000 Subject: [PATCH] api-v3-test-attach-local-to-social-auth --- .../user/auth/POST-register_local.test.js | 34 +++++++++++++++++++ website/src/controllers/api-v3/auth.js | 5 ++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/test/api/v3/integration/user/auth/POST-register_local.test.js b/test/api/v3/integration/user/auth/POST-register_local.test.js index c2f02c3f68..d0b46ecfa9 100644 --- a/test/api/v3/integration/user/auth/POST-register_local.test.js +++ b/test/api/v3/integration/user/auth/POST-register_local.test.js @@ -116,6 +116,40 @@ describe('POST /user/auth/local/register', () => { }); }); + context('attach to facebook user', () => { + let user; + let email = 'some@email.net'; + let username = 'some-username'; + let password = 'some-password'; + beforeEach(async () => { + user = await generateUser(); + }); + it('checks onlySocialAttachLocal', async () => { + await expect(user.post('/user/auth/local/register', { + email, + username, + password, + confirmPassword: password, + })).to.eventually.be.rejected.and.eql({ + code: 401, + error: 'NotAuthorized', + message: t('onlySocialAttachLocal'), + }); + }); + it('succeeds', async () => { + await user.update({ 'auth.facebook.id': 'some-fb-id', 'auth.local': { ok: true } }); + await user.post('/user/auth/local/register', { + username, + email, + password, + confirmPassword: password, + }); + await user.sync(); + expect(user.auth.local.username).to.eql(username); + expect(user.auth.local.email).to.eql(email); + }); + }); + context('login is already taken', () => { let username, email, api; diff --git a/website/src/controllers/api-v3/auth.js b/website/src/controllers/api-v3/auth.js index e278d95f01..51c177f511 100644 --- a/website/src/controllers/api-v3/auth.js +++ b/website/src/controllers/api-v3/auth.js @@ -70,7 +70,7 @@ api.registerLocal = { url: '/user/auth/local/register', async handler (req, res) { let fbUser = res.locals.user; // If adding local auth to social user - // TODO check user doesn't have local auth + req.checkBody({ email: { notEmpty: {errorMessage: res.t('missingEmail')}, @@ -82,7 +82,6 @@ api.registerLocal = { equals: {options: [req.body.confirmPassword], errorMessage: res.t('passwordConfirmationMatch')}, }, }); - let validationErrors = req.validationErrors(); if (validationErrors) throw validationErrors; @@ -124,7 +123,7 @@ api.registerLocal = { if (fbUser) { if (!fbUser.auth.facebook.id) throw new NotAuthorized(res.t('onlySocialAttachLocal')); - fbUser.auth.local = newUser; + fbUser.auth.local = newUser.auth.local; newUser = fbUser; } else { newUser = new User(newUser);