@@ -27,6 +27,7 @@ describe("pickExtensionPackModelFile", () => {
2727 } ;
2828 const databaseItem = {
2929 name : "github/vscode-codeql" ,
30+ language : "java" ,
3031 } ;
3132
3233 const cancellationTokenSource = new CancellationTokenSource ( ) ;
@@ -304,6 +305,71 @@ describe("pickExtensionPackModelFile", () => {
304305 } ) ;
305306 } ) ;
306307
308+ it ( "allows user to create an extension pack when there are no extension packs with a different language" , async ( ) => {
309+ const cliServer = mockCliServer ( { } , { models : [ ] , data : { } } ) ;
310+
311+ const tmpDir = await dir ( {
312+ unsafeCleanup : true ,
313+ } ) ;
314+
315+ showQuickPickSpy . mockResolvedValueOnce ( {
316+ label : "codeql-custom-queries-java" ,
317+ path : tmpDir . path ,
318+ } as QuickPickItem ) ;
319+ showInputBoxSpy . mockResolvedValueOnce ( "my-extension-pack" ) ;
320+ showInputBoxSpy . mockResolvedValue ( "models/my-model.yml" ) ;
321+
322+ expect (
323+ await pickExtensionPackModelFile (
324+ cliServer ,
325+ {
326+ ...databaseItem ,
327+ language : "csharp" ,
328+ } ,
329+ progress ,
330+ token ,
331+ ) ,
332+ ) . toEqual ( join ( tmpDir . path , "my-extension-pack" , "models" , "my-model.yml" ) ) ;
333+ expect ( showQuickPickSpy ) . toHaveBeenCalledTimes ( 1 ) ;
334+ expect ( showInputBoxSpy ) . toHaveBeenCalledTimes ( 2 ) ;
335+ expect ( showInputBoxSpy ) . toHaveBeenCalledWith (
336+ {
337+ title : expect . stringMatching ( / e x t e n s i o n p a c k / i) ,
338+ prompt : expect . stringMatching ( / e x t e n s i o n p a c k / i) ,
339+ placeHolder : expect . stringMatching ( / g i t h u b \/ v s c o d e - c o d e q l - e x t e n s i o n s / ) ,
340+ validateInput : expect . any ( Function ) ,
341+ } ,
342+ token ,
343+ ) ;
344+ expect ( showInputBoxSpy ) . toHaveBeenCalledWith (
345+ {
346+ title : expect . stringMatching ( / m o d e l f i l e / ) ,
347+ value : "models/github.vscode-codeql.model.yml" ,
348+ validateInput : expect . any ( Function ) ,
349+ } ,
350+ token ,
351+ ) ;
352+ expect ( cliServer . resolveQlpacks ) . toHaveBeenCalled ( ) ;
353+ expect ( cliServer . resolveExtensions ) . toHaveBeenCalled ( ) ;
354+
355+ expect (
356+ loadYaml (
357+ await readFile (
358+ join ( tmpDir . path , "my-extension-pack" , "codeql-pack.yml" ) ,
359+ "utf8" ,
360+ ) ,
361+ ) ,
362+ ) . toEqual ( {
363+ name : "my-extension-pack" ,
364+ version : "0.0.0" ,
365+ library : true ,
366+ extensionTargets : {
367+ "codeql/csharp-all" : "*" ,
368+ } ,
369+ dataExtensions : [ "models/**/*.yml" ] ,
370+ } ) ;
371+ } ) ;
372+
307373 it ( "allows cancelling the workspace folder selection" , async ( ) => {
308374 const cliServer = mockCliServer ( { } , { models : [ ] , data : { } } ) ;
309375
0 commit comments