Import utils as a group in tests
This should simplify testing new utils a bit.
This commit is contained in:
@ -1,14 +1,4 @@
|
||||
import {
|
||||
hash,
|
||||
isHashMatch,
|
||||
handlePasswordValidation,
|
||||
PasswordMethod,
|
||||
getPasswordMethod,
|
||||
hashLegacy,
|
||||
isHashLegacyMatch,
|
||||
isCookieValid,
|
||||
sanitizeString,
|
||||
} from "../../../src/node/util"
|
||||
import * as util from "../../../src/node/util"
|
||||
|
||||
describe("getEnvPaths", () => {
|
||||
describe("on darwin", () => {
|
||||
@ -161,7 +151,7 @@ describe("getEnvPaths", () => {
|
||||
describe("hash", () => {
|
||||
it("should return a hash of the string passed in", async () => {
|
||||
const plainTextPassword = "mySecretPassword123"
|
||||
const hashed = await hash(plainTextPassword)
|
||||
const hashed = await util.hash(plainTextPassword)
|
||||
expect(hashed).not.toBe(plainTextPassword)
|
||||
})
|
||||
})
|
||||
@ -169,32 +159,32 @@ describe("hash", () => {
|
||||
describe("isHashMatch", () => {
|
||||
it("should return true if the password matches the hash", async () => {
|
||||
const password = "codeserver1234"
|
||||
const _hash = await hash(password)
|
||||
const actual = await isHashMatch(password, _hash)
|
||||
const _hash = await util.hash(password)
|
||||
const actual = await util.isHashMatch(password, _hash)
|
||||
expect(actual).toBe(true)
|
||||
})
|
||||
it("should return false if the password does not match the hash", async () => {
|
||||
const password = "password123"
|
||||
const _hash = await hash(password)
|
||||
const actual = await isHashMatch("otherPassword123", _hash)
|
||||
const _hash = await util.hash(password)
|
||||
const actual = await util.isHashMatch("otherPassword123", _hash)
|
||||
expect(actual).toBe(false)
|
||||
})
|
||||
it("should return true with actual hash", async () => {
|
||||
const password = "password123"
|
||||
const _hash = "$argon2i$v=19$m=4096,t=3,p=1$EAoczTxVki21JDfIZpTUxg$rkXgyrW4RDGoDYrxBFD4H2DlSMEhP4h+Api1hXnGnFY"
|
||||
const actual = await isHashMatch(password, _hash)
|
||||
const actual = await util.isHashMatch(password, _hash)
|
||||
expect(actual).toBe(true)
|
||||
})
|
||||
it("should return false if the password is empty", async () => {
|
||||
const password = ""
|
||||
const _hash = "$argon2i$v=19$m=4096,t=3,p=1$EAoczTxVki21JDfIZpTUxg$rkXgyrW4RDGoDYrxBFD4H2DlSMEhP4h+Api1hXnGnFY"
|
||||
const actual = await isHashMatch(password, _hash)
|
||||
const actual = await util.isHashMatch(password, _hash)
|
||||
expect(actual).toBe(false)
|
||||
})
|
||||
it("should return false if the hash is empty", async () => {
|
||||
const password = "hellowpasssword"
|
||||
const _hash = ""
|
||||
const actual = await isHashMatch(password, _hash)
|
||||
const actual = await util.isHashMatch(password, _hash)
|
||||
expect(actual).toBe(false)
|
||||
})
|
||||
})
|
||||
@ -202,7 +192,7 @@ describe("isHashMatch", () => {
|
||||
describe("hashLegacy", () => {
|
||||
it("should return a hash of the string passed in", () => {
|
||||
const plainTextPassword = "mySecretPassword123"
|
||||
const hashed = hashLegacy(plainTextPassword)
|
||||
const hashed = util.hashLegacy(plainTextPassword)
|
||||
expect(hashed).not.toBe(plainTextPassword)
|
||||
})
|
||||
})
|
||||
@ -210,40 +200,40 @@ describe("hashLegacy", () => {
|
||||
describe("isHashLegacyMatch", () => {
|
||||
it("should return true if is match", () => {
|
||||
const password = "password123"
|
||||
const _hash = hashLegacy(password)
|
||||
expect(isHashLegacyMatch(password, _hash)).toBe(true)
|
||||
const _hash = util.hashLegacy(password)
|
||||
expect(util.isHashLegacyMatch(password, _hash)).toBe(true)
|
||||
})
|
||||
it("should return false if is match", () => {
|
||||
const password = "password123"
|
||||
const _hash = hashLegacy(password)
|
||||
expect(isHashLegacyMatch("otherPassword123", _hash)).toBe(false)
|
||||
const _hash = util.hashLegacy(password)
|
||||
expect(util.isHashLegacyMatch("otherPassword123", _hash)).toBe(false)
|
||||
})
|
||||
it("should return true if hashed from command line", () => {
|
||||
const password = "password123"
|
||||
// Hashed using printf "password123" | sha256sum | cut -d' ' -f1
|
||||
const _hash = "ef92b778bafe771e89245b89ecbc08a44a4e166c06659911881f383d4473e94f"
|
||||
expect(isHashLegacyMatch(password, _hash)).toBe(true)
|
||||
expect(util.isHashLegacyMatch(password, _hash)).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
describe("getPasswordMethod", () => {
|
||||
it("should return PLAIN_TEXT for no hashed password", () => {
|
||||
const hashedPassword = undefined
|
||||
const passwordMethod = getPasswordMethod(hashedPassword)
|
||||
const expected: PasswordMethod = "PLAIN_TEXT"
|
||||
const passwordMethod = util.getPasswordMethod(hashedPassword)
|
||||
const expected: util.PasswordMethod = "PLAIN_TEXT"
|
||||
expect(passwordMethod).toEqual(expected)
|
||||
})
|
||||
it("should return ARGON2 for password with 'argon2'", () => {
|
||||
const hashedPassword =
|
||||
"$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9HYY"
|
||||
const passwordMethod = getPasswordMethod(hashedPassword)
|
||||
const expected: PasswordMethod = "ARGON2"
|
||||
const passwordMethod = util.getPasswordMethod(hashedPassword)
|
||||
const expected: util.PasswordMethod = "ARGON2"
|
||||
expect(passwordMethod).toEqual(expected)
|
||||
})
|
||||
it("should return SHA256 for password with legacy hash", () => {
|
||||
const hashedPassword = "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af"
|
||||
const passwordMethod = getPasswordMethod(hashedPassword)
|
||||
const expected: PasswordMethod = "SHA256"
|
||||
const passwordMethod = util.getPasswordMethod(hashedPassword)
|
||||
const expected: util.PasswordMethod = "SHA256"
|
||||
expect(passwordMethod).toEqual(expected)
|
||||
})
|
||||
})
|
||||
@ -251,63 +241,63 @@ describe("getPasswordMethod", () => {
|
||||
describe("handlePasswordValidation", () => {
|
||||
it("should return true with a hashedPassword for a PLAIN_TEXT password", async () => {
|
||||
const p = "password"
|
||||
const passwordValidation = await handlePasswordValidation({
|
||||
const passwordValidation = await util.handlePasswordValidation({
|
||||
passwordMethod: "PLAIN_TEXT",
|
||||
passwordFromRequestBody: p,
|
||||
passwordFromArgs: p,
|
||||
hashedPasswordFromArgs: undefined,
|
||||
})
|
||||
|
||||
const matchesHash = await isHashMatch(p, passwordValidation.hashedPassword)
|
||||
const matchesHash = await util.isHashMatch(p, passwordValidation.hashedPassword)
|
||||
|
||||
expect(passwordValidation.isPasswordValid).toBe(true)
|
||||
expect(matchesHash).toBe(true)
|
||||
})
|
||||
it("should return false when PLAIN_TEXT password doesn't match args", async () => {
|
||||
const p = "password"
|
||||
const passwordValidation = await handlePasswordValidation({
|
||||
const passwordValidation = await util.handlePasswordValidation({
|
||||
passwordMethod: "PLAIN_TEXT",
|
||||
passwordFromRequestBody: "password1",
|
||||
passwordFromArgs: p,
|
||||
hashedPasswordFromArgs: undefined,
|
||||
})
|
||||
|
||||
const matchesHash = await isHashMatch(p, passwordValidation.hashedPassword)
|
||||
const matchesHash = await util.isHashMatch(p, passwordValidation.hashedPassword)
|
||||
|
||||
expect(passwordValidation.isPasswordValid).toBe(false)
|
||||
expect(matchesHash).toBe(false)
|
||||
})
|
||||
it("should return true with a hashedPassword for a SHA256 password", async () => {
|
||||
const p = "helloworld"
|
||||
const passwordValidation = await handlePasswordValidation({
|
||||
const passwordValidation = await util.handlePasswordValidation({
|
||||
passwordMethod: "SHA256",
|
||||
passwordFromRequestBody: p,
|
||||
passwordFromArgs: undefined,
|
||||
hashedPasswordFromArgs: "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af",
|
||||
})
|
||||
|
||||
const matchesHash = isHashLegacyMatch(p, passwordValidation.hashedPassword)
|
||||
const matchesHash = util.isHashLegacyMatch(p, passwordValidation.hashedPassword)
|
||||
|
||||
expect(passwordValidation.isPasswordValid).toBe(true)
|
||||
expect(matchesHash).toBe(true)
|
||||
})
|
||||
it("should return false when SHA256 password doesn't match hash", async () => {
|
||||
const p = "helloworld1"
|
||||
const passwordValidation = await handlePasswordValidation({
|
||||
const passwordValidation = await util.handlePasswordValidation({
|
||||
passwordMethod: "SHA256",
|
||||
passwordFromRequestBody: p,
|
||||
passwordFromArgs: undefined,
|
||||
hashedPasswordFromArgs: "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af",
|
||||
})
|
||||
|
||||
const matchesHash = isHashLegacyMatch(p, passwordValidation.hashedPassword)
|
||||
const matchesHash = util.isHashLegacyMatch(p, passwordValidation.hashedPassword)
|
||||
|
||||
expect(passwordValidation.isPasswordValid).toBe(false)
|
||||
expect(matchesHash).toBe(false)
|
||||
})
|
||||
it("should return true with a hashedPassword for a ARGON2 password", async () => {
|
||||
const p = "password"
|
||||
const passwordValidation = await handlePasswordValidation({
|
||||
const passwordValidation = await util.handlePasswordValidation({
|
||||
passwordMethod: "ARGON2",
|
||||
passwordFromRequestBody: p,
|
||||
passwordFromArgs: undefined,
|
||||
@ -315,14 +305,14 @@ describe("handlePasswordValidation", () => {
|
||||
"$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9HYY",
|
||||
})
|
||||
|
||||
const matchesHash = await isHashMatch(p, passwordValidation.hashedPassword)
|
||||
const matchesHash = await util.isHashMatch(p, passwordValidation.hashedPassword)
|
||||
|
||||
expect(passwordValidation.isPasswordValid).toBe(true)
|
||||
expect(matchesHash).toBe(true)
|
||||
})
|
||||
it("should return false when ARGON2 password doesn't match hash", async () => {
|
||||
const p = "password1"
|
||||
const passwordValidation = await handlePasswordValidation({
|
||||
const passwordValidation = await util.handlePasswordValidation({
|
||||
passwordMethod: "ARGON2",
|
||||
passwordFromRequestBody: p,
|
||||
passwordFromArgs: undefined,
|
||||
@ -330,7 +320,7 @@ describe("handlePasswordValidation", () => {
|
||||
"$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9HYY",
|
||||
})
|
||||
|
||||
const matchesHash = await isHashMatch(p, passwordValidation.hashedPassword)
|
||||
const matchesHash = await util.isHashMatch(p, passwordValidation.hashedPassword)
|
||||
|
||||
expect(passwordValidation.isPasswordValid).toBe(false)
|
||||
expect(matchesHash).toBe(false)
|
||||
@ -339,7 +329,7 @@ describe("handlePasswordValidation", () => {
|
||||
|
||||
describe("isCookieValid", () => {
|
||||
it("should be valid if hashed-password for SHA256 matches cookie.key", async () => {
|
||||
const isValid = await isCookieValid({
|
||||
const isValid = await util.isCookieValid({
|
||||
passwordMethod: "SHA256",
|
||||
cookieKey: "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af",
|
||||
hashedPasswordFromArgs: "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af",
|
||||
@ -348,7 +338,7 @@ describe("isCookieValid", () => {
|
||||
expect(isValid).toBe(true)
|
||||
})
|
||||
it("should be invalid if hashed-password for SHA256 does not match cookie.key", async () => {
|
||||
const isValid = await isCookieValid({
|
||||
const isValid = await util.isCookieValid({
|
||||
passwordMethod: "SHA256",
|
||||
cookieKey: "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb9442bb6f8f8f07af",
|
||||
hashedPasswordFromArgs: "936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af",
|
||||
@ -357,7 +347,7 @@ describe("isCookieValid", () => {
|
||||
expect(isValid).toBe(false)
|
||||
})
|
||||
it("should be valid if hashed-password for ARGON2 matches cookie.key", async () => {
|
||||
const isValid = await isCookieValid({
|
||||
const isValid = await util.isCookieValid({
|
||||
passwordMethod: "ARGON2",
|
||||
cookieKey: "$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9HYY",
|
||||
hashedPasswordFromArgs:
|
||||
@ -367,7 +357,7 @@ describe("isCookieValid", () => {
|
||||
expect(isValid).toBe(true)
|
||||
})
|
||||
it("should be invalid if hashed-password for ARGON2 does not match cookie.key", async () => {
|
||||
const isValid = await isCookieValid({
|
||||
const isValid = await util.isCookieValid({
|
||||
passwordMethod: "ARGON2",
|
||||
cookieKey: "$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9H",
|
||||
hashedPasswordFromArgs:
|
||||
@ -377,7 +367,7 @@ describe("isCookieValid", () => {
|
||||
expect(isValid).toBe(false)
|
||||
})
|
||||
it("should be valid if password for PLAIN_TEXT matches cookie.key", async () => {
|
||||
const isValid = await isCookieValid({
|
||||
const isValid = await util.isCookieValid({
|
||||
passwordMethod: "PLAIN_TEXT",
|
||||
cookieKey: "$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9HYY",
|
||||
passwordFromArgs: "password",
|
||||
@ -386,7 +376,7 @@ describe("isCookieValid", () => {
|
||||
expect(isValid).toBe(true)
|
||||
})
|
||||
it("should be invalid if hashed-password for PLAIN_TEXT does not match cookie.key", async () => {
|
||||
const isValid = await isCookieValid({
|
||||
const isValid = await util.isCookieValid({
|
||||
passwordMethod: "PLAIN_TEXT",
|
||||
cookieKey: "$argon2i$v=19$m=4096,t=3,p=1$0qR/o+0t00hsbJFQCKSfdQ$oFcM4rL6o+B7oxpuA4qlXubypbBPsf+8L531U7P9H",
|
||||
passwordFromArgs: "password1234",
|
||||
@ -398,12 +388,12 @@ describe("isCookieValid", () => {
|
||||
|
||||
describe("sanitizeString", () => {
|
||||
it("should return an empty string if passed a type other than a string", () => {
|
||||
expect(sanitizeString({} as string)).toBe("")
|
||||
expect(util.sanitizeString({} as string)).toBe("")
|
||||
})
|
||||
it("should trim whitespace", () => {
|
||||
expect(sanitizeString(" hello ")).toBe("hello")
|
||||
expect(util.sanitizeString(" hello ")).toBe("hello")
|
||||
})
|
||||
it("should always return an empty string", () => {
|
||||
expect(sanitizeString(" ")).toBe("")
|
||||
expect(util.sanitizeString(" ")).toBe("")
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user