Files
codeql-action/src/debug-artifacts.test.ts
2026-10-07 14:41:03 +01:00

99 lines
3.0 KiB
TypeScript

import test from "ava";
import * as debugArtifacts from "./debug-artifacts";
import { getActionsLogger } from "./logging";
import { GitHubVariant } from "./util";
test("sanitizeArtifactName", (t) => {
t.deepEqual(
debugArtifacts.sanitizeArtifactName("hello-world_"),
"hello-world_",
);
t.deepEqual(
debugArtifacts.sanitizeArtifactName("hello`world`"),
"helloworld",
);
t.deepEqual(debugArtifacts.sanitizeArtifactName("hello===123"), "hello123");
t.deepEqual(
debugArtifacts.sanitizeArtifactName("*m)a&n^y%i££n+v!a:l[i]d"),
"manyinvalid",
);
t.deepEqual(
debugArtifacts.sanitizeArtifactName("\\foo\\bar//baz"),
"foobarbaz",
);
});
test("getArtifactSuffix", (t) => {
// No suffix if there's no `matrix` input, it is invalid, or has no keys.
t.is(debugArtifacts.getArtifactSuffix(undefined), "");
t.is(debugArtifacts.getArtifactSuffix(""), "");
t.is(debugArtifacts.getArtifactSuffix("invalid json"), "");
t.is(debugArtifacts.getArtifactSuffix("{}"), "");
t.is(debugArtifacts.getArtifactSuffix("null"), "");
t.is(debugArtifacts.getArtifactSuffix("123"), "");
t.is(debugArtifacts.getArtifactSuffix('"string"'), "");
// Suffixes for non-empty, valid `matrix` inputs.
const testMatrices = [
{ matrix: { language: "go" }, expected: "-go" },
{
matrix: { language: "javascript", "build-mode": "none" },
expected: "-none-javascript",
},
{
matrix: { "build-mode": "none", language: "javascript" },
expected: "-none-javascript",
},
];
for (const testMatrix of testMatrices) {
const suffix = debugArtifacts.getArtifactSuffix(
JSON.stringify(testMatrix.matrix),
);
t.is(suffix, testMatrix.expected);
}
});
// These next tests check whether `uploadArtifacts` attempts to upload an artifact. Since it's not
// easy to mock the actual call to upload an artifact, we check that we get an "upload-failed"
// result, instead of actually uploading the artifact.
test("uploadArtifacts returns 'no-artifacts-to-upload' when there are no files to upload", async (t) => {
// Test that no error is thrown if artifacts list is empty.
const logger = getActionsLogger();
await t.notThrowsAsync(async () => {
const uploaded = await debugArtifacts.uploadArtifacts(
logger,
[],
"i-dont-exist",
"artifactName",
GitHubVariant.DOTCOM,
);
t.is(
uploaded,
"no-artifacts-to-upload",
"Should not have uploaded any artifacts",
);
});
});
test("uploadArtifacts attempts an upload when there are files to upload", async (t) => {
const logger = getActionsLogger();
await t.notThrowsAsync(async () => {
const uploaded = await debugArtifacts.uploadArtifacts(
logger,
["hucairz"],
"i-dont-exist",
"artifactName",
GitHubVariant.DOTCOM,
);
t.is(
uploaded,
// The failure is expected since we don't want to actually upload any artifacts in unit tests.
"upload-failed",
"Expect failure to upload artifacts since root dir does not exist",
);
});
});