Files
vscode-codeql/extensions/ql-vscode/test/factories/query-history/local-query-history-item.ts
2023-12-21 16:57:46 +01:00

101 lines
2.7 KiB
TypeScript

import { faker } from "@faker-js/faker";
import { InitialQueryInfo, LocalQueryInfo } from "../../../src/query-results";
import {
QueryEvaluationInfo,
QueryOutputDir,
QueryWithResults,
} from "../../../src/run-queries-shared";
import { CancellationTokenSource } from "vscode";
import { QueryMetadata } from "../../../src/common/interface-types";
import { QueryLanguage } from "../../../src/common/query-language";
export function createMockLocalQueryInfo({
startTime = new Date(),
resultCount = 0,
userSpecifiedLabel = undefined,
failureReason = undefined,
dbName = "db-name",
hasMetadata = false,
queryWithResults = undefined,
language = undefined,
outputDir = new QueryOutputDir("/a/b/c"),
}: {
startTime?: Date;
resultCount?: number;
userSpecifiedLabel?: string;
failureReason?: string;
dbName?: string;
hasMetadata?: boolean;
queryWithResults?: QueryWithResults | undefined;
language?: QueryLanguage;
outputDir?: QueryOutputDir | undefined;
}): LocalQueryInfo {
const cancellationToken = {
dispose: () => {
/**/
},
} as CancellationTokenSource;
const initialQueryInfo = {
queryText: "select 1",
isQuickQuery: false,
isQuickEval: false,
queryName: "query-name",
queryPath: "query-file.ql",
databaseInfo: {
databaseUri: "databaseUri",
name: dbName,
language,
},
start: startTime,
id: faker.number.int().toString(),
userSpecifiedLabel,
outputDir,
} as InitialQueryInfo;
const localQuery = new LocalQueryInfo(initialQueryInfo, cancellationToken);
localQuery.failureReason = failureReason;
localQuery.cancel = () => {
/**/
};
if (queryWithResults) {
localQuery.completeThisQuery(queryWithResults);
localQuery.completedQuery?.setResultCount(1);
} else if (resultCount > 0) {
const queryWithResults = createMockQueryWithResults({ hasMetadata });
localQuery.completeThisQuery(queryWithResults);
localQuery.completedQuery?.setResultCount(resultCount);
}
return localQuery;
}
export function createMockQueryWithResults({
didRunSuccessfully = true,
hasInterpretedResults = true,
hasMetadata = undefined,
}: {
didRunSuccessfully?: boolean;
hasInterpretedResults?: boolean;
hasMetadata?: boolean;
}): QueryWithResults {
const deleteQuery = jest.fn();
const metadata = hasMetadata
? ({ name: "query-name" } as QueryMetadata)
: undefined;
return {
query: {
hasInterpretedResults: () => Promise.resolve(hasInterpretedResults),
deleteQuery,
metadata,
} as unknown as QueryEvaluationInfo,
successful: didRunSuccessfully,
message: didRunSuccessfully
? "finished in 0 seconds"
: "compilation failed: unknown error",
};
}