import { getInitials, stringToGradient } from "@/utils/avatarUtils"; jest.mock("@linagora/twake-mui", () => ({ nameToColor: jest.fn((name: string) => { if (!name) return undefined; const colors = [ "sunrise", "downy", "sugarCoral", "pinkBonnet", "blueMana", "nightBlue", "snowPea", "pluviophile", "cornflower", "paleGreen", "moonBlue", ]; const hash = Array.from(name.toUpperCase()) .map((letter) => letter.charCodeAt(0)) .reduce((sum, number) => sum + number, 0); return colors[hash % colors.length]; }), })); describe("avatarUtils", () => { describe("getInitials", () => { it("returns 2-letter initials for full name", () => { expect(getInitials("John Doe")).toBe("JD"); expect(getInitials("Alice Smith")).toBe("AS"); expect(getInitials("Nguyễn Văn")).toBe("NV"); }); it("returns single letter for single word", () => { expect(getInitials("Alice")).toBe("A"); expect(getInitials("John")).toBe("J"); }); it("returns uppercase initials", () => { expect(getInitials("john doe")).toBe("JD"); expect(getInitials("ALICE SMITH")).toBe("AS"); expect(getInitials("a")).toBe("A"); }); it("handles multiple spaces between words", () => { expect(getInitials("John Doe")).toBe("JD"); expect(getInitials("Alice Smith Brown")).toBe("AS"); }); it("handles email addresses", () => { expect(getInitials("john.doe@email.com")).toBe("J"); expect(getInitials("test@example.com")).toBe("T"); }); it("handles empty string", () => { expect(getInitials("")).toBe(""); }); it("handles whitespace-only string", () => { expect(getInitials(" ")).toBe(""); }); it("handles single character", () => { expect(getInitials("A")).toBe("A"); expect(getInitials("a")).toBe("A"); }); it("handles names with special characters", () => { expect(getInitials("Jean-Pierre")).toBe("J"); expect(getInitials("Mary Jane Watson")).toBe("MJ"); }); it("handles unicode characters", () => { expect(getInitials("Nguyễn Văn")).toBe("NV"); expect(getInitials("José María")).toBe("JM"); }); it("takes first two words for names with more than two words", () => { expect(getInitials("John Michael Smith")).toBe("JM"); expect(getInitials("Alice Bob Charlie")).toBe("AB"); }); }); describe("stringToGradient", () => { it("returns color for valid string", () => { const result = stringToGradient("John Doe"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); }); it("returns same color for same input", () => { const result1 = stringToGradient("John Doe"); const result2 = stringToGradient("John Doe"); expect(result1).toBe(result2); }); it("returns undefined for empty string", () => { expect(stringToGradient("")).toBeUndefined(); }); it("returns color for single character", () => { const result = stringToGradient("A"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); }); it("returns color for email address", () => { const result = stringToGradient("test@example.com"); expect(result).toBeDefined(); expect(typeof result).toBe("string"); }); }); });