import { PasswordService } from './password.service';

describe('PasswordService', () => {
  const service = new PasswordService();

  it('não guarda a senha em texto no hash', async () => {
    const hash = await service.hash('senhaSegura123');
    expect(hash).not.toContain('senhaSegura123');
    expect(hash.startsWith('scrypt$')).toBe(true);
  });

  it('gera hashes diferentes para a mesma senha (salt por usuário)', async () => {
    const a = await service.hash('senhaSegura123');
    const b = await service.hash('senhaSegura123');
    expect(a).not.toEqual(b);
  });

  it('valida a senha correta', async () => {
    const hash = await service.hash('senhaSegura123');
    await expect(service.verify('senhaSegura123', hash)).resolves.toBe(true);
  });

  it('recusa senha errada', async () => {
    const hash = await service.hash('senhaSegura123');
    await expect(service.verify('senhaErrada123', hash)).resolves.toBe(false);
  });

  it('recusa hash malformado sem lançar', async () => {
    await expect(service.verify('qualquer', 'lixo')).resolves.toBe(false);
    await expect(service.verify('qualquer', 'scrypt$1$2$3')).resolves.toBe(
      false,
    );
  });
});
