11import {
22 readQueryResults ,
33 runQuery ,
4+ setUpPack ,
45} from "../../../../src/data-extensions-editor/external-api-usage-query" ;
56import { createMockLogger } from "../../../__mocks__/loggerMock" ;
67import { DatabaseKind } from "../../../../src/databases/local-databases" ;
@@ -13,8 +14,75 @@ import { showAndLogExceptionWithTelemetry } from "../../../../src/common/logging
1314import { QueryLanguage } from "../../../../src/common/query-language" ;
1415import { mockedUri } from "../../utils/mocking.helpers" ;
1516import { 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
1721describe ( "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