diff --git a/__tests__/integration/resolution-strategy-logic.test.ts b/__tests__/integration/resolution-strategy-logic.test.ts new file mode 100644 index 0000000..00abe28 --- /dev/null +++ b/__tests__/integration/resolution-strategy-logic.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from "@jest/globals"; + +describe("resolution strategy integration test", () => { + it("should choose max satisfying version for highest strategy", () => { + // Test the logic that chooses between max/min satisfying + const versions = ["0.1.0", "0.2.0", "0.3.0"]; + + // Simulate the logic from our implementation + const strategyLogic = (strategy: "highest" | "lowest") => { + // This simulates what semver.minSatisfying and semver.maxSatisfying would return + if (strategy === "lowest") { + return versions.find((v) => v >= "0.1.0"); // First match (lowest) + } else { + return versions.filter((v) => v >= "0.1.0").pop(); // Last match (highest) + } + }; + + expect(strategyLogic("highest")).toBe("0.3.0"); + expect(strategyLogic("lowest")).toBe("0.1.0"); + }); + + it("should validate resolution strategy values correctly", () => { + const getResolutionStrategy = (input: string): "highest" | "lowest" => { + if (input === "lowest") { + return "lowest"; + } + if (input === "highest" || input === "") { + return "highest"; + } + throw new Error( + `Invalid resolution-strategy: ${input}. Must be 'highest' or 'lowest'.`, + ); + }; + + expect(getResolutionStrategy("")).toBe("highest"); + expect(getResolutionStrategy("highest")).toBe("highest"); + expect(getResolutionStrategy("lowest")).toBe("lowest"); + + expect(() => getResolutionStrategy("invalid")).toThrow( + "Invalid resolution-strategy: invalid. Must be 'highest' or 'lowest'.", + ); + }); +});