import { Enum } from "@/utils/enum/enum";
import { enumEntries } from "@/utils/enum/enum-entry";

describe("enumEntries", () => {
    test("returns the correct entries for number-based built-in enums", () => {
        enum NumberEnum {
            A = 1,
            B = 2,
            C = 3,
        }

        const entries = enumEntries(NumberEnum);

        expect(entries).toEqual([["A", 1], ["B", 2], ["C", 3]]);
    });

    test("returns the correct entries for string-based built-in enums", () => {
        enum StringEnum {
            A = "a",
            B = "b",
            C = "c",
        }

        const entries = enumEntries(StringEnum);
        expect(entries).toEqual([["A", "a"], ["B", "b"], ["C", "c"]]);
    });

    test("returns the correct entries for custom enums created with Enum.create", () => {
        const CustomEnum = Enum.create({
            A: 1n,
            B: 2n,
            C: 3n,
        });

        const entries = enumEntries(CustomEnum);
        expect(entries).toEqual([["A", 1n], ["B", 2n], ["C", 3n]]);
    });
});