import {
  encrypt as encryptPassword,
  makeSalt,
} from '../../../../../website/server/libs/api-v3/password';

describe('Password Utilities', () => {
  describe('Encrypt', () => {
    it('always encrypt the same password to the same value when using the same salt', () => {
      let textPassword = 'mySecretPassword';
      let salt = makeSalt();
      let encryptedPassword = encryptPassword(textPassword, salt);

      expect(encryptPassword(textPassword, salt)).to.eql(encryptedPassword);
    });

    it('never encrypt the same password to the same value when using a different salt', () => {
      let textPassword = 'mySecretPassword';
      let aSalt = makeSalt();
      let anotherSalt = makeSalt();
      let anEncryptedPassword = encryptPassword(textPassword, aSalt);
      let anotherEncryptedPassword = encryptPassword(textPassword, anotherSalt);

      expect(anEncryptedPassword).not.to.eql(anotherEncryptedPassword);
    });
  });

  describe('Make Salt', () => {
    it('creates a salt with length 10 by default', () => {
      let salt = makeSalt();

      expect(salt.length).to.eql(10);
    });

    it('can create a salt of any length', () => {
      let length = 24;
      let salt = makeSalt(length);

      expect(salt.length).to.eql(length);
    });
  });
});
