mirror of
https://github.com/SonarSource/sonarqube-scan-action.git
synced 2026-01-27 15:13:16 +03:00
194 lines
5.1 KiB
JavaScript
194 lines
5.1 KiB
JavaScript
import mockfs from "mock-fs";
|
|
import assert from "node:assert/strict";
|
|
import { describe, it, mock } from "node:test";
|
|
import {
|
|
checkGradleProject,
|
|
checkMavenProject,
|
|
checkSonarToken,
|
|
validateScannerVersion,
|
|
} from "../sanity-checks.js";
|
|
import { mockCore } from "./mocks.js";
|
|
|
|
describe("validateScannerVersion", () => {
|
|
const expected =
|
|
"Invalid scannerVersion format. Expected format: x.y.z.w (e.g., 7.1.0.4889)";
|
|
|
|
const validVersions = [undefined, "", "7.1.0.4889", "1.2.3.4"];
|
|
|
|
const invalidVersions = [
|
|
"wrong",
|
|
"4.2.",
|
|
"7.1.0",
|
|
"7.1.0.abc",
|
|
"7.1.0.4889.5",
|
|
"7.1",
|
|
"7",
|
|
"7.1.0.",
|
|
".7.1.0.4889",
|
|
"7..1.0.4889",
|
|
"7.1..0.4889",
|
|
"7.1.0..4889",
|
|
"a.b.c.d",
|
|
"7.1.0.4889-SNAPSHOT",
|
|
"v7.1.0.4889",
|
|
"7.1.0.4889.0.0",
|
|
"-7.1.0.4889",
|
|
"7.-1.0.4889",
|
|
"7.1.-0.4889",
|
|
"7.1.0.-4889",
|
|
"7.1.0.4889 ",
|
|
" 7.1.0.4889",
|
|
"7.1.0.4889\n",
|
|
"7,1,0,4889",
|
|
];
|
|
|
|
validVersions.forEach((version) => {
|
|
it(`accepts ${version}`, () => {
|
|
assert.equal(validateScannerVersion(version), undefined);
|
|
});
|
|
});
|
|
|
|
invalidVersions.forEach((version) =>
|
|
it(`throws for ${version}`, () => {
|
|
assert.throws(
|
|
() => validateScannerVersion(version),
|
|
{
|
|
message: expected,
|
|
},
|
|
`should have thrown for ${version}`
|
|
);
|
|
})
|
|
);
|
|
});
|
|
|
|
describe("checkSonarToken", () => {
|
|
it("calls core.warning when SONAR_TOKEN is not set", () => {
|
|
const originalToken = process.env.SONAR_TOKEN;
|
|
delete process.env.SONAR_TOKEN;
|
|
|
|
const warning = mock.fn();
|
|
|
|
checkSonarToken(mockCore({ warning }));
|
|
|
|
assert.equal(warning.mock.calls.length, 1);
|
|
assert.equal(
|
|
warning.mock.calls[0].arguments[0],
|
|
"Running this GitHub Action without SONAR_TOKEN is not recommended"
|
|
);
|
|
|
|
if (originalToken) {
|
|
process.env.SONAR_TOKEN = originalToken;
|
|
}
|
|
});
|
|
|
|
it("does not call core.warning when SONAR_TOKEN is set", () => {
|
|
const originalToken = process.env.SONAR_TOKEN;
|
|
process.env.SONAR_TOKEN = "test-token";
|
|
|
|
const warning = mock.fn();
|
|
|
|
checkSonarToken(mockCore({ warning }));
|
|
|
|
assert.equal(warning.mock.calls.length, 0);
|
|
|
|
if (originalToken) {
|
|
process.env.SONAR_TOKEN = originalToken;
|
|
} else {
|
|
delete process.env.SONAR_TOKEN;
|
|
}
|
|
});
|
|
});
|
|
|
|
describe("checkMavenProject", () => {
|
|
it("calls core.warning when pom.xml exists", async () => {
|
|
mockfs({ "/test/project/": { "pom.xml": "" } });
|
|
const warning = mock.fn();
|
|
|
|
checkMavenProject({ warning }, "/test/project");
|
|
|
|
assert.equal(warning.mock.calls.length, 1);
|
|
assert.equal(
|
|
warning.mock.calls[0].arguments[0],
|
|
"Maven project detected. Sonar recommends running the 'org.sonarsource.scanner.maven:sonar-maven-plugin:sonar' goal during the build process instead of using this GitHub Action to get more accurate results."
|
|
);
|
|
|
|
mockfs.restore();
|
|
});
|
|
|
|
it("does not call core.warning when pom.xml does not exist", async () => {
|
|
mockfs({ "/test/project/": {} });
|
|
const warning = mock.fn();
|
|
|
|
checkMavenProject(mockCore({ warning }), "/test/project");
|
|
|
|
assert.equal(warning.mock.calls.length, 0);
|
|
|
|
mockfs.restore();
|
|
});
|
|
|
|
it("handles project base dir with trailing slash", async () => {
|
|
mockfs({ "/test/project/": { "pom.xml": "" } });
|
|
const warning = mock.fn();
|
|
|
|
checkMavenProject(mockCore({ warning }), "/test/project/");
|
|
assert.equal(warning.mock.calls.length, 1);
|
|
|
|
mockfs.restore();
|
|
});
|
|
});
|
|
|
|
describe("checkGradleProject", () => {
|
|
it("calls core.warning when build.gradle exists", async () => {
|
|
mockfs({ "/test/project/": { "build.gradle": "" } });
|
|
|
|
const warning = mock.fn();
|
|
|
|
checkGradleProject(mockCore({ warning }), "/test/project");
|
|
|
|
assert.equal(warning.mock.calls.length, 1);
|
|
assert.equal(
|
|
warning.mock.calls[0].arguments[0],
|
|
"Gradle project detected. Sonar recommends using the SonarQube plugin for Gradle during the build process instead of using this GitHub Action to get more accurate results."
|
|
);
|
|
|
|
mockfs.restore();
|
|
});
|
|
|
|
it("calls core.warning when build.gradle.kts exists", async () => {
|
|
mockfs({ "/test/project/": { "build.gradle.kts": "" } });
|
|
|
|
const warning = mock.fn();
|
|
|
|
checkGradleProject(mockCore({ warning }), "/test/project");
|
|
|
|
assert.equal(warning.mock.calls.length, 1);
|
|
assert.equal(
|
|
warning.mock.calls[0].arguments[0],
|
|
"Gradle project detected. Sonar recommends using the SonarQube plugin for Gradle during the build process instead of using this GitHub Action to get more accurate results."
|
|
);
|
|
|
|
mockfs.restore();
|
|
});
|
|
|
|
it("does not call core.warning when neither gradle file exists", async () => {
|
|
mockfs({ "/test/project/": {} });
|
|
|
|
const warning = mock.fn();
|
|
|
|
checkGradleProject(mockCore({ warning }), "/test/project");
|
|
|
|
assert.equal(warning.mock.calls.length, 0);
|
|
|
|
mockfs.restore();
|
|
});
|
|
|
|
it("handles project base dir with trailing slash", async () => {
|
|
mockfs({ "/test/project/": { "build.gradle": "" } });
|
|
const warning = mock.fn();
|
|
|
|
checkGradleProject(mockCore({ warning }), "/test/project/");
|
|
|
|
assert.equal(warning.mock.calls.length, 1);
|
|
});
|
|
});
|