55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { expect, it } from "vitest";
|
|
import { normalizeWorkflowRun } from "../../../scripts/ci/workflow-run.mjs";
|
|
|
|
it.each([
|
|
[".github/workflows/ci.yml", ".github/workflows/ci.yml", null],
|
|
[".github/workflows/ci.yml@main", ".github/workflows/ci.yml", "main"],
|
|
[
|
|
".github/workflows/ci.yml@refs/heads/release/v1",
|
|
".github/workflows/ci.yml",
|
|
"refs/heads/release/v1",
|
|
],
|
|
[
|
|
".github/workflows/ci.yml@feature@v1",
|
|
".github/workflows/ci.yml",
|
|
"feature@v1",
|
|
],
|
|
[
|
|
".github/workflows/release.yaml@main",
|
|
".github/workflows/release.yaml",
|
|
"main",
|
|
],
|
|
])(
|
|
"preserves API path %s while separating its file identity and ref",
|
|
(path, file, ref) => {
|
|
const raw = { id: 10, path, head_sha: "a".repeat(40) };
|
|
const parsed = normalizeWorkflowRun(raw);
|
|
expect(parsed).toEqual({ ...raw, workflowPath: { file, ref } });
|
|
expect(raw).not.toHaveProperty("workflowPath");
|
|
},
|
|
);
|
|
|
|
it.each([
|
|
undefined,
|
|
null,
|
|
42,
|
|
"",
|
|
".github/workflows/ci.yml@",
|
|
".github/workflows/ci.yml@main\n",
|
|
".github/workflows/ci.yml@main\0",
|
|
"../.github/workflows/ci.yml",
|
|
".github/workflows/../ci.yml@main",
|
|
".github/workflows/ci.yml-extra@main",
|
|
"https://example.test/ci.yml@main",
|
|
])(
|
|
"keeps malformed workflow path %s unknown instead of inventing a file identity",
|
|
(path) => {
|
|
const parsed = normalizeWorkflowRun({
|
|
path,
|
|
workflowPath: { file: ".github/workflows/ci.yml", ref: "main" },
|
|
});
|
|
expect(parsed.path).toBe(path);
|
|
expect(parsed.workflowPath).toBeNull();
|
|
},
|
|
);
|