diff --git a/src/routes/test/apps-test.js b/src/routes/test/apps-test.js index 1efd7825c..2e31fdc28 100644 --- a/src/routes/test/apps-test.js +++ b/src/routes/test/apps-test.js @@ -138,7 +138,7 @@ function setup(done) { function (callback) { superagent.post(SERVER_URL + '/api/v1/users') .query({ access_token: token }) - .send({ username: USERNAME_1, email: EMAIL_1 }) + .send({ username: USERNAME_1, email: EMAIL_1, invite: false }) .end(function (err, res) { expect(res.statusCode).to.equal(201); diff --git a/src/routes/test/user-test.js b/src/routes/test/user-test.js index e19fe3aaf..6ce7d43fc 100644 --- a/src/routes/test/user-test.js +++ b/src/routes/test/user-test.js @@ -232,7 +232,7 @@ describe('User API', function () { superagent.post(SERVER_URL + '/api/v1/users') .query({ access_token: token }) - .send({ username: USERNAME_1, email: EMAIL_1 }) + .send({ username: USERNAME_1, email: EMAIL_1, invite: true }) .end(function (err, res) { expect(err).to.not.be.ok(); expect(res.statusCode).to.equal(201); @@ -341,21 +341,36 @@ describe('User API', function () { }); }); - it('create second and third user', function (done) { + it('create user missing invite fails', function (done) { superagent.post(SERVER_URL + '/api/v1/users') .query({ access_token: token }) .send({ username: USERNAME_2, email: EMAIL_2 }) + .end(function (error, result) { + expect(result.statusCode).to.equal(400); + done(); + }); + }); + + it('create second and third user', function (done) { + mailer._clearMailQueue(); + + superagent.post(SERVER_URL + '/api/v1/users') + .query({ access_token: token }) + .send({ username: USERNAME_2, email: EMAIL_2, invite: false }) .end(function (error, res) { expect(res.statusCode).to.equal(201); superagent.post(SERVER_URL + '/api/v1/users') .query({ access_token: token }) - .send({ username: USERNAME_3, email: EMAIL_3 }) + .send({ username: USERNAME_3, email: EMAIL_3, invite: true }) .end(function (error, res) { expect(res.statusCode).to.equal(201); - // HACK to get a token for second user (passwords are generated and the user should have gotten a password setup link...) - tokendb.add(token_2, tokendb.PREFIX_USER + USERNAME_2, 'test-client-id', Date.now() + 10000, '*', done); + // one mail for first user creation, two mails for second user creation (see 'invite' flag) + checkMails(3, function () { + // HACK to get a token for second user (passwords are generated and the user should have gotten a password setup link...) + tokendb.add(token_2, tokendb.PREFIX_USER + USERNAME_2, 'test-client-id', Date.now() + 10000, '*', done); + }); }); }); }); @@ -376,7 +391,7 @@ describe('User API', function () { it('create user with same username should fail', function (done) { superagent.post(SERVER_URL + '/api/v1/users') .query({ access_token: token }) - .send({ username: USERNAME_2, email: EMAIL }) + .send({ username: USERNAME_2, email: EMAIL, invite: false }) .end(function (err, res) { expect(res.statusCode).to.equal(409); done(); diff --git a/src/routes/user.js b/src/routes/user.js index 1ebe7da21..315f09006 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -45,12 +45,14 @@ function createUser(req, res, next) { if (typeof req.body.username !== 'string') return next(new HttpError(400, 'username must be string')); if (typeof req.body.email !== 'string') return next(new HttpError(400, 'email must be string')); + if (typeof req.body.invite !== 'boolean') return next(new HttpError(400, 'invite must be boolean')); var username = req.body.username; var password = generatePassword(8, true /* memorable */); var email = req.body.email; + var sendInvite = req.body.invite; - user.create(username, password, email, false /* admin */, req.user /* creator */, true /* sendInvite */, function (error, user) { + user.create(username, password, email, false /* admin */, req.user /* creator */, sendInvite, function (error, user) { if (error && error.reason === UserError.BAD_USERNAME) return next(new HttpError(400, 'Invalid username')); if (error && error.reason === UserError.BAD_EMAIL) return next(new HttpError(400, 'Invalid email')); if (error && error.reason === UserError.BAD_PASSWORD) return next(new HttpError(400, 'Invalid password')); diff --git a/webadmin/src/js/client.js b/webadmin/src/js/client.js index b47ef810a..d2f0a22da 100644 --- a/webadmin/src/js/client.js +++ b/webadmin/src/js/client.js @@ -544,7 +544,7 @@ angular.module('Application').service('Client', ['$http', 'md5', 'Notification', var data = { username: username, email: email, - invite: sendInvite + invite: !!sendInvite }; $http.post(client.apiOrigin + '/api/v1/users', data).success(function(data, status) {