Files
habitica/test/api/v3/integration/user/auth/POST-register_local.test.js
2015-11-20 19:14:07 -06:00

250 lines
7.4 KiB
JavaScript

import {
generateUser,
requester,
translate as t,
} from '../../../../../helpers/api-integration.helper';
import { v4 as generateRandomUserName } from 'uuid';
import { each } from 'lodash';
describe.skip('POST /user/register/local', () => {
context('username and email are free', () => {
it('registers a new user', () => {
let api = requester();
let username = generateRandomUserName();
let email = `${username}@example.com`;
let password = 'password';
return api.post('/user/register/local', {
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);
});
});
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('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: confirmPassword,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('passwordConfirmationMatch'),
});
});
it('requires a username', () => {
let api = requester();
let email = `${generateRandomUserName()}@example.com`;
let password = 'password';
let confirmPassword = 'password';
return expect(api.post('/user/register/local', {
email: email,
password: password,
confirmPassword: confirmPassword,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('missingUsernameEmail'),
});
});
it('requires an email', () => {
let api = requester();
let username = generateRandomUserName();
let password = 'password';
let confirmPassword = 'password';
return expect(api.post('/user/register/local', {
username: username,
password: password,
confirmPassword: confirmPassword,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('missingUsernameEmail'),
});
});
it('requires a password', () => {
let api = requester();
let username = generateRandomUserName();
let email = `${username}@example.com`;
let confirmPassword = 'password';
return expect(api.post('/user/register/local', {
username: username,
email: email,
confirmPassword: confirmPassword,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('missingPassword'),
});
});
});
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
});
});
it('rejects if username is already taken', () => {
let api = requester();
let uniqueEmail = `${generateRandomUserName()}@exampe.com`;
let password = 'password';
return expect(api.post('/user/register/local', {
username: username,
email: uniqueEmail,
password: password,
confirmPassword: password,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('usernameTake'),
});
});
it('rejects if email is already taken', () => {
let api = requester();
let uniqueUsername = generateRandomUserName();
let password = 'password';
return expect(api.post('/user/register/local', {
username: uniqueUsername,
email: email,
password: password,
confirmPassword: password,
})).to.eventually.be.rejected.and.eql({
code: 401,
error: 'NotAuthorized',
message: t('emailTaken'),
});
});
});
context('successful login via api', () => {
let api, username, email, password;
beforeEach(() => {
api = requester();
username = generateRandomUserName();
email = `${username}@example.com`;
password = 'password';
});
it('sets all site tour values to -2 (already seen)', () => {
return api.post('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: password,
}).then((user) => {
expect(user.flags.tour).to.not.be.empty;
each(user.flags.tour, (value, attribute) => {
expect(value).to.eql(-2);
});
});
});
it('populates user with default todos, not no other task types', () => {
return api.post('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: password,
}).then((user) => {
expect(user.todos).to.not.be.empty;
expect(user.dailys).to.be.empty;
expect(user.habits).to.be.empty;
expect(user.rewards).to.be.empty;
});
});
it('populates user with default tags', () => {
return api.post('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: password,
}).then((user) => {
expect(user.tags).to.not.be.empty;
});
});
});
context('successful login with habitica-web header', () => {
let api, username, email, password;
beforeEach(() => {
api = requester({}, {'x-client': 'habitica-web'});
username = generateRandomUserName();
email = `${username}@example.com`;
password = 'password';
});
it('sets all common tutorial flags to true', () => {
return api.post('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: password,
}).then((user) => {
expect(user.flags.tour).to.not.be.empty;
each(user.flags.tutorial.common, (value, attribute) => {
expect(value).to.eql(true);
});
});
});
it('populates user with default todos, habits, and rewards', () => {
return api.post('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: password,
}).then((user) => {
expect(user.todos).to.not.be.empty;
expect(user.dailys).to.be.empty;
expect(user.habits).to.not.be.empty;
expect(user.rewards).to.not.be.empty;
});
});
it('populates user with default tags', () => {
return api.post('/user/register/local', {
username: username,
email: email,
password: password,
confirmPassword: password,
}).then((user) => {
expect(user.tags).to.not.be.empty;
});
});
});
});