@@ -5,28 +5,97 @@ import { getErrorMessage } from "../../../../../src/common/helpers-pure";
55
66import * as log from "../../../../../src/common/logging/notifications" ;
77import * as workspaceFolders from "../../../../../src/common/vscode/workspace-folders" ;
8- import { KeyType , resolveQueries } from "../../../../../src/language-support" ;
9- import { CodeQLCliServer } from "../../../../../src/codeql-cli/cli" ;
8+ import {
9+ KeyType ,
10+ resolveContextualQlPacksForDatabase ,
11+ resolveContextualQueries ,
12+ } from "../../../../../src/language-support" ;
13+ import { CodeQLCliServer , DbInfo } from "../../../../../src/codeql-cli/cli" ;
1014import { mockedObject } from "../../../utils/mocking.helpers" ;
15+ import * as queryResolver from "../../../../../src/local-queries/query-resolver" ;
16+ import { DatabaseItem } from "../../../../../src/databases/local-databases" ;
17+ import { Uri } from "vscode" ;
1118
1219describe ( "queryResolver" , ( ) => {
13- const resolveQueriesInSuite = jest . fn ( ) ;
20+ let qlpackOfDatabase : jest . SpiedFunction <
21+ typeof queryResolver . qlpackOfDatabase
22+ > ;
23+
24+ const resolveQueriesInSuite : jest . MockedFunction <
25+ typeof CodeQLCliServer . prototype . resolveQueriesInSuite
26+ > = jest . fn ( ) ;
27+ const resolveDatabase : jest . MockedFunction <
28+ typeof CodeQLCliServer . prototype . resolveDatabase
29+ > = jest . fn ( ) ;
30+ const packDownload : jest . MockedFunction <
31+ typeof CodeQLCliServer . prototype . packDownload
32+ > = jest . fn ( ) ;
1433
1534 const mockCli = mockedObject < CodeQLCliServer > ( {
1635 resolveQueriesInSuite,
36+ resolveDatabase,
37+ packDownload,
1738 } ) ;
1839
1940 beforeEach ( ( ) => {
41+ qlpackOfDatabase = jest . spyOn ( queryResolver , "qlpackOfDatabase" ) ;
42+
2043 jest
2144 . spyOn ( workspaceFolders , "getOnDiskWorkspaceFolders" )
2245 . mockReturnValue ( [ ] ) ;
2346 jest . spyOn ( log , "showAndLogErrorMessage" ) . mockResolvedValue ( undefined ) ;
2447 } ) ;
2548
26- describe ( "resolveQueries" , ( ) => {
49+ describe ( "resolveContextualQlPacksForDatabase" , ( ) => {
50+ let databaseItem : DatabaseItem ;
51+
52+ beforeEach ( ( ) => {
53+ databaseItem = {
54+ name : "my-db" ,
55+ language : "csharp" ,
56+ databaseUri : Uri . file ( "/a/b/c/db" ) ,
57+ } as DatabaseItem ;
58+ } ) ;
59+
60+ it ( "should resolve a qlpack when CLI returns qlpack" , async ( ) => {
61+ qlpackOfDatabase . mockResolvedValue ( {
62+ dbschemePack : "dbschemePack" ,
63+ dbschemePackIsLibraryPack : false ,
64+ } ) ;
65+
66+ expect (
67+ await resolveContextualQlPacksForDatabase ( mockCli , databaseItem ) ,
68+ ) . toEqual ( {
69+ dbschemePack : "dbschemePack" ,
70+ dbschemePackIsLibraryPack : false ,
71+ } ) ;
72+ } ) ;
73+
74+ it ( "should return qlpack when downloading packs" , async ( ) => {
75+ qlpackOfDatabase . mockRejectedValue ( new Error ( "error" ) ) ;
76+ resolveDatabase . mockResolvedValue ( {
77+ languages : [ "csharp" ] ,
78+ } as DbInfo ) ;
79+
80+ expect (
81+ await resolveContextualQlPacksForDatabase ( mockCli , databaseItem ) ,
82+ ) . toEqual ( {
83+ dbschemePack : "codeql/csharp-all" ,
84+ dbschemePackIsLibraryPack : true ,
85+ queryPack : "codeql/csharp-queries" ,
86+ } ) ;
87+ expect ( packDownload ) . toHaveBeenCalledTimes ( 1 ) ;
88+ expect ( packDownload ) . toHaveBeenCalledWith ( [
89+ "codeql/csharp-all" ,
90+ "codeql/csharp-queries" ,
91+ ] ) ;
92+ } ) ;
93+ } ) ;
94+
95+ describe ( "resolveContextualQueries" , ( ) => {
2796 it ( "should resolve a query" , async ( ) => {
28- resolveQueriesInSuite . mockReturnValue ( [ "a" , "b" ] ) ;
29- const result = await resolveQueries (
97+ resolveQueriesInSuite . mockResolvedValue ( [ "a" , "b" ] ) ;
98+ const result = await resolveContextualQueries (
3099 mockCli ,
31100 { dbschemePack : "my-qlpack" , dbschemePackIsLibraryPack : false } ,
32101 KeyType . DefinitionQuery ,
@@ -53,10 +122,10 @@ describe("queryResolver", () => {
53122 } ) ;
54123
55124 it ( "should throw an error when there are no queries found" , async ( ) => {
56- resolveQueriesInSuite . mockReturnValue ( [ ] ) ;
125+ resolveQueriesInSuite . mockResolvedValue ( [ ] ) ;
57126
58127 try {
59- await resolveQueries (
128+ await resolveContextualQueries (
60129 mockCli ,
61130 { dbschemePack : "my-qlpack" , dbschemePackIsLibraryPack : false } ,
62131 KeyType . DefinitionQuery ,
0 commit comments