@@ -10,6 +10,7 @@ import {
1010 DatabaseContents ,
1111 FullDatabaseOptions ,
1212 findSourceArchive ,
13+ DatabaseResolver ,
1314} from "../../../src/databases" ;
1415import { Logger } from "../../../src/common" ;
1516import { ProgressCallback } from "../../../src/commandRunner" ;
@@ -21,6 +22,7 @@ import {
2122import { testDisposeHandler } from "../test-dispose-handler" ;
2223import { QueryRunner } from "../../../src/queryRunner" ;
2324import * as helpers from "../../../src/helpers" ;
25+ import { Setting } from "../../../src/config" ;
2426
2527describe ( "databases" , ( ) => {
2628 const MOCK_DB_OPTIONS : FullDatabaseOptions = {
@@ -623,6 +625,98 @@ describe("databases", () => {
623625 } ) ;
624626 } ) ;
625627
628+ describe ( "openDatabase" , ( ) => {
629+ let createSkeletonPacksSpy : jest . SpyInstance ;
630+ let resolveDatabaseContentsSpy : jest . SpyInstance ;
631+ let addDatabaseSourceArchiveFolderSpy : jest . SpyInstance ;
632+ let mockDbItem : DatabaseItemImpl ;
633+
634+ beforeEach ( ( ) => {
635+ createSkeletonPacksSpy = jest
636+ . spyOn ( databaseManager , "createSkeletonPacks" )
637+ . mockImplementation ( async ( ) => {
638+ /* no-op */
639+ } ) ;
640+
641+ resolveDatabaseContentsSpy = jest
642+ . spyOn ( DatabaseResolver , "resolveDatabaseContents" )
643+ . mockResolvedValue ( { } as DatabaseContents ) ;
644+
645+ addDatabaseSourceArchiveFolderSpy = jest . spyOn (
646+ databaseManager ,
647+ "addDatabaseSourceArchiveFolder" ,
648+ ) ;
649+
650+ jest . mock ( "fs" , ( ) => ( {
651+ promises : {
652+ pathExists : jest . fn ( ) . mockResolvedValue ( true ) ,
653+ } ,
654+ } ) ) ;
655+
656+ mockDbItem = createMockDB ( ) ;
657+ } ) ;
658+
659+ it ( "should resolve the database contents" , async ( ) => {
660+ await databaseManager . openDatabase (
661+ { } as ProgressCallback ,
662+ { } as CancellationToken ,
663+ mockDbItem . databaseUri ,
664+ ) ;
665+
666+ expect ( resolveDatabaseContentsSpy ) . toBeCalledTimes ( 1 ) ;
667+ } ) ;
668+
669+ it ( "should add database source archive folder" , async ( ) => {
670+ await databaseManager . openDatabase (
671+ { } as ProgressCallback ,
672+ { } as CancellationToken ,
673+ mockDbItem . databaseUri ,
674+ ) ;
675+
676+ expect ( addDatabaseSourceArchiveFolderSpy ) . toBeCalledTimes ( 1 ) ;
677+ } ) ;
678+
679+ describe ( "when codeQL.codespacesTemplate is set to true" , ( ) => {
680+ it ( "should create a skeleton QL pack" , async ( ) => {
681+ jest . spyOn ( Setting . prototype , "getValue" ) . mockReturnValue ( true ) ;
682+
683+ await databaseManager . openDatabase (
684+ { } as ProgressCallback ,
685+ { } as CancellationToken ,
686+ mockDbItem . databaseUri ,
687+ ) ;
688+
689+ expect ( createSkeletonPacksSpy ) . toBeCalledTimes ( 1 ) ;
690+ } ) ;
691+ } ) ;
692+
693+ describe ( "when codeQL.codespacesTemplate is set to false" , ( ) => {
694+ it ( "should not create a skeleton QL pack" , async ( ) => {
695+ jest . spyOn ( Setting . prototype , "getValue" ) . mockReturnValue ( false ) ;
696+
697+ await databaseManager . openDatabase (
698+ { } as ProgressCallback ,
699+ { } as CancellationToken ,
700+ mockDbItem . databaseUri ,
701+ ) ;
702+ expect ( createSkeletonPacksSpy ) . toBeCalledTimes ( 0 ) ;
703+ } ) ;
704+ } ) ;
705+
706+ describe ( "when codeQL.codespacesTemplate is not set" , ( ) => {
707+ it ( "should not create a skeleton QL pack" , async ( ) => {
708+ jest . spyOn ( Setting . prototype , "getValue" ) . mockReturnValue ( undefined ) ;
709+
710+ await databaseManager . openDatabase (
711+ { } as ProgressCallback ,
712+ { } as CancellationToken ,
713+ mockDbItem . databaseUri ,
714+ ) ;
715+ expect ( createSkeletonPacksSpy ) . toBeCalledTimes ( 0 ) ;
716+ } ) ;
717+ } ) ;
718+ } ) ;
719+
626720 function createMockDB (
627721 mockDbOptions = MOCK_DB_OPTIONS ,
628722 // source archive location must be a real(-ish) location since
0 commit comments