import { describe, test, expect } from "@jest/globals";
import DependencyKind from "../src/metadata/dependency-kind";

describe("DependencyKind.getValues", () => {
    test("all DependencyKind values are returned", () => {
        const kinds = DependencyKind.getValues();
        expect(kinds).toHaveLength(6);
        expect(kinds).toContain(DependencyKind.Depends);
        expect(kinds).toContain(DependencyKind.Recommends);
        expect(kinds).toContain(DependencyKind.Includes);
        expect(kinds).toContain(DependencyKind.Suggests);
        expect(kinds).toContain(DependencyKind.Conflicts);
        expect(kinds).toContain(DependencyKind.Breaks);
    });
});

describe("DependencyKind.parse", () => {
    test("every DependencyKind can be parsed", () => {
        for (const kind of DependencyKind.getValues()) {
            expect(DependencyKind.parse(DependencyKind.toString(kind))).toStrictEqual(kind);
        }
    });

    test("DependencyKind's name is case-insensitive", () => {
        for (const kind of DependencyKind.getValues()) {
            expect(DependencyKind.parse(DependencyKind.toString(kind).toLowerCase())).toStrictEqual(kind);
            expect(DependencyKind.parse(DependencyKind.toString(kind).toUpperCase())).toStrictEqual(kind);
        }
    });

    test("undefined is returned when the value cannot be parsed", () => {
        expect(DependencyKind.parse("There's no such dependency kind")).toBeUndefined();
    });
});