@@ -23,6 +23,7 @@ import { testDisposeHandler } from "../test-dispose-handler";
2323import { QueryRunner } from "../../../src/queryRunner" ;
2424import * as helpers from "../../../src/helpers" ;
2525import { Setting } from "../../../src/config" ;
26+ import { QlPackGenerator } from "../../../src/qlpack-generator" ;
2627
2728describe ( "databases" , ( ) => {
2829 const MOCK_DB_OPTIONS : FullDatabaseOptions = {
@@ -37,6 +38,7 @@ describe("databases", () => {
3738 let registerSpy : jest . Mock < Promise < void > , [ ] > ;
3839 let deregisterSpy : jest . Mock < Promise < void > , [ ] > ;
3940 let resolveDatabaseSpy : jest . Mock < Promise < DbInfo > , [ ] > ;
41+ let packAddSpy : jest . Mock < any , [ ] > ;
4042 let logSpy : jest . Mock < any , [ ] > ;
4143
4244 let showBinaryChoiceDialogSpy : jest . SpiedFunction <
@@ -52,6 +54,7 @@ describe("databases", () => {
5254 registerSpy = jest . fn ( ( ) => Promise . resolve ( undefined ) ) ;
5355 deregisterSpy = jest . fn ( ( ) => Promise . resolve ( undefined ) ) ;
5456 resolveDatabaseSpy = jest . fn ( ( ) => Promise . resolve ( { } as DbInfo ) ) ;
57+ packAddSpy = jest . fn ( ) ;
5558 logSpy = jest . fn ( ( ) => {
5659 /* */
5760 } ) ;
@@ -79,6 +82,7 @@ describe("databases", () => {
7982 } as unknown as QueryRunner ,
8083 {
8184 resolveDatabase : resolveDatabaseSpy ,
85+ packAdd : packAddSpy ,
8286 } as unknown as CodeQLCliServer ,
8387 {
8488 log : logSpy ,
@@ -589,20 +593,66 @@ describe("databases", () => {
589593
590594 describe ( "createSkeletonPacks" , ( ) => {
591595 let mockDbItem : DatabaseItemImpl ;
596+ let packfolderName : string ;
597+ let qlPackYamlFilePath : string ;
598+ let exampleQlFilePath : string ;
599+ let language : string ;
600+
601+ beforeEach ( ( ) => {
602+ language = "ruby" ;
603+
604+ const options : FullDatabaseOptions = {
605+ dateAdded : 123 ,
606+ ignoreSourceArchive : false ,
607+ language,
608+ } ;
609+ mockDbItem = createMockDB ( options ) ;
610+
611+ packfolderName = `codeql-custom-queries-${ mockDbItem . language } ` ;
612+ qlPackYamlFilePath = join ( packfolderName , "qlpack.yml" ) ;
613+ exampleQlFilePath = join ( packfolderName , "example.ql" ) ;
614+ } ) ;
615+
616+ afterEach ( async ( ) => {
617+ try {
618+ fs . rmdirSync ( packfolderName , { recursive : true } ) ;
619+ } catch ( e ) {
620+ // ignore
621+ }
622+ } ) ;
592623
593624 describe ( "when the language is set" , ( ) => {
594625 it ( "should offer the user to set up a skeleton QL pack" , async ( ) => {
595- const options : FullDatabaseOptions = {
596- dateAdded : 123 ,
597- ignoreSourceArchive : false ,
598- language : "ruby" ,
599- } ;
600- mockDbItem = createMockDB ( options ) ;
601-
602626 await ( databaseManager as any ) . createSkeletonPacks ( mockDbItem ) ;
603627
604628 expect ( showBinaryChoiceDialogSpy ) . toBeCalledTimes ( 1 ) ;
605629 } ) ;
630+
631+ it ( "should return early if the user refuses help" , async ( ) => {
632+ showBinaryChoiceDialogSpy = jest
633+ . spyOn ( helpers , "showBinaryChoiceDialog" )
634+ . mockResolvedValue ( false ) ;
635+
636+ const generateSpy = jest . spyOn ( QlPackGenerator . prototype , "generate" ) ;
637+
638+ await ( databaseManager as any ) . createSkeletonPacks ( mockDbItem ) ;
639+
640+ expect ( generateSpy ) . not . toBeCalled ( ) ;
641+ } ) ;
642+
643+ it ( "should create the skeleton QL pack for the user" , async ( ) => {
644+ expect ( fs . existsSync ( packfolderName ) ) . toBe ( false ) ;
645+ expect ( fs . existsSync ( qlPackYamlFilePath ) ) . toBe ( false ) ;
646+ expect ( fs . existsSync ( exampleQlFilePath ) ) . toBe ( false ) ;
647+
648+ await ( databaseManager as any ) . createSkeletonPacks ( mockDbItem ) ;
649+
650+ expect ( fs . existsSync ( packfolderName ) ) . toBe ( true ) ;
651+ expect ( fs . existsSync ( qlPackYamlFilePath ) ) . toBe ( true ) ;
652+ expect ( fs . existsSync ( exampleQlFilePath ) ) . toBe ( true ) ;
653+
654+ expect ( packAddSpy ) . toHaveBeenCalledWith ( packfolderName , language ) ;
655+ } ) ;
606656 } ) ;
607657
608658 describe ( "when the language is not set" , ( ) => {
0 commit comments