mirror of
https://github.com/github/codeql-action.git
synced 2026-01-06 22:50:17 +08:00
78 lines
2.5 KiB
TypeScript
78 lines
2.5 KiB
TypeScript
import * as fs from "fs";
|
|
import * as path from "path";
|
|
|
|
import test from "ava";
|
|
import * as sinon from "sinon";
|
|
|
|
import * as actionsUtil from "./actions-util";
|
|
import * as gitUtils from "./git-utils";
|
|
import { getRunnerLogger } from "./logging";
|
|
import {
|
|
writeBaseDatabaseOidsFile,
|
|
writeOverlayChangesFile,
|
|
} from "./overlay-database-utils";
|
|
import { createTestConfig, setupTests } from "./testing-utils";
|
|
import { withTmpDir } from "./util";
|
|
|
|
setupTests(test);
|
|
|
|
test("writeOverlayChangesFile generates correct changes file", async (t) => {
|
|
await withTmpDir(async (tmpDir) => {
|
|
const dbLocation = path.join(tmpDir, "db");
|
|
await fs.promises.mkdir(dbLocation, { recursive: true });
|
|
const sourceRoot = path.join(tmpDir, "src");
|
|
await fs.promises.mkdir(sourceRoot, { recursive: true });
|
|
const tempDir = path.join(tmpDir, "temp");
|
|
await fs.promises.mkdir(tempDir, { recursive: true });
|
|
|
|
const logger = getRunnerLogger(true);
|
|
const config = createTestConfig({ dbLocation });
|
|
|
|
// Mock the getFileOidsUnderPath function to return base OIDs
|
|
const baseOids = {
|
|
"unchanged.js": "aaa111",
|
|
"modified.js": "bbb222",
|
|
"deleted.js": "ccc333",
|
|
};
|
|
const getFileOidsStubForBase = sinon
|
|
.stub(gitUtils, "getFileOidsUnderPath")
|
|
.resolves(baseOids);
|
|
|
|
// Write the base database OIDs file
|
|
await writeBaseDatabaseOidsFile(config, sourceRoot);
|
|
getFileOidsStubForBase.restore();
|
|
|
|
// Mock the getFileOidsUnderPath function to return overlay OIDs
|
|
const currentOids = {
|
|
"unchanged.js": "aaa111",
|
|
"modified.js": "ddd444", // Changed OID
|
|
"added.js": "eee555", // New file
|
|
};
|
|
const getFileOidsStubForOverlay = sinon
|
|
.stub(gitUtils, "getFileOidsUnderPath")
|
|
.resolves(currentOids);
|
|
|
|
// Write the overlay changes file, which uses the mocked overlay OIDs
|
|
// and the base database OIDs file
|
|
const getTempDirStub = sinon
|
|
.stub(actionsUtil, "getTemporaryDirectory")
|
|
.returns(tempDir);
|
|
const changesFilePath = await writeOverlayChangesFile(
|
|
config,
|
|
sourceRoot,
|
|
logger,
|
|
);
|
|
getFileOidsStubForOverlay.restore();
|
|
getTempDirStub.restore();
|
|
|
|
const fileContent = await fs.promises.readFile(changesFilePath, "utf-8");
|
|
const parsedContent = JSON.parse(fileContent) as { changes: string[] };
|
|
|
|
t.deepEqual(
|
|
parsedContent.changes.sort(),
|
|
["added.js", "deleted.js", "modified.js"],
|
|
"Should identify added, deleted, and modified files",
|
|
);
|
|
});
|
|
});
|