import { expect, test, vi } from "vitest" import { randomAlpha, randomNumeric, randomString } from "#Source/random/index.ts" test("randomString returns expected output across length constraints, alphabet boundaries, and available random sources", () => { const cryptoBackedValue = randomString(12) expect(cryptoBackedValue).toHaveLength(12) const constrainedValue = randomString(10, "ab") expect(constrainedValue.split("").every((char) => char === "a" || char === "b")).toBe(true) expect(randomString(0)).toBe("") expect(() => randomString(-1)).toThrow(RangeError) expect(() => randomString(1.5)).toThrow(RangeError) expect(() => randomString(1, "")).toThrow(RangeError) vi.stubGlobal("crypto", undefined) try { const fallbackValue = randomString(10, "ab") expect(fallbackValue).toHaveLength(10) expect(fallbackValue.split("").every((char) => char === "a" || char === "b")).toBe(true) } finally { vi.unstubAllGlobals() } }) test("randomAlpha returns expected output across default and constrained alphabets", () => { const defaultValue = randomAlpha(8) expect(defaultValue).toHaveLength(8) expect(defaultValue.split("").every((char) => /[a-zA-Z]/u.test(char))).toBe(true) const constrainedValue = randomAlpha(6, "abCD") expect(constrainedValue).toHaveLength(6) expect( constrainedValue .split("") .every((char) => char === "a" || char === "b" || char === "C" || char === "D"), ).toBe(true) expect(() => randomAlpha(-1)).toThrow(RangeError) expect(() => randomAlpha(2, "")).toThrow(RangeError) vi.stubGlobal("crypto", undefined) try { const fallbackValue = randomAlpha(6, "ab") expect(fallbackValue).toHaveLength(6) expect(fallbackValue.split("").every((char) => char === "a" || char === "b")).toBe(true) } finally { vi.unstubAllGlobals() } }) test("randomNumeric returns expected output across default and constrained alphabets", () => { const defaultValue = randomNumeric(8) expect(defaultValue).toHaveLength(8) expect(defaultValue.split("").every((char) => /[0-9]/u.test(char))).toBe(true) const constrainedValue = randomNumeric(6, "37") expect(constrainedValue).toHaveLength(6) expect(constrainedValue.split("").every((char) => char === "3" || char === "7")).toBe(true) expect(() => randomNumeric(1.5)).toThrow(RangeError) expect(() => randomNumeric(2, "")).toThrow(RangeError) vi.stubGlobal("crypto", undefined) try { const fallbackValue = randomNumeric(6, "37") expect(fallbackValue).toHaveLength(6) expect(fallbackValue.split("").every((char) => char === "3" || char === "7")).toBe(true) } finally { vi.unstubAllGlobals() } })