mirror of
https://github.com/github/codeql-action.git
synced 2025-12-27 01:30:10 +08:00
117 lines
3.4 KiB
TypeScript
117 lines
3.4 KiB
TypeScript
import * as github from "@actions/github";
|
|
import * as githubUtils from "@actions/github/lib/utils";
|
|
import test from "ava";
|
|
import * as sinon from "sinon";
|
|
|
|
import * as actionsUtil from "./actions-util";
|
|
import * as api from "./api-client";
|
|
import { setupTests } from "./testing-utils";
|
|
import * as util from "./util";
|
|
|
|
setupTests(test);
|
|
|
|
test.beforeEach(() => {
|
|
util.initializeEnvironment(actionsUtil.getActionVersion());
|
|
});
|
|
|
|
test("getApiClient", async (t) => {
|
|
const pluginStub: sinon.SinonStub = sinon.stub(githubUtils.GitHub, "plugin");
|
|
const githubStub: sinon.SinonStub = sinon.stub();
|
|
pluginStub.returns(githubStub);
|
|
|
|
sinon.stub(actionsUtil, "getRequiredInput").withArgs("token").returns("xyz");
|
|
const requiredEnvParamStub = sinon.stub(util, "getRequiredEnvParam");
|
|
requiredEnvParamStub
|
|
.withArgs("GITHUB_SERVER_URL")
|
|
.returns("http://github.localhost");
|
|
requiredEnvParamStub
|
|
.withArgs("GITHUB_API_URL")
|
|
.returns("http://api.github.localhost");
|
|
|
|
api.getApiClient();
|
|
|
|
t.assert(
|
|
githubStub.calledOnceWithExactly({
|
|
auth: "token xyz",
|
|
baseUrl: "http://api.github.localhost",
|
|
log: sinon.match.any,
|
|
userAgent: `CodeQL-Action/${actionsUtil.getActionVersion()}`,
|
|
}),
|
|
);
|
|
});
|
|
|
|
function mockGetMetaVersionHeader(
|
|
versionHeader: string | undefined,
|
|
): sinon.SinonStub<any, any> {
|
|
// Passing an auth token is required, so we just use a dummy value
|
|
const client = github.getOctokit("123");
|
|
const response = {
|
|
headers: {
|
|
"x-github-enterprise-version": versionHeader,
|
|
},
|
|
};
|
|
const spyGetContents = sinon
|
|
.stub(client.rest.meta, "get")
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
.resolves(response as any);
|
|
sinon.stub(api, "getApiClient").value(() => client);
|
|
return spyGetContents;
|
|
}
|
|
|
|
test("getGitHubVersion for Dotcom", async (t) => {
|
|
const apiDetails = {
|
|
auth: "",
|
|
url: "https://github.com",
|
|
apiURL: "",
|
|
};
|
|
sinon.stub(api, "getApiDetails").returns(apiDetails);
|
|
const v = await api.getGitHubVersionFromApi(
|
|
github.getOctokit("123"),
|
|
apiDetails,
|
|
);
|
|
t.deepEqual(util.GitHubVariant.DOTCOM, v.type);
|
|
});
|
|
|
|
test("getGitHubVersion for GHES", async (t) => {
|
|
mockGetMetaVersionHeader("2.0");
|
|
const v2 = await api.getGitHubVersionFromApi(api.getApiClient(), {
|
|
auth: "",
|
|
url: "https://ghe.example.com",
|
|
apiURL: undefined,
|
|
});
|
|
t.deepEqual(
|
|
{ type: util.GitHubVariant.GHES, version: "2.0" } as util.GitHubVersion,
|
|
v2,
|
|
);
|
|
});
|
|
|
|
test("getGitHubVersion for GHAE", async (t) => {
|
|
mockGetMetaVersionHeader("GitHub AE");
|
|
const ghae = await api.getGitHubVersionFromApi(api.getApiClient(), {
|
|
auth: "",
|
|
url: "https://example.githubenterprise.com",
|
|
apiURL: undefined,
|
|
});
|
|
t.deepEqual({ type: util.GitHubVariant.GHAE }, ghae);
|
|
});
|
|
|
|
test("getGitHubVersion for different domain", async (t) => {
|
|
mockGetMetaVersionHeader(undefined);
|
|
const v3 = await api.getGitHubVersionFromApi(api.getApiClient(), {
|
|
auth: "",
|
|
url: "https://ghe.example.com",
|
|
apiURL: undefined,
|
|
});
|
|
t.deepEqual({ type: util.GitHubVariant.DOTCOM }, v3);
|
|
});
|
|
|
|
test("getGitHubVersion for GHE_DOTCOM", async (t) => {
|
|
mockGetMetaVersionHeader("ghe.com");
|
|
const gheDotcom = await api.getGitHubVersionFromApi(api.getApiClient(), {
|
|
auth: "",
|
|
url: "https://foo.ghe.com",
|
|
apiURL: undefined,
|
|
});
|
|
t.deepEqual({ type: util.GitHubVariant.GHE_DOTCOM }, gheDotcom);
|
|
});
|