11import { faker } from "@faker-js/faker" ;
22import { Octokit } from "@octokit/rest" ;
3- import { mockedObject } from "../../utils/mocking.helpers" ;
3+ import { QuickPickItem , window } from "vscode" ;
4+ import { mockedObject , mockedQuickPickItem } from "../../utils/mocking.helpers" ;
45import {
56 CodeqlDatabase ,
67 promptGitHubDatabaseDownload ,
@@ -29,6 +30,7 @@ describe("promptGitHubDatabaseDownload", () => {
2930 created_at : faker . date . past ( ) . toISOString ( ) ,
3031 commit_oid : faker . git . commitSha ( ) ,
3132 language : "swift" ,
33+ size : 27389673 ,
3234 url : faker . internet . url ( {
3335 protocol : "https" ,
3436 } ) ,
@@ -38,9 +40,7 @@ describe("promptGitHubDatabaseDownload", () => {
3840 let showNeverAskAgainDialogSpy : jest . SpiedFunction <
3941 typeof dialog . showNeverAskAgainDialog
4042 > ;
41- let promptForLanguageSpy : jest . SpiedFunction <
42- typeof databaseFetcher . promptForLanguage
43- > ;
43+ let showQuickPickSpy : jest . SpiedFunction < typeof window . showQuickPick > ;
4444 let downloadGitHubDatabaseFromUrlSpy : jest . SpiedFunction <
4545 typeof databaseFetcher . downloadGitHubDatabaseFromUrl
4646 > ;
@@ -56,9 +56,13 @@ describe("promptGitHubDatabaseDownload", () => {
5656 showNeverAskAgainDialogSpy = jest
5757 . spyOn ( dialog , "showNeverAskAgainDialog" )
5858 . mockResolvedValue ( "Connect" ) ;
59- promptForLanguageSpy = jest
60- . spyOn ( databaseFetcher , "promptForLanguage" )
61- . mockResolvedValue ( databases [ 0 ] . language ) ;
59+ showQuickPickSpy = jest . spyOn ( window , "showQuickPick" ) . mockResolvedValue (
60+ mockedQuickPickItem ( [
61+ mockedObject < QuickPickItem & { database : CodeqlDatabase } > ( {
62+ database : databases [ 0 ] ,
63+ } ) ,
64+ ] ) ,
65+ ) ;
6266 downloadGitHubDatabaseFromUrlSpy = jest
6367 . spyOn ( databaseFetcher , "downloadGitHubDatabaseFromUrl" )
6468 . mockResolvedValue ( undefined ) ;
@@ -93,7 +97,7 @@ describe("promptGitHubDatabaseDownload", () => {
9397 true ,
9498 false ,
9599 ) ;
96- expect ( promptForLanguageSpy ) . toHaveBeenCalledWith ( [ "swift" ] , undefined ) ;
100+ expect ( showQuickPickSpy ) . not . toHaveBeenCalled ( ) ;
97101 expect ( config . setDownload ) . not . toHaveBeenCalled ( ) ;
98102 } ) ;
99103
@@ -180,28 +184,6 @@ describe("promptGitHubDatabaseDownload", () => {
180184 } ) ;
181185 } ) ;
182186
183- describe ( "when not selecting language" , ( ) => {
184- beforeEach ( ( ) => {
185- promptForLanguageSpy . mockResolvedValue ( undefined ) ;
186- } ) ;
187-
188- it ( "does not download the database" , async ( ) => {
189- await promptGitHubDatabaseDownload (
190- octokit ,
191- owner ,
192- repo ,
193- databases ,
194- config ,
195- databaseManager ,
196- storagePath ,
197- cliServer ,
198- commandManager ,
199- ) ;
200-
201- expect ( downloadGitHubDatabaseFromUrlSpy ) . not . toHaveBeenCalled ( ) ;
202- } ) ;
203- } ) ;
204-
205187 describe ( "when there are multiple languages" , ( ) => {
206188 beforeEach ( ( ) => {
207189 databases = [
@@ -210,6 +192,7 @@ describe("promptGitHubDatabaseDownload", () => {
210192 created_at : faker . date . past ( ) . toISOString ( ) ,
211193 commit_oid : faker . git . commitSha ( ) ,
212194 language : "swift" ,
195+ size : 27389673 ,
213196 url : faker . internet . url ( {
214197 protocol : "https" ,
215198 } ) ,
@@ -219,16 +202,23 @@ describe("promptGitHubDatabaseDownload", () => {
219202 created_at : faker . date . past ( ) . toISOString ( ) ,
220203 commit_oid : null ,
221204 language : "go" ,
205+ size : 2930572385 ,
222206 url : faker . internet . url ( {
223207 protocol : "https" ,
224208 } ) ,
225209 } ) ,
226210 ] ;
227-
228- promptForLanguageSpy . mockResolvedValue ( databases [ 1 ] . language ) ;
229211 } ) ;
230212
231- it ( "downloads the correct database" , async ( ) => {
213+ it ( "downloads a single selected language" , async ( ) => {
214+ showQuickPickSpy . mockResolvedValue (
215+ mockedQuickPickItem ( [
216+ mockedObject < QuickPickItem & { database : CodeqlDatabase } > ( {
217+ database : databases [ 1 ] ,
218+ } ) ,
219+ ] ) ,
220+ ) ;
221+
232222 await promptGitHubDatabaseDownload (
233223 octokit ,
234224 owner ,
@@ -257,11 +247,117 @@ describe("promptGitHubDatabaseDownload", () => {
257247 true ,
258248 false ,
259249 ) ;
260- expect ( promptForLanguageSpy ) . toHaveBeenCalledWith (
261- [ "swift" , "go" ] ,
262- undefined ,
250+ expect ( showQuickPickSpy ) . toHaveBeenCalledWith (
251+ [
252+ expect . objectContaining ( {
253+ label : "Go" ,
254+ description : "2794.8 MB" ,
255+ database : databases [ 1 ] ,
256+ } ) ,
257+ expect . objectContaining ( {
258+ label : "Swift" ,
259+ description : "26.1 MB" ,
260+ database : databases [ 0 ] ,
261+ } ) ,
262+ ] ,
263+ expect . anything ( ) ,
263264 ) ;
264265 expect ( config . setDownload ) . not . toHaveBeenCalled ( ) ;
265266 } ) ;
267+
268+ it ( "downloads multiple selected languages" , async ( ) => {
269+ showQuickPickSpy . mockResolvedValue (
270+ mockedQuickPickItem ( [
271+ mockedObject < QuickPickItem & { database : CodeqlDatabase } > ( {
272+ database : databases [ 0 ] ,
273+ } ) ,
274+ mockedObject < QuickPickItem & { database : CodeqlDatabase } > ( {
275+ database : databases [ 1 ] ,
276+ } ) ,
277+ ] ) ,
278+ ) ;
279+
280+ await promptGitHubDatabaseDownload (
281+ octokit ,
282+ owner ,
283+ repo ,
284+ databases ,
285+ config ,
286+ databaseManager ,
287+ storagePath ,
288+ cliServer ,
289+ commandManager ,
290+ ) ;
291+
292+ expect ( downloadGitHubDatabaseFromUrlSpy ) . toHaveBeenCalledTimes ( 2 ) ;
293+ expect ( downloadGitHubDatabaseFromUrlSpy ) . toHaveBeenCalledWith (
294+ databases [ 0 ] . url ,
295+ databases [ 0 ] . id ,
296+ databases [ 0 ] . created_at ,
297+ databases [ 0 ] . commit_oid ,
298+ owner ,
299+ repo ,
300+ octokit ,
301+ expect . anything ( ) ,
302+ databaseManager ,
303+ storagePath ,
304+ cliServer ,
305+ true ,
306+ false ,
307+ ) ;
308+ expect ( downloadGitHubDatabaseFromUrlSpy ) . toHaveBeenCalledWith (
309+ databases [ 1 ] . url ,
310+ databases [ 1 ] . id ,
311+ databases [ 1 ] . created_at ,
312+ databases [ 1 ] . commit_oid ,
313+ owner ,
314+ repo ,
315+ octokit ,
316+ expect . anything ( ) ,
317+ databaseManager ,
318+ storagePath ,
319+ cliServer ,
320+ true ,
321+ false ,
322+ ) ;
323+ expect ( showQuickPickSpy ) . toHaveBeenCalledWith (
324+ [
325+ expect . objectContaining ( {
326+ label : "Go" ,
327+ description : "2794.8 MB" ,
328+ database : databases [ 1 ] ,
329+ } ) ,
330+ expect . objectContaining ( {
331+ label : "Swift" ,
332+ description : "26.1 MB" ,
333+ database : databases [ 0 ] ,
334+ } ) ,
335+ ] ,
336+ expect . anything ( ) ,
337+ ) ;
338+ expect ( config . setDownload ) . not . toHaveBeenCalled ( ) ;
339+ } ) ;
340+
341+ describe ( "when not selecting language" , ( ) => {
342+ beforeEach ( ( ) => {
343+ showQuickPickSpy . mockResolvedValue ( undefined ) ;
344+ } ) ;
345+
346+ it ( "does not download the database" , async ( ) => {
347+ await promptGitHubDatabaseDownload (
348+ octokit ,
349+ owner ,
350+ repo ,
351+ databases ,
352+ config ,
353+ databaseManager ,
354+ storagePath ,
355+ cliServer ,
356+ commandManager ,
357+ ) ;
358+
359+ expect ( downloadGitHubDatabaseFromUrlSpy ) . not . toHaveBeenCalled ( ) ;
360+ } ) ;
361+ } ) ;
266362 } ) ;
267363} ) ;
0 commit comments