Skip to content

Commit 5f48921

Browse files
committed
Add test for setup
1 parent fea45ea commit 5f48921

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

extensions/ql-vscode/test/vscode-tests/no-workspace/data-extensions-editor/external-api-usage-query.test.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
readQueryResults,
33
runQuery,
4+
setUpPack,
45
} from "../../../../src/data-extensions-editor/external-api-usage-query";
56
import { createMockLogger } from "../../../__mocks__/loggerMock";
67
import { DatabaseKind } from "../../../../src/databases/local-databases";
@@ -13,8 +14,75 @@ import { showAndLogExceptionWithTelemetry } from "../../../../src/common/logging
1314
import { QueryLanguage } from "../../../../src/common/query-language";
1415
import { mockedUri } from "../../utils/mocking.helpers";
1516
import { Mode } from "../../../../src/data-extensions-editor/shared/mode";
17+
import { readFile, readFileSync, readdir } from "fs-extra";
18+
import { join } from "path";
19+
import { load } from "js-yaml";
1620

1721
describe("external api usage query", () => {
22+
describe("setUpPack", () => {
23+
const languages = Object.keys(fetchExternalApiQueries).flatMap((lang) => {
24+
const queryDir = dirSync({ unsafeCleanup: true }).name;
25+
const query = fetchExternalApiQueries[lang as QueryLanguage];
26+
if (!query) {
27+
return [];
28+
}
29+
30+
return { language: lang as QueryLanguage, queryDir, query };
31+
});
32+
33+
test.each(languages)(
34+
"should create files for $language",
35+
async ({ language, queryDir, query }) => {
36+
await setUpPack(queryDir, query, language);
37+
38+
const queryFiles = await readdir(queryDir);
39+
expect(queryFiles.sort()).toEqual(
40+
[
41+
"codeql-pack.yml",
42+
"FetchExternalApisApplicationMode.ql",
43+
"FetchExternalApisFrameworkMode.ql",
44+
"AutomodelVsCode.qll",
45+
].sort(),
46+
);
47+
48+
const suiteFileContents = await readFile(
49+
join(queryDir, "codeql-pack.yml"),
50+
"utf8",
51+
);
52+
const suiteYaml = load(suiteFileContents);
53+
expect(suiteYaml).toEqual({
54+
name: "codeql/external-api-usage",
55+
version: "0.0.0",
56+
dependencies: {
57+
[`codeql/${language}-all`]: "*",
58+
},
59+
});
60+
61+
Object.values(Mode).forEach((mode) => {
62+
expect(
63+
readFileSync(
64+
join(
65+
queryDir,
66+
`FetchExternalApis${
67+
mode.charAt(0).toUpperCase() + mode.slice(1)
68+
}Mode.ql`,
69+
),
70+
"utf8",
71+
),
72+
).toEqual(query[`${mode}ModeQuery`]);
73+
});
74+
75+
for (const [filename, contents] of Object.entries(
76+
query.dependencies ?? {},
77+
)) {
78+
expect(await readFile(join(queryDir, filename), "utf8")).toEqual(
79+
contents,
80+
);
81+
}
82+
},
83+
);
84+
});
85+
1886
describe("runQuery", () => {
1987
const language = Object.keys(fetchExternalApiQueries)[
2088
Math.floor(Math.random() * Object.keys(fetchExternalApiQueries).length)

0 commit comments

Comments
 (0)