import { SoftError, isSoftError } from "@/utils/errors/soft-error";

describe("SoftError", () => {
    describe("constructor", () => {
        test("initializes with isSoft set to false", () => {
            const error = new SoftError(false, "An error occurred.");

            expect(error).toBeInstanceOf(SoftError);
            expect(error.name).toBe("SoftError");
            expect(error.message).toBe("An error occurred.");
            expect(error.isSoft).toBe(false);
        });

        test("initializes with isSoft set to true", () => {
            const error = new SoftError(true, "An error occurred.");

            expect(error).toBeInstanceOf(SoftError);
            expect(error.name).toBe("SoftError");
            expect(error.message).toBe("An error occurred.");
            expect(error.isSoft).toBe(true);
        });
    });
});

describe("isSoftError", () => {
    test("returns true for SoftError with isSoft set to true", () => {
        const error = new SoftError(true, "An error occurred.");

        expect(isSoftError(error)).toBe(true);
    });

    test("returns false for SoftError with isSoft set to false", () => {
        const error = new SoftError(false, "An error occurred.");

        expect(isSoftError(error)).toBe(false);
    });

    test("returns false for non-SoftError errors", () => {
        const error = new Error("An error occurred.");

        expect(isSoftError(error)).toBe(false);
    });

    test("returns false for non-error values", () => {
        expect(isSoftError("string")).toBe(false);
        expect(isSoftError(123)).toBe(false);
        expect(isSoftError({ key: "value" })).toBe(false);
    });
});