11import { Uri , workspace , WorkspaceFolder } from "vscode" ;
22import { dir , DirectoryResult } from "tmp-promise" ;
3+ import { join } from "path" ;
34import { autoPickExtensionsDirectory } from "../../../../src/data-extensions-editor/extensions-workspace-folder" ;
5+ import * as files from "../../../../src/pure/files" ;
46
57describe ( "autoPickExtensionsDirectory" , ( ) => {
68 let tmpDir : DirectoryResult ;
@@ -15,20 +17,24 @@ describe("autoPickExtensionsDirectory", () => {
1517 let updateWorkspaceFoldersSpy : jest . SpiedFunction <
1618 typeof workspace . updateWorkspaceFolders
1719 > ;
20+ let mockedTmpDirUri : Uri ;
1821
1922 beforeEach ( async ( ) => {
2023 tmpDir = await dir ( {
2124 unsafeCleanup : true ,
2225 } ) ;
2326
24- rootDirectory = Uri . file ( tmpDir . path ) ;
27+ rootDirectory = Uri . joinPath ( Uri . file ( tmpDir . path ) , "root" ) ;
2528 extensionsDirectory = Uri . joinPath (
2629 rootDirectory ,
2730 ".github" ,
2831 "codeql" ,
2932 "extensions" ,
3033 ) ;
3134
35+ const mockedTmpDir = join ( tmpDir . path , ".tmp" , "tmp" ) ;
36+ mockedTmpDirUri = Uri . file ( mockedTmpDir ) ;
37+
3238 workspaceFoldersSpy = jest
3339 . spyOn ( workspace , "workspaceFolders" , "get" )
3440 . mockReturnValue ( [ ] ) ;
@@ -38,6 +44,8 @@ describe("autoPickExtensionsDirectory", () => {
3844 updateWorkspaceFoldersSpy = jest
3945 . spyOn ( workspace , "updateWorkspaceFolders" )
4046 . mockReturnValue ( true ) ;
47+
48+ jest . spyOn ( files , "tmpdir" ) . mockReturnValue ( mockedTmpDir ) ;
4149 } ) ;
4250
4351 afterEach ( async ( ) => {
@@ -136,6 +144,32 @@ describe("autoPickExtensionsDirectory", () => {
136144 } ) ;
137145 } ) ;
138146
147+ it ( "when a workspace file does not exist and there is a temp dir as workspace folder" , async ( ) => {
148+ workspaceFoldersSpy . mockReturnValue ( [
149+ {
150+ uri : Uri . joinPath ( rootDirectory , "codeql-custom-queries-java" ) ,
151+ name : "codeql-custom-queries-java" ,
152+ index : 0 ,
153+ } ,
154+ {
155+ uri : Uri . joinPath ( rootDirectory , "codeql-custom-queries-python" ) ,
156+ name : "codeql-custom-queries-python" ,
157+ index : 1 ,
158+ } ,
159+ {
160+ uri : Uri . joinPath ( mockedTmpDirUri , "quick-queries" ) ,
161+ name : "quick-queries" ,
162+ index : 2 ,
163+ } ,
164+ ] ) ;
165+
166+ expect ( await autoPickExtensionsDirectory ( ) ) . toEqual ( extensionsDirectory ) ;
167+ expect ( updateWorkspaceFoldersSpy ) . toHaveBeenCalledWith ( 3 , 0 , {
168+ name : "CodeQL Extension Packs" ,
169+ uri : extensionsDirectory ,
170+ } ) ;
171+ } ) ;
172+
139173 it ( "when a workspace file does not exist and there is no common root directory" , async ( ) => {
140174 workspaceFoldersSpy . mockReturnValue ( [
141175 {
0 commit comments