|
|
|
const { assert } = require('chai');
|
|
|
|
|
|
|
|
const passwordUtil = require('../../app/password_util');
|
|
|
|
|
|
|
|
describe('Password Util', () => {
|
|
|
|
describe('hash generation', () => {
|
|
|
|
it('generates the same hash for the same phrase', () => {
|
|
|
|
const first = passwordUtil.generateHash('phrase');
|
|
|
|
const second = passwordUtil.generateHash('phrase');
|
|
|
|
assert.equal(first, second);
|
|
|
|
});
|
|
|
|
it('generates different hashes for different phrases', () => {
|
|
|
|
const first = passwordUtil.generateHash('0');
|
|
|
|
const second = passwordUtil.generateHash('1');
|
|
|
|
assert.notEqual(first, second);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('hash matching', () => {
|
|
|
|
it('returns true for the same hash', () => {
|
|
|
|
const phrase = 'phrase';
|
|
|
|
const hash = passwordUtil.generateHash(phrase);
|
|
|
|
assert.isTrue(passwordUtil.matchesHash(phrase, hash));
|
|
|
|
});
|
|
|
|
it('returns false for different hashes', () => {
|
|
|
|
const hash = passwordUtil.generateHash('phrase');
|
|
|
|
assert.isFalse(passwordUtil.matchesHash('phrase2', hash));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('password validation', () => {
|
|
|
|
it('should return nothing if password is valid', () => {
|
|
|
|
const valid = [
|
|
|
|
'123456',
|
|
|
|
'1a5b3C6g',
|
|
|
|
'ABC#DE#F$IJ',
|
|
|
|
'AabcDegf',
|
|
|
|
];
|
|
|
|
valid.forEach(pass => {
|
|
|
|
assert.isNull(passwordUtil.validatePassword(pass));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return an error string if password is invalid', () => {
|
|
|
|
const invalid = [
|
|
|
|
0,
|
|
|
|
123456,
|
|
|
|
[],
|
|
|
|
{},
|
|
|
|
'123',
|
|
|
|
'1234$',
|
|
|
|
];
|
|
|
|
invalid.forEach(pass => {
|
|
|
|
assert.isNotNull(passwordUtil.validatePassword(pass));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|