apollo-passport-local-strategy
Version:
Local strategy using email address and hashed, bcrypted password
109 lines (82 loc) • 3.17 kB
JavaScript
;
var _chai = require('chai');
var _chai2 = _interopRequireDefault(_chai);
var _chaiAsPromised = require('chai-as-promised');
var _chaiAsPromised2 = _interopRequireDefault(_chaiAsPromised);
require('regenerator-runtime/runtime');
var _verify2 = require('./verify');
var _verify3 = _interopRequireDefault(_verify2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_chai2.default.use(_chaiAsPromised2.default);
var should = _chai2.default.should();
describe('apollo-passport-local - verify', function () {
var context = {};
var verify = _verify3.default.bind(context);
var error = new Error('test error');
var comparePasswordError = false;
context.comparePassword = function (pass1, pass2, cb) {
if (comparePasswordError) cb(error);else cb(null, pass1 === pass2);
};
context.db = {
fetchUserByEmail: function fetchUserByEmail(email) {
return new Promise(function (resolve, reject) {
if (email === 'error-email') return reject(error);else if (email === 'non-existing-email') return resolve(null);else if (email === 'no-password-set') return resolve({ id: 'user1 ' });else if (email === 'valid-user') resolve({
id: 'user1',
services: { password: { bcrypt: 'password' } }
});else throw new Error("unknown test email: " + email);
});
}
};
it('self-test: throws on unknown test-email', function () {
context.db.fetchUserByEmail('invalid').should.reject;
});
it('should catch db errors and pass to callback', function (done) {
verify("error-email", "bar", function (err, user, info) {
err.should.equal(error);
should.equal(user, undefined);
should.not.exist(info);
done();
});
});
it('should fail on no matching email', function (done) {
verify("non-existing-email", "test123", function (err, user, info) {
should.not.exist(err);
user.should.be.false;
info.should.equal("Invalid email");
done();
});
});
it('should fail on no matching password', function (done) {
verify("valid-user", "non-matching-password", function (err, user, info) {
should.not.exist(err);
user.should.be.false;
info.should.equal("Invalid password");
done();
});
});
it('should fail when user has no password set', function (done) {
verify("no-password-set", "password", function (err, user, info) {
should.not.exist(err);
user.should.be.false;
info.should.equal("No password set");
done();
});
});
it('should return a matching user when correct password given', function (done) {
verify("valid-user", "password", function (err, user, info) {
should.not.exist(err);
user.id.should.equal("user1");
should.not.exist(info);
done();
});
});
it('should call cb(err) on a thrown error', function (done) {
comparePasswordError = true;
verify("valid-user", "test123", function (err, user) {
err.should.equal(error);
should.equal(user, undefined);
comparePasswordError = false; // reset for next test
done();
});
});
});