mc-publish/tests/unit/loaders/forge/forge-dependency.spec.ts

64 lines
2.5 KiB
TypeScript
Raw Normal View History

import { DependencyType } from "@/dependencies/dependency-type";
import { RawForgeMetadata } from "@/loaders/forge/raw-forge-metadata";
import { getForgeDependencies, normalizeForgeDependency } from "@/loaders/forge/forge-dependency";
describe("getForgeDependencies", () => {
test("returns an array of dependencies specified in the given metadata", () => {
const metadata = {
dependencies: {
"example-mod": [
{
modId: "depends-id",
versionRange: "[1.0.0,)",
mandatory: true,
},
{
modId: "suggests-id",
versionRange: "[2.0.0,)",
mandatory: false,
},
],
"example-mod-2": [{
modId: "breaks-id",
versionRange: "[4.0.0,5.0.0]",
mandatory: false,
incompatible: true,
}],
},
} as unknown as RawForgeMetadata;
const dependencies = getForgeDependencies(metadata);
expect(dependencies).toEqual([
{ modId: "breaks-id", versionRange: "[4.0.0,5.0.0]", mandatory: false, incompatible: true },
{ modId: "suggests-id", versionRange: "[2.0.0,)", mandatory: false },
{ modId: "depends-id", versionRange: "[1.0.0,)", mandatory: true },
]);
});
test("returns an empty array if no dependencies were specified", () => {
expect(getForgeDependencies({} as RawForgeMetadata)).toEqual([]);
});
test("returns an empty array if metadata was null or undefined", () => {
expect(getForgeDependencies(null)).toEqual([]);
expect(getForgeDependencies(undefined)).toEqual([]);
});
});
describe("normalizeForgeDependency", () => {
test("converts Forge dependency to a more abstract Dependency object", () => {
const forgeDependency = { modId: "suggests-id", mandatory: false, versionRange: "[2.0.0,)" };
const dependency = normalizeForgeDependency(forgeDependency);
expect(dependency).toMatchObject({ id: "suggests-id", versions: ["[2.0.0,)"], type: DependencyType.OPTIONAL });
});
test("returns undefined if dependency was null or undefined", () => {
expect(normalizeForgeDependency(null)).toBeUndefined();
expect(normalizeForgeDependency(undefined)).toBeUndefined();
});
});