import { StringDescriptor } from "@/utils/enum/descriptors/string-descriptor";

describe("StringDescriptor", () => {
    const descriptor = new StringDescriptor();

    describe("name", () => {
        test("returns 'string' as name", () => {
            expect(descriptor.name).toBe("string");
        });
    });

    describe("defaultValue", () => {
        test("returns '' as default value", () => {
            expect(descriptor.defaultValue).toBe("");
        });
    });

    describe("hasFlag", () => {
        test("returns true if flag is set", () => {
            expect(descriptor.hasFlag("value1, value2, value3", "value2")).toBe(true);
        });

        test("returns false if flag is not set", () => {
            expect(descriptor.hasFlag("value1, value2, value3", "value4")).toBe(false);
        });
    });

    describe("addFlag", () => {
        test("adds flag to value", () => {
            expect(descriptor.addFlag("value1, value2", "value3")).toBe("value1, value2, value3");
        });

        test("does not add flag if it is already set", () => {
            expect(descriptor.addFlag("value1, value2, value3", "value3")).toBe("value1, value2, value3");
        });
    });

    describe("removeFlag", () => {
        test("removes flag from value", () => {
            expect(descriptor.removeFlag("value1, value2, value3", "value2")).toBe("value1, value3");
        });

        test("does not remove flag if it does not exist", () => {
            expect(descriptor.removeFlag("value1, value2", "value3")).toBe("value1, value2");
        });
    });
});