diff --git a/test/api/v3/integration/user/auth/POST-user_auth_social.test.js b/test/api/v3/integration/user/auth/POST-user_auth_social.test.js index 477c2d6ed3..ff58ec86c0 100644 --- a/test/api/v3/integration/user/auth/POST-user_auth_social.test.js +++ b/test/api/v3/integration/user/auth/POST-user_auth_social.test.js @@ -2,6 +2,7 @@ import { generateUser, requester, translate as t, + getProperty, } from '../../../../../helpers/api-integration/v3'; import passport from 'passport'; @@ -44,6 +45,15 @@ describe('POST /user/auth/social', () => { expect(response.newUser).to.be.true; }); + it('enrolls a new user in an A/B test', async () => { + await api.post(endpoint, { + authResponse: {access_token: randomAccessToken}, // eslint-disable-line camelcase + network, + }); + + await expect(getProperty('users', user._id, '_ABtest')).to.eventually.be.a('string'); + }); + it('logs an existing user in', async () => { await user.update({ 'auth.facebook.id': facebookId }); diff --git a/website/server/controllers/api-v3/auth.js b/website/server/controllers/api-v3/auth.js index 83c68f1421..48a138d5da 100644 --- a/website/server/controllers/api-v3/auth.js +++ b/website/server/controllers/api-v3/auth.js @@ -130,14 +130,6 @@ api.registerLocal = { newUser.registeredThrough = req.headers['x-client']; // Not saved, used to create the correct tasks based on the device used } - // A/B Test 2016-09-12: Start with Sound Enabled? - if (Math.random() < 0.5) { - newUser.preferences.sound = 'rosstavoTheme'; - newUser._ABtest = '20160912-soundEnabled'; - } else { - newUser._ABtest = '20160912-soundDisabled'; - } - // we check for partyInvite for backward compatibility if (req.query.groupInvite || req.query.partyInvite) { await _handleGroupInvitation(newUser, req.query.groupInvite || req.query.partyInvite); diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 314e9f69e9..b897e4ccab 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -73,10 +73,18 @@ function _populateDefaultTasks (user, taskTypes) { }); } -function _populateDefaultsForNewUser (user) { +function _setUpNewUser (user) { let taskTypes; let iterableFlags = user.flags.toObject(); + // A/B Test 2016-09-12: Start with Sound Enabled? + if (Math.random() < 0.5) { + user.preferences.sound = 'rosstavoTheme'; + user._ABtest = '20160912-soundEnabled'; + } else { + user._ABtest = '20160912-soundDisabled'; + } + if (user.registeredThrough === 'habitica-web' || user.registeredThrough === 'habitica-android') { taskTypes = ['habit', 'daily', 'todo', 'reward', 'tag']; @@ -158,7 +166,7 @@ schema.pre('save', true, function preSaveUser (next, done) { // Populate new users with default content if (this.isNew) { - _populateDefaultsForNewUser(this) + _setUpNewUser(this) .then(() => done()) .catch(done); } else {