-
Notifications
You must be signed in to change notification settings - Fork 1
/
UserPassword.unit.ts
35 lines (28 loc) · 1.42 KB
/
UserPassword.unit.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { UserPassword } from './UserPassword';
import { CreatePasswordErrors } from './UserPasswordErrors';
test('Create with plain text', async () => {
const passwordOrError = UserPassword.create({ value: 'super_secret' });
expect(passwordOrError.isSuccess).toBe(true);
const password = passwordOrError.value;
expect(password.value).toBe('super_secret');
const passwordValid = await password.comparePassword('super_secret');
expect(passwordValid).toBe(true);
expect(password.isAlreadyHashed()).toBe(false);
});
test(`Fails when it's too short`, async () => {
const passwordOrError = UserPassword.create({ value: 'short' });
expect(passwordOrError.isFailure).toBe(true);
expect(passwordOrError.error).toBeInstanceOf(CreatePasswordErrors.TooShort);
});
test('Create with hashed text', async () => {
// Hash for password 'super_secret' with salt bcrypt.hashSync("bacon"): $2a$10$QMdHMmcWVZGrYxIPyHeMfOynZyb9Go8yjvdJLNU8AQ5M0YhLRJLIO
const hash = '$2a$10$QMdHMmcWVZGrYxIPyHeMfOynZyb9Go8yjvdJLNU8AQ5M0YhLRJLIO';
const passwordOrError = UserPassword.create({ value: hash, hashed: true });
expect(passwordOrError.isSuccess).toBe(true);
const password = passwordOrError.value;
const passwordValid = await password.comparePassword('super_secret');
expect(passwordValid).toBe(true);
expect(password.isAlreadyHashed()).toBe(true);
const hashGotten = await password.getHashedValue();
expect(hashGotten).toBe(hash);
});