Files
vscode-codeql/extensions/ql-vscode/test/vscode-tests/no-workspace/local-databases-ui.test.ts
Elena Tanasoiu c2f7d38018 Fix spelling
2023-02-20 17:54:20 +00:00

136 lines
3.9 KiB
TypeScript

import { dirSync, fileSync } from "tmp";
import { dirname, join } from "path";
import {
mkdirs,
createFile,
mkdirsSync,
createFileSync,
pathExistsSync,
} from "fs-extra";
import { Uri } from "vscode";
import { DatabaseUI } from "../../../src/local-databases-ui";
import { testDisposeHandler } from "../test-dispose-handler";
import { createMockApp } from "../../__mocks__/appMock";
import { QueryLanguage } from "../../../src/common/query-language";
describe("local-databases-ui", () => {
describe("fixDbUri", () => {
const fixDbUri = (DatabaseUI.prototype as any).fixDbUri;
it("should choose current directory direcory normally", async () => {
const dir = dirSync().name;
const uri = await fixDbUri(Uri.file(dir));
expect(uri.toString()).toBe(Uri.file(dir).toString());
});
it("should choose parent direcory when file is selected", async () => {
const file = fileSync().name;
const uri = await fixDbUri(Uri.file(file));
expect(uri.toString()).toBe(Uri.file(dirname(file)).toString());
});
it("should choose parent direcory when db-* is selected", async () => {
const dir = dirSync().name;
const dbDir = join(dir, "db-javascript");
await mkdirs(dbDir);
const uri = await fixDbUri(Uri.file(dbDir));
expect(uri.toString()).toBe(Uri.file(dir).toString());
});
it("should choose parent's parent direcory when file selected is in db-*", async () => {
const dir = dirSync().name;
const dbDir = join(dir, "db-javascript");
const file = join(dbDir, "nested");
await mkdirs(dbDir);
await createFile(file);
const uri = await fixDbUri(Uri.file(file));
expect(uri.toString()).toBe(Uri.file(dir).toString());
});
it("should handle a parent whose name is db-*", async () => {
// fixes https://github.com/github/vscode-codeql/issues/482
const dir = dirSync().name;
const parentDir = join(dir, "db-hucairz");
const dbDir = join(parentDir, "db-javascript");
const file = join(dbDir, "nested");
mkdirsSync(dbDir);
createFileSync(file);
const uri = await fixDbUri(Uri.file(file));
expect(uri.toString()).toBe(Uri.file(parentDir).toString());
});
});
it("should delete orphaned databases", async () => {
const storageDir = dirSync().name;
const db1 = createDatabase(storageDir, "db1-imported", QueryLanguage.Cpp);
const db2 = createDatabase(
storageDir,
"db2-notimported",
QueryLanguage.Cpp,
);
const db3 = createDatabase(storageDir, "db3-invalidlanguage", "hucairz");
// these two should be deleted
const db4 = createDatabase(
storageDir,
"db2-notimported-with-db-info",
QueryLanguage.Cpp,
".dbinfo",
);
const db5 = createDatabase(
storageDir,
"db2-notimported-with-codeql-database.yml",
QueryLanguage.Cpp,
"codeql-database.yml",
);
const app = createMockApp({});
const databaseUI = new DatabaseUI(
app,
{
databaseItems: [{ databaseUri: Uri.file(db1) }],
onDidChangeDatabaseItem: () => {
/**/
},
onDidChangeCurrentDatabaseItem: () => {
/**/
},
} as any,
{} as any,
storageDir,
storageDir,
);
await databaseUI.handleRemoveOrphanedDatabases();
expect(pathExistsSync(db1)).toBe(true);
expect(pathExistsSync(db2)).toBe(true);
expect(pathExistsSync(db3)).toBe(true);
expect(pathExistsSync(db4)).toBe(false);
expect(pathExistsSync(db5)).toBe(false);
databaseUI.dispose(testDisposeHandler);
});
function createDatabase(
storageDir: string,
dbName: string,
language: string,
extraFile?: string,
) {
const parentDir = join(storageDir, dbName);
const dbDir = join(parentDir, `db-${language}`);
mkdirsSync(dbDir);
if (extraFile) {
createFileSync(join(parentDir, extraFile));
}
return parentDir;
}
});