const sha256 = require("../../src/utils/sha256.js"); const crypto = require("crypto"); // Mock the crypto module to simulate the absence of crypto support jest.mock("crypto", () => ({ createHash: jest.fn(() => ({ update: jest.fn(), digest: jest.fn(() => "mockedHash"), })), })); describe("SHA256 hash", () => { test("should use crypto module if available", () => { const result = sha256("test"); expect(result).toBe("mockedHash"); expect(crypto.createHash).toHaveBeenCalledWith("SHA256"); }); test("should fallback to manual SHA256 implementation if crypto is disabled", () => { crypto.__disabled__ = null; const result = sha256("test"); expect(result).toBe( "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", ); }); test("should handle empty string", () => { crypto.__disabled__ = null; const result = sha256(""); expect(result).toBe( "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", ); }); test("should handle special characters", () => { crypto.__disabled__ = null; const result = sha256("!@#$%^&*()"); expect(result).toBe( "95ce789c5c9d18490972709838ca3a9719094bca3ac16332cfec0652b0236141", ); }); test("should handle long strings", () => { crypto.__disabled__ = null; const longString = "a".repeat(1000); const result = sha256(longString); expect(result).toBe( "41edece42d63e8d9bf515a9ba6932e1c20cbc9f5a5d134645adb5db1b9737ea3", ); }); test("should handle non-ASCII characters", () => { crypto.__disabled__ = null; const result = sha256("éñ"); expect(result).toBe( "c53435f74d8215688e74112f1c6527ad31fd3b72939769a75d09a14cd8a80cfe", ); }); });