@@ -13,13 +13,19 @@ import { createFileSync, ensureDirSync, removeSync } from "fs-extra";
1313import { join } from "path" ;
1414import { CancellationTokenSource } from "vscode-jsonrpc" ;
1515import { testCredentialsWithStub } from "../../factories/authentication" ;
16- import { DatabaseItem , DatabaseManager } from "../../../src/local-databases" ;
16+ import {
17+ DatabaseItem ,
18+ DatabaseManager ,
19+ FullDatabaseOptions ,
20+ } from "../../../src/local-databases" ;
1721import * as databaseFetcher from "../../../src/databaseFetcher" ;
22+ import { createMockDB } from "../../factories/databases/databases" ;
1823
1924jest . setTimeout ( 40_000 ) ;
2025
2126describe ( "SkeletonQueryWizard" , ( ) => {
2227 let wizard : SkeletonQueryWizard ;
28+ let mockDatabaseManager : DatabaseManager ;
2329 let dir : tmp . DirResult ;
2430 let storagePath : string ;
2531 let quickPickSpy : jest . SpiedFunction < typeof window . showQuickPick > ;
@@ -42,11 +48,6 @@ describe("SkeletonQueryWizard", () => {
4248 const token = new CancellationTokenSource ( ) . token ;
4349 const credentials = testCredentialsWithStub ( ) ;
4450 const chosenLanguage = "ruby" ;
45- const mockDatabaseManager = mockedObject < DatabaseManager > ( {
46- setCurrentDatabaseItem : jest . fn ( ) ,
47- digForDatabaseItem : jest . fn ( ) ,
48- digForDatabaseWithSameLanguage : jest . fn ( ) ,
49- } ) ;
5051 const mockCli = mockedObject < CodeQLCliServer > ( {
5152 resolveLanguages : jest
5253 . fn ( )
@@ -65,6 +66,11 @@ describe("SkeletonQueryWizard", () => {
6566 jest . spyOn ( extLogger , "log" ) . mockResolvedValue ( undefined ) ;
6667
6768 beforeEach ( async ( ) => {
69+ mockDatabaseManager = mockedObject < DatabaseManager > ( {
70+ setCurrentDatabaseItem : jest . fn ( ) ,
71+ databaseItems : [ ] as DatabaseItem [ ] ,
72+ } ) ;
73+
6874 dir = tmp . dirSync ( {
6975 prefix : "skeleton_query_wizard_" ,
7076 unsafeCleanup : true ,
@@ -214,6 +220,7 @@ describe("SkeletonQueryWizard", () => {
214220 describe ( "if database is also already downloaded" , ( ) => {
215221 let databaseNwo : string ;
216222 let databaseItem : DatabaseItem ;
223+ let mockDatabaseManagerWithItems : DatabaseManager ;
217224
218225 beforeEach ( async ( ) => {
219226 databaseNwo = QUERY_LANGUAGE_TO_DATABASE_REPO [ chosenLanguage ] ;
@@ -223,9 +230,19 @@ describe("SkeletonQueryWizard", () => {
223230 language : chosenLanguage ,
224231 } as DatabaseItem ;
225232
226- jest
227- . spyOn ( mockDatabaseManager , "digForDatabaseItem" )
228- . mockResolvedValue ( [ databaseItem ] as any ) ;
233+ mockDatabaseManagerWithItems = mockedObject < DatabaseManager > ( {
234+ setCurrentDatabaseItem : jest . fn ( ) ,
235+ databaseItems : [ databaseItem ] as DatabaseItem [ ] ,
236+ } ) ;
237+
238+ wizard = new SkeletonQueryWizard (
239+ mockCli ,
240+ jest . fn ( ) ,
241+ credentials ,
242+ extLogger ,
243+ mockDatabaseManagerWithItems ,
244+ token ,
245+ ) ;
229246 } ) ;
230247
231248 it ( "should not download a new database for language" , async ( ) => {
@@ -237,9 +254,9 @@ describe("SkeletonQueryWizard", () => {
237254 it ( "should select an existing database" , async ( ) => {
238255 await wizard . execute ( ) ;
239256
240- expect ( mockDatabaseManager . setCurrentDatabaseItem ) . toHaveBeenCalledWith (
241- [ databaseItem ] ,
242- ) ;
257+ expect (
258+ mockDatabaseManagerWithItems . setCurrentDatabaseItem ,
259+ ) . toHaveBeenCalledWith ( databaseItem ) ;
243260 } ) ;
244261
245262 it ( "should open the new query file" , async ( ) => {
@@ -254,12 +271,6 @@ describe("SkeletonQueryWizard", () => {
254271 } ) ;
255272
256273 describe ( "if database is missing" , ( ) => {
257- beforeEach ( async ( ) => {
258- jest
259- . spyOn ( mockDatabaseManager , "digForDatabaseItem" )
260- . mockResolvedValue ( undefined ) ;
261- } ) ;
262-
263274 describe ( "if the user choses to downloaded the suggested database from GitHub" , ( ) => {
264275 it ( "should download a new database for language" , async ( ) => {
265276 await wizard . execute ( ) ;
@@ -335,4 +346,71 @@ describe("SkeletonQueryWizard", () => {
335346 } ) ;
336347 } ) ;
337348 } ) ;
349+
350+ describe ( "digForDatabaseItem" , ( ) => {
351+ describe ( "when the item exists" , ( ) => {
352+ it ( "should return the database item" , async ( ) => {
353+ const mockDbItem = createMockDB ( dir ) ;
354+ const mockDbItem2 = createMockDB ( dir ) ;
355+
356+ const databaseItem = await wizard . digForDatabaseItem (
357+ mockDbItem . language ,
358+ mockDbItem . name ,
359+ [ mockDbItem , mockDbItem2 ] ,
360+ ) ;
361+
362+ expect ( databaseItem ! . language ) . toEqual ( mockDbItem . language ) ;
363+ expect ( databaseItem ! . name ) . toEqual ( mockDbItem . name ) ;
364+ } ) ;
365+ } ) ;
366+
367+ describe ( "when the item doesn't exist" , ( ) => {
368+ it ( "should return nothing" , async ( ) => {
369+ const mockDbItem = createMockDB ( dir ) ;
370+ const mockDbItem2 = createMockDB ( dir ) ;
371+
372+ const databaseItem = await wizard . digForDatabaseItem (
373+ "ruby" ,
374+ "mock-database-name" ,
375+ [ mockDbItem , mockDbItem2 ] ,
376+ ) ;
377+
378+ expect ( databaseItem ) . toBeUndefined ( ) ;
379+ } ) ;
380+ } ) ;
381+ } ) ;
382+
383+ describe ( "digForDatabaseWithSameLanguage" , ( ) => {
384+ describe ( "when the item exists" , ( ) => {
385+ it ( "should return the database item" , async ( ) => {
386+ const mockDbItem = createMockDB ( dir , {
387+ language : "ruby" ,
388+ } as FullDatabaseOptions ) ;
389+ const mockDbItem2 = createMockDB ( dir , {
390+ language : "javascript" ,
391+ } as FullDatabaseOptions ) ;
392+
393+ const databaseItem = await wizard . digForDatabaseWithSameLanguage (
394+ "ruby" ,
395+ [ mockDbItem , mockDbItem2 ] ,
396+ ) ;
397+
398+ expect ( databaseItem ) . toEqual ( mockDbItem ) ;
399+ } ) ;
400+ } ) ;
401+
402+ describe ( "when the item doesn't exist" , ( ) => {
403+ it ( "should return nothing" , async ( ) => {
404+ const mockDbItem = createMockDB ( dir ) ;
405+ const mockDbItem2 = createMockDB ( dir ) ;
406+
407+ const databaseItem = await wizard . digForDatabaseWithSameLanguage (
408+ "ruby" ,
409+ [ mockDbItem , mockDbItem2 ] ,
410+ ) ;
411+
412+ expect ( databaseItem ) . toBeUndefined ( ) ;
413+ } ) ;
414+ } ) ;
415+ } ) ;
338416} ) ;
0 commit comments