ACTIVEPIECES/packages/server/api/test/integration/ce/authentication/password-hasher.test.ts
rohit cd823a2d9e
Some checks failed
Crowdin Action / synchronize-with-crowdin (push) Has been cancelled
Release Pieces / Release-Pieces (push) Has been cancelled
automaton layer
2025-07-05 23:59:03 +05:30

95 lines
3.5 KiB
TypeScript

import bcrypt from 'bcrypt'
import { passwordHasher } from '../../../../src/app/authentication/lib/password-hasher'
const SCRYPT_SEPARATOR = '~'
describe('Password Hasher', () => {
const plainTextPassword = 'password123'
describe('hash', () => {
it('should not produce the same hash for the same password', async () => {
const hashedPassword1 = await bcrypt.hash(plainTextPassword, 10)
const hashedPassword2 = await bcrypt.hash(plainTextPassword, 10)
expect(hashedPassword1).not.toBe(hashedPassword2)
})
it('should verify hashed password correctly', async () => {
const hashedPassword = await bcrypt.hash(plainTextPassword, 10)
const result = await bcrypt.compare(plainTextPassword, hashedPassword)
expect(result).toBe(true)
})
it('should fail to verify incorrect password', async () => {
const hashedPassword = await bcrypt.hash(plainTextPassword, 10)
const incorrectPassword = 'incorrectPassword'
const result = await bcrypt.compare(incorrectPassword, hashedPassword)
expect(result).toBe(false)
})
})
describe('compare', () => {
it('should return true for identical bcrypt passwords', async () => {
const hashedPassword = await bcrypt.hash(plainTextPassword, 10)
const result = await passwordHasher.compare(
plainTextPassword,
hashedPassword,
)
expect(result).toBe(true)
})
it('should return false for different bcrypt passwords', async () => {
const hashedPassword = await bcrypt.hash(plainTextPassword, 10)
const differentPassword = 'differentPassword'
const result = await passwordHasher.compare(
differentPassword,
hashedPassword,
)
expect(result).toBe(false)
})
it('should return false for empty password bcrypt comparison', async () => {
const hashedPassword = await bcrypt.hash(plainTextPassword, 10)
const result = await passwordHasher.compare('', hashedPassword)
expect(result).toBe(false)
})
it('should return false for empty hash comparison', async () => {
const result = await passwordHasher.compare(plainTextPassword, '')
expect(result).toBe(false)
})
it('should return false for both empty password and hash', async () => {
const result = await passwordHasher.compare('', '')
expect(result).toBe(false)
})
})
describe('compare - Scrypt', () => {
const plainTextPassword = 'BusyBeaver$LOL99'
const salt = 'sPtDhWcd1MfdAw=='
const hashedPassword =
'iu1iqj6i6g9D7aBiE/Qdqv88GNnV/Ea67JK1kfLmzNgxsyCL8mhUxxI5VIHM9D+62xGHuZgjrfEBF+17wxyFIQ=='
it('should return true for identical scrypt passwords', async () => {
const result = await passwordHasher.compare(
plainTextPassword,
`$scrypt$${hashedPassword}${SCRYPT_SEPARATOR}${salt}`,
)
expect(result).toBe(true)
})
it('should return false for different scrypt passwords', async () => {
const differentPassword = 'differentPassword'
const result = await passwordHasher.compare(
differentPassword,
`$scrypt$${hashedPassword}${SCRYPT_SEPARATOR}${salt}`,
)
expect(result).toBe(false)
})
})
})