Files
homarr/packages/auth/test/security.spec.ts
T
Thomas Camlong 27325326da fix(auth): resolve credentials login SQLITE_CONSTRAINT_NOTNULL and relax password rules
Session creation failed with NOT NULL constraint on expires column due to
invalid date propagation from duration parsing. Override adapter.createSession
with validated insert, harden signIn callback, fix createDurationSchema for
numeric-only values, and guard events.ts group insert.

Also relaxes password complexity to suggestions-only (min 8 chars enforced),
extracts shared UserCreatePasswordFields component, and fixes login form
passing extra fields to signIn.
2026-05-21 16:30:07 +02:00

65 lines
2.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { comparePasswordsAsync, hashPasswordAsync } from "../security";
describe("hashPassword should return a hash", () => {
it("should return a hash", async () => {
const password = "password";
const result = await hashPasswordAsync(password);
expect(result).toBeDefined();
expect(result.length).toBeGreaterThan(55);
expect(result).not.toEqual(password);
});
it("should return a different hash each time", async () => {
const password = "password";
const password2 = "another password";
const result1 = await hashPasswordAsync(password);
const result2 = await hashPasswordAsync(password2);
expect(result1).not.toEqual(result2);
});
it("should return a different hash for the same password with different salts", async () => {
const password = "password";
const result1 = await hashPasswordAsync(password);
const result2 = await hashPasswordAsync(password);
expect(result1).not.toEqual(result2);
});
});
describe("comparePasswordsAsync should compare passwords correctly", () => {
it("should return true for matching passwords", async () => {
// Arrange
const password = "password";
const hash = await hashPasswordAsync(password);
// Act
const result = await comparePasswordsAsync(password, hash);
// Assert
expect(result).toBe(true);
});
it("should return false for non-matching passwords", async () => {
// Arrange
const password = "password";
const wrongPassword = "wrongpassword";
const hash = await hashPasswordAsync(password);
// Act
const result = await comparePasswordsAsync(wrongPassword, hash);
// Assert
expect(result).toBe(false);
});
it("should return true for passwords with special characters like LoveHomarr<3", async () => {
const password = "LoveHomarr<3";
const hash = await hashPasswordAsync(password);
const result = await comparePasswordsAsync(password, hash);
expect(result).toBe(true);
});
});