UNPKG

itspersonal

Version:

Create users, tokens and manages logins

144 lines (117 loc) 4.09 kB
/* * (C) 2016 Seth Lakowske */ var test = require('tape'); var login = require('../index'); var Sequelize = require('Sequelize'); function testDB() { return new Sequelize('database', 'username', 'password', { // sqlite! now! dialect: 'sqlite', logging: false }); } function createSeth(models, t, fn) { var user = login.createUser(models, 'lakowske@gmail.com', 'mepassword', 'stateless', 'Seth', 'Lakowske', {}).then(function(user) { t.equal(user.dataValues.email, 'lakowske@gmail.com', 'email saved'); fn(user); }).error(function(err) { t.end(err) }); } test('password hash', function(t) { var time = Date.now(); var result = login.hashTimes('mepassword', 'lakowske@gmail.com', 1000); var result2 = login.hashTimes('mepassword', 'lakowske@gmail.com', 1000); var time2 = Date.now(); t.equal(result, result2, 'password hash is correct'); console.log('hashing took ' + (time2 - time)); t.end(); }) test('can create user', function(t) { var db = testDB(); var models = {} login.UserModel(db, models); function createUserTest() { createSeth(models, t, function() {t.end()}) } db.sync().then(createUserTest); }); test('can add token', function(t) { var db = testDB(); var models = {} login.UserModel(db, models); function createUserTest() { createSeth(models, t, function(user) { models.Token.create({token : 'mytoken2'}).then(function(token) { user.addToken(token).then(function() { models.User.findAll({ include:[{ model:models.Token, where: { token : 'mytoken2' } }] }).then(function(tokUser) { t.equals(tokUser[0].tokens[0].dataValues.token, 'mytoken2', 'found user by token'); t.end() }).error(function(err) { t.error(err); }) }) }); }) } db.sync().then(createUserTest); }) test('login user creates a token', function(t) { var db = testDB(); var models = {} login.UserModel(db, models); function loginTest() { createSeth(models, t, function(user) { login.userLogin(models, 'lakowske@gmail.com', 'mepassword', function(state) { models.User.findAll({ include:[{ model:models.Token, where: { token : state.token } }] }).then(function(tokUser) { t.equals(tokUser.length, 1); t.equals(tokUser[0].tokens[0].dataValues.token, state.token, 'found users token'); t.end(); }).error(function(err) { console.log('hi'); t.error(err); }) }) }) } db.sync().then(loginTest); }) test('login with token', function(t) { var db = testDB(); var models = {} login.UserModel(db, models); function loginTest() { createSeth(models, t, function(user) { login.userLogin(models, 'lakowske@gmail.com', 'mepassword', function(state) { login.tokenLogin(models, state.token, function(state2) { t.equals(state2.user.userid, 'stateless', 'found user by token'); t.end() }) }) }) } db.sync().then(loginTest); }) test('register user', function(t) { var db = testDB(); var models = {} login.UserModel(db, models); function loginTest() { login.registerUser(models, 'lakowske@gmail.com', 'blah', {mytest:'data'}, function(state) { t.equals(state.user.email, 'lakowske@gmail.com', 'registered user'); t.end(); }); } db.sync().then(loginTest); });