diff --git a/package.json b/package.json index 6403a3eec6..b3f6a16acd 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,7 @@ }, "devDependencies": { "chai": "^3.4.0", + "chai-as-promised": "^5.1.0", "coffee-coverage": "~0.4.2", "coveralls": "^2.11.2", "csv": "~0.3.6", diff --git a/test/api/register/POST-register.test.js b/test/api/register/POST-register.test.js index e8e970cf44..a932aa4b2e 100644 --- a/test/api/register/POST-register.test.js +++ b/test/api/register/POST-register.test.js @@ -1,31 +1,83 @@ -import {requester} from '../../helpers/api.helper'; +import { + generateUser, + requester, +} from '../../helpers/api.helper'; import {v4 as generateRandomUserName} from 'uuid'; describe('POST /register', () => { - let api; - beforeEach(() => { - api = requester(); + context('username and email are free', () => { + it('registers a new user', (done) => { + let api = requester(); + let username = generateRandomUserName(); + let email = `${username}@example.com`; + let password = 'password'; + + api.post('/register', { + username: username, + email: email, + password: password, + confirmPassword: password, + }).then((user) => { + expect(user._id).to.exist; + expect(user.apiToken).to.exist; + expect(user.auth.local.username).to.eql(username); + done(); + }); + }); + + it('requires password and confirmPassword to match', () => { + let api = requester(); + let username = generateRandomUserName(); + let email = `${username}@example.com`; + let password = 'password'; + let confirmPassword = 'not password'; + + return expect(api.post('/register', { + username: username, + email: email, + password: password, + confirmPassword: confirmPassword, + })).to.be.rejectedWith(':password and :confirmPassword don\'t match'); + }); }); - it('registers a new user', (done) => { - let username = generateRandomUserName(); - let email = `${username}@example.com`; - let password = 'password'; + context('login is already taken', () => { + let username, email; + beforeEach(() => { + username = generateRandomUserName(); + email = `${username}@example.com`; + return generateUser({ + 'auth.local.username': username, + 'auth.local.lowerCaseUsername': username, + 'auth.local.email': email + }); + }); - api.post('/register', { - username: username, - email: email, - password: password, - confirmPassword: password, - }).then((user) => { - expect(user._id).to.exist; - expect(user.auth.local.username).to.eql(username); - expect(user.auth.local.email).to.eql(`${username}@example.com`); - done(); - }) - .catch((err) => { - done(err); + it('rejects if username is already taken', () => { + let api = requester(); + let uniqueEmail = `${generateRandomUserName()}@exampe.com`; + let password = 'password'; + + return expect(api.post('/register', { + username: username, + email: uniqueEmail, + password: password, + confirmPassword: password, + })).to.be.rejectedWith('Username already taken'); + }); + + it('rejects if email is already taken', () => { + let api = requester(); + let uniqueUsername = generateRandomUserName(); + let password = 'password'; + + return expect(api.post('/register', { + username: uniqueUsername, + email: email, + password: password, + confirmPassword: password, + })).to.be.rejectedWith('Email already taken'); }); }); }); diff --git a/test/helpers/globals.helper.js b/test/helpers/globals.helper.js index 892d086dc8..a731f1e8c2 100644 --- a/test/helpers/globals.helper.js +++ b/test/helpers/globals.helper.js @@ -5,4 +5,5 @@ global._ = require("lodash") global.chai = require("chai") chai.use(require("sinon-chai")) +chai.use(require("chai-as-promised")); global.expect = chai.expect