blob: ef89a20aa001a3fdf527f7d449dbcbd4c02a06de [file] [log] [blame]
'use strict'
var should = require('should'),
util = require('util'),
chance = new require('chance').Chance(),
config = require('../../helpers').config,
UsergridClient = require('../../lib/client'),
UsergridUser = require('../../lib/user'),
UsergridQuery = require('../../lib/query')
var _slow = 1500,
_timeout = 4000,
_username1 = chance.word(),
_user1 = new UsergridUser({
username: _username1,
password: config.test.password
}),
client = new UsergridClient(config)
before(function(done) {
this.slow(_slow)
this.timeout(_timeout)
var query = new UsergridQuery('users').not.eq('username', config.test.username).limit(20)
// clean up old user entities as the UsergridResponse tests rely on this collection containing less than 10 entities
client.DELETE(query, function() {
_user1.create(client, function() {
done()
})
})
})
describe('create()', function() {
it(util.format("should create a new user with the username '%s'", _username1), function() {
_user1.username.should.equal(_username1)
})
it('should have a valid uuid', function() {
_user1.should.have.property('uuid').which.is.a.uuid()
})
it('should have a created date', function() {
_user1.should.have.property('created')
})
it('should be activated (i.e. has a valid password)', function() {
_user1.should.have.property('activated').true()
})
it('should not have a password property', function() {
_user1.should.not.have.property('password')
})
it('should fail gracefully when a username already exists', function(done) {
var user = new UsergridUser({
username: _username1,
password: config.test.password
})
user.create(client, function(err, usergridResponse) {
err.should.not.be.null()
err.should.containDeep({
name: 'duplicate_unique_property_exists'
})
usergridResponse.ok.should.be.false()
done()
})
})
it('should create a new user on the server', function(done) {
var username = chance.word()
var user = new UsergridUser({
username: username,
password: config.test.password
})
user.create(client, function(err, usergridResponse, user) {
client.isSharedInstance.should.be.false()
user.username.should.equal(username)
user.should.have.property('uuid').which.is.a.uuid()
user.should.have.property('created')
user.should.have.property('activated').true()
user.should.not.have.property('password')
// cleanup
user.remove(client, function() {
done()
})
})
})
})
describe('login()', function() {
this.slow(_slow)
this.timeout(_timeout)
it(util.format("it should log in the user '%s' and receive a token", _username1), function(done) {
_user1.password = config.test.password
_user1.login(client, function(err, response, token) {
_user1.auth.should.have.property('token').equal(token)
_user1.should.not.have.property('password')
_user1.auth.should.not.have.property('password')
done()
})
})
})
describe('logout()', function() {
this.slow(_slow)
this.timeout(_timeout)
it(util.format("it should log out '%s' and destroy the saved UsergridUserAuth instance", _username1), function(done) {
_user1.logout(client, function(err, response) {
response.ok.should.be.true()
response.body.action.should.equal("revoked user token")
_user1.auth.isValid.should.be.false()
done()
})
})
it("it should return an error when attempting to log out a user that does not have a valid token", function(done) {
_user1.logout(client, function(err) {
err.should.containDeep({
name: 'no_valid_token'
})
done()
})
})
})
describe('logoutAllSessions()', function() {
it(util.format("it should log out all tokens for the user '%s' destroy the saved UsergridUserAuth instance", _username1), function(done) {
_user1.password = config.test.password
_user1.login(client, function() {
_user1.logoutAllSessions(client, function(err, response) {
response.ok.should.be.true()
response.body.action.should.equal("revoked user tokens")
_user1.auth.isValid.should.be.false()
done()
})
})
})
})
describe('resetPassword()', function() {
this.slow(_slow)
this.timeout(_timeout)
it(util.format("it should reset the password for '%s' by passing parameters", _username1), function(done) {
_user1.resetPassword(client, config.test.password, '2cool4u', function(err, response) {
response.ok.should.be.true()
response.body.action.should.equal("set user password")
done()
})
})
it(util.format("it should reset the password for '%s' by passing an object", _username1), function(done) {
_user1.resetPassword(client, {
oldPassword: '2cool4u',
newPassword: config.test.password
}, function(err, response) {
response.ok.should.be.true()
response.body.action.should.equal("set user password")
done()
})
})
it(util.format("it should not reset the password for '%s' when passing a bad old password", _username1), function(done) {
_user1.resetPassword(client, {
oldPassword: 'BADOLDPASSWORD',
newPassword: config.test.password
}, function(err, response) {
response.ok.should.be.false()
err.name.should.equal('auth_invalid_username_or_password')
_user1.remove(client, function() {
done()
})
})
})
it("it should return an error when attempting to reset a password with missing arguments", function() {
should(function() {
_user1.resetPassword(client, 'NEWPASSWORD', function() {})
}).throw()
})
})
describe('CheckAvailable()', function() {
this.slow(_slow)
this.timeout(_timeout)
var nonExistentEmail = util.format('%s@%s.com', chance.word(), chance.word())
var nonExistentUsername = chance.word()
it(util.format("it should return true for username '%s'", config.test.username), function(done) {
UsergridUser.CheckAvailable(client, {
username: config.test.username
}, function(err, response, exists) {
exists.should.be.true()
done()
})
})
it(util.format("it should return true for email '%s'", config.test.email), function(done) {
UsergridUser.CheckAvailable(client, {
email: config.test.email
}, function(err, response, exists) {
exists.should.be.true()
done()
})
})
it(util.format("it should return true for email '%s' and non-existent username '%s'", config.test.email, nonExistentUsername), function(done) {
UsergridUser.CheckAvailable(client, {
email: config.test.email,
username: nonExistentUsername
}, function(err, response, exists) {
exists.should.be.true()
done()
})
})
it(util.format("it should return true for non-existent email '%s' and username '%s'", nonExistentEmail, config.test.username), function(done) {
UsergridUser.CheckAvailable(client, {
email: nonExistentEmail,
username: config.test.username
}, function(err, response, exists) {
exists.should.be.true()
done()
})
})
it(util.format("it should return true for email '%s' and username '%s'", config.test.email, config.test.username), function(done) {
UsergridUser.CheckAvailable(client, {
email: config.test.email,
username: config.test.useranme
}, function(err, response, exists) {
exists.should.be.true()
done()
})
})
it(util.format("it should return false for non-existent email '%s'", nonExistentEmail), function(done) {
UsergridUser.CheckAvailable(client, {
email: nonExistentEmail
}, function(err, response, exists) {
exists.should.be.false()
done()
})
})
it(util.format("it should return false for non-existent username '%s'", nonExistentUsername), function(done) {
UsergridUser.CheckAvailable(client, {
username: nonExistentUsername
}, function(err, response, exists) {
exists.should.be.false()
done()
})
})
it(util.format("it should return false for non-existent email '%s' and non-existent username '%s'", nonExistentEmail, nonExistentUsername), function(done) {
UsergridUser.CheckAvailable(client, {
email: nonExistentEmail,
username: nonExistentUsername
}, function(err, response, exists) {
exists.should.be.false()
done()
})
})
})