import { describe, expect, it } from "vitest"; import { parsePackModuleArguments } from "../src/cli.js"; const revision = "86ae907f59458508e3277666cdd214f5bd7c1078"; describe("ekklesia-pack-module arguments", () => { it("takes the module, the target, the output directory, and the source revision", () => { expect( parsePackModuleArguments([ "--module", "templates/module", "--target", "any", "--out", "dist/packages", "--source-revision", revision, ]), ).toEqual({ moduleDirectory: "templates/module", outDirectory: "dist/packages", sourceRevision: revision, target: "any", }); }); it("records a repository only when one is given", () => { expect( parsePackModuleArguments([ "--module", ".", "--target", "any", "--out", "out", "--source-revision", revision, "--repository", "https://example.org/acme/example.git", ]).repository, ).toBe("https://example.org/acme/example.git"); }); it.each([ ["no arguments", []], ["a missing target", ["--module", ".", "--out", "o", "--source-revision", revision]], ["a missing revision", ["--module", ".", "--target", "any", "--out", "o"]], [ "an unknown option", ["--module", ".", "--target", "any", "--out", "o", "--source-revision", revision, "--legacy"], ], [ "a repeated option", [ "--module", ".", "--module", "..", "--target", "any", "--out", "o", "--source-revision", revision, ], ], [ "a stray positional argument", ["module", "--target", "any", "--out", "o", "--source-revision", revision], ], ])("refuses %s", (_label, argv) => { expect(() => parsePackModuleArguments(argv)).toThrow(); }); });