Files
codeql-action/src/config/inputs.test.ts
2026-07-29 12:55:54 +01:00

90 lines
3.0 KiB
TypeScript

import test from "ava";
import sinon from "sinon";
import { ActionsEnv } from "../actions-util";
import { Feature } from "../feature-flags";
import { RepositoryPropertyName } from "../feature-flags/properties";
import { callee } from "../testing-utils";
import { ComputedInput, getToolsInput, InputName, InputSource } from "./inputs";
test("getToolsInput - undefined if there's no input", async (t) => {
await callee(getToolsInput).withArgs({}).passes(t.is, undefined);
});
const expectedWorkflowResult: ComputedInput = {
source: InputSource.Workflow,
value: "workflow-input-value",
};
const expectedRepositoryPropertyResult: ComputedInput = {
source: InputSource.RepositoryProperty,
value: "repo-property-input-value",
};
function stubGetToolsInput(actions: ActionsEnv) {
sinon
.stub(actions, "getOptionalInput")
.withArgs(InputName.Tools)
.returns(expectedWorkflowResult.value);
}
const workflowLogMessage = `Using ${InputName.Tools} input from workflow:`;
test("getToolsInput - returns workflow input if available", async (t) => {
await callee(getToolsInput)
.withActions(stubGetToolsInput)
.withArgs({})
.logs(t, workflowLogMessage)
.passes(t.deepEqual, expectedWorkflowResult);
});
test("getToolsInput - returns repository property value if enforced", async (t) => {
const target = callee(getToolsInput)
.withActions(stubGetToolsInput)
.withArgs({
[RepositoryPropertyName.TOOLS]: `!${expectedRepositoryPropertyResult.value}`,
});
// We expect the repository value if provided and the FF is enabled.
const enforcedLogMessage = `Using ${InputName.Tools} input from repository property (enforced):`;
await target
.withFeatures([Feature.ToolsRepositoryProperty])
.logs(t, enforcedLogMessage)
.passes(t.deepEqual, expectedRepositoryPropertyResult);
await target
.notLogs(t, enforcedLogMessage)
.logs(t, workflowLogMessage)
.passes(t.deepEqual, expectedWorkflowResult);
});
test("getToolsInput - prefers workflow input", async (t) => {
const target = callee(getToolsInput)
.withActions(stubGetToolsInput)
.withArgs({
[RepositoryPropertyName.TOOLS]: expectedRepositoryPropertyResult.value,
});
// We expect the workflow input regardless of the FF state.
await target
.withFeatures([Feature.ToolsRepositoryProperty])
.logs(t, workflowLogMessage)
.passes(t.deepEqual, expectedWorkflowResult);
await target
.logs(t, workflowLogMessage)
.passes(t.deepEqual, expectedWorkflowResult);
});
test("getToolsInput - returns repository property", async (t) => {
const target = callee(getToolsInput).withArgs({
[RepositoryPropertyName.TOOLS]: expectedRepositoryPropertyResult.value,
});
// We expect the repository property if the FF is enabled or undefined otherwise.
await target
.withFeatures([Feature.ToolsRepositoryProperty])
.logs(t, `Using ${InputName.Tools} input from repository property:`)
.passes(t.deepEqual, expectedRepositoryPropertyResult);
await target.passes(t.is, undefined);
});