11import * as sinon from 'sinon' ;
22import { expect } from 'chai' ;
3- import { CancellationTokenSource , extensions } from 'vscode' ;
3+ import { CancellationTokenSource , commands , extensions } from 'vscode' ;
44import { CodeQLExtensionInterface } from '../../../extension' ;
55import { logger } from '../../../logging' ;
66import * as config from '../../../config' ;
@@ -21,15 +21,17 @@ import { createMockVariantAnalysisRepoTask } from '../../factories/remote-querie
2121import { CodeQLCliServer } from '../../../cli' ;
2222import { storagePath } from '../global.helper' ;
2323import { VariantAnalysisResultsManager } from '../../../remote-queries/variant-analysis-results-manager' ;
24- import { VariantAnalysis } from '../../../remote-queries/shared/variant-analysis' ;
2524import { createMockVariantAnalysis } from '../../factories/remote-queries/shared/variant-analysis' ;
25+ import { VariantAnalysis } from '../../../remote-queries/shared/variant-analysis' ;
26+ import * as VariantAnalysisModule from '../../../remote-queries/shared/variant-analysis' ;
27+ import { createTimestampFile } from '../../../helpers' ;
2628
2729describe ( 'Variant Analysis Manager' , async function ( ) {
2830 let sandbox : sinon . SinonSandbox ;
2931 let cli : CodeQLCliServer ;
3032 let cancellationTokenSource : CancellationTokenSource ;
3133 let variantAnalysisManager : VariantAnalysisManager ;
32- let variantAnalysis : VariantAnalysisApiResponse ;
34+ let variantAnalysisApiResponse : VariantAnalysisApiResponse ;
3335 let scannedRepos : ApiVariantAnalysisScannedRepository [ ] ;
3436 let getVariantAnalysisRepoStub : sinon . SinonStub ;
3537 let getVariantAnalysisRepoResultStub : sinon . SinonStub ;
@@ -45,7 +47,7 @@ describe('Variant Analysis Manager', async function() {
4547 cancellationTokenSource = new CancellationTokenSource ( ) ;
4648
4749 scannedRepos = createMockScannedRepos ( ) ;
48- variantAnalysis = createMockApiResponse ( 'in_progress' , scannedRepos ) ;
50+ variantAnalysisApiResponse = createMockApiResponse ( 'in_progress' , scannedRepos ) ;
4951
5052 try {
5153 const extension = await extensions . getExtension < CodeQLExtensionInterface | Record < string , never > > ( 'GitHub.vscode-codeql' ) ! . activate ( ) ;
@@ -68,7 +70,7 @@ describe('Variant Analysis Manager', async function() {
6870 try {
6971 await variantAnalysisManager . autoDownloadVariantAnalysisResult (
7072 scannedRepos [ 0 ] ,
71- variantAnalysis ,
73+ variantAnalysisApiResponse ,
7274 cancellationTokenSource . token
7375 ) ;
7476 } catch ( error : any ) {
@@ -105,7 +107,7 @@ describe('Variant Analysis Manager', async function() {
105107 it ( 'should not try to download the result' , async ( ) => {
106108 await variantAnalysisManager . autoDownloadVariantAnalysisResult (
107109 scannedRepos [ 0 ] ,
108- variantAnalysis ,
110+ variantAnalysisApiResponse ,
109111 cancellationTokenSource . token
110112 ) ;
111113
@@ -129,7 +131,7 @@ describe('Variant Analysis Manager', async function() {
129131
130132 await variantAnalysisManager . autoDownloadVariantAnalysisResult (
131133 scannedRepos [ 0 ] ,
132- variantAnalysis ,
134+ variantAnalysisApiResponse ,
133135 cancellationTokenSource . token
134136 ) ;
135137
@@ -139,7 +141,7 @@ describe('Variant Analysis Manager', async function() {
139141 it ( 'should fetch a repo task' , async ( ) => {
140142 await variantAnalysisManager . autoDownloadVariantAnalysisResult (
141143 scannedRepos [ 0 ] ,
142- variantAnalysis ,
144+ variantAnalysisApiResponse ,
143145 cancellationTokenSource . token
144146 ) ;
145147
@@ -149,7 +151,7 @@ describe('Variant Analysis Manager', async function() {
149151 it ( 'should fetch a repo result' , async ( ) => {
150152 await variantAnalysisManager . autoDownloadVariantAnalysisResult (
151153 scannedRepos [ 0 ] ,
152- variantAnalysis ,
154+ variantAnalysisApiResponse ,
153155 cancellationTokenSource . token
154156 ) ;
155157
@@ -161,9 +163,9 @@ describe('Variant Analysis Manager', async function() {
161163 it ( 'should pop download tasks off the queue' , async ( ) => {
162164 const getResultsSpy = sandbox . spy ( variantAnalysisManager , 'autoDownloadVariantAnalysisResult' ) ;
163165
164- await variantAnalysisManager . enqueueDownload ( scannedRepos [ 0 ] , variantAnalysis , cancellationTokenSource . token ) ;
165- await variantAnalysisManager . enqueueDownload ( scannedRepos [ 1 ] , variantAnalysis , cancellationTokenSource . token ) ;
166- await variantAnalysisManager . enqueueDownload ( scannedRepos [ 2 ] , variantAnalysis , cancellationTokenSource . token ) ;
166+ await variantAnalysisManager . enqueueDownload ( scannedRepos [ 0 ] , variantAnalysisApiResponse , cancellationTokenSource . token ) ;
167+ await variantAnalysisManager . enqueueDownload ( scannedRepos [ 1 ] , variantAnalysisApiResponse , cancellationTokenSource . token ) ;
168+ await variantAnalysisManager . enqueueDownload ( scannedRepos [ 2 ] , variantAnalysisApiResponse , cancellationTokenSource . token ) ;
167169
168170 expect ( variantAnalysisManager . downloadsQueueSize ( ) ) . to . equal ( 0 ) ;
169171 expect ( getResultsSpy ) . to . have . been . calledThrice ;
@@ -194,4 +196,77 @@ describe('Variant Analysis Manager', async function() {
194196 } ) ;
195197 } ) ;
196198 } ) ;
199+
200+ describe ( 'when rehydrating a query' , async ( ) => {
201+ let variantAnalysis : VariantAnalysis ;
202+ let variantAnalysisRemovedSpy : sinon . SinonSpy ;
203+ let monitorVariantAnalysisCommandSpy : sinon . SinonSpy ;
204+
205+ beforeEach ( ( ) => {
206+ variantAnalysis = createMockVariantAnalysis ( ) ;
207+
208+ variantAnalysisRemovedSpy = sinon . spy ( ) ;
209+ variantAnalysisManager . onVariantAnalysisRemoved ( variantAnalysisRemovedSpy ) ;
210+
211+ monitorVariantAnalysisCommandSpy = sinon . spy ( ) ;
212+ sandbox . stub ( commands , 'executeCommand' ) . callsFake ( monitorVariantAnalysisCommandSpy ) ;
213+ } ) ;
214+
215+ describe ( 'when variant analysis record doesn\'t exist' , async ( ) => {
216+ it ( 'should remove the variant analysis' , async ( ) => {
217+ await variantAnalysisManager . rehydrateVariantAnalysis ( variantAnalysis ) ;
218+ sinon . assert . calledOnce ( variantAnalysisRemovedSpy ) ;
219+ } ) ;
220+
221+ it ( 'should not trigger a monitoring command' , async ( ) => {
222+ await variantAnalysisManager . rehydrateVariantAnalysis ( variantAnalysis ) ;
223+ sinon . assert . notCalled ( monitorVariantAnalysisCommandSpy ) ;
224+ } ) ;
225+ } ) ;
226+
227+ describe ( 'when variant analysis record does exist' , async ( ) => {
228+ let variantAnalysisStorageLocation : string ;
229+
230+ beforeEach ( async ( ) => {
231+ variantAnalysisStorageLocation = variantAnalysisManager . getVariantAnalysisStorageLocation ( variantAnalysis . id ) ;
232+ await createTimestampFile ( variantAnalysisStorageLocation ) ;
233+ } ) ;
234+
235+ afterEach ( ( ) => {
236+ fs . rmSync ( variantAnalysisStorageLocation , { recursive : true } ) ;
237+ } ) ;
238+
239+ describe ( 'when the variant analysis is not complete' , async ( ) => {
240+ beforeEach ( ( ) => {
241+ sandbox . stub ( VariantAnalysisModule , 'isVariantAnalysisComplete' ) . resolves ( false ) ;
242+ } ) ;
243+
244+ it ( 'should not remove the variant analysis' , async ( ) => {
245+ await variantAnalysisManager . rehydrateVariantAnalysis ( variantAnalysis ) ;
246+ sinon . assert . notCalled ( variantAnalysisRemovedSpy ) ;
247+ } ) ;
248+
249+ it ( 'should trigger a monitoring command' , async ( ) => {
250+ await variantAnalysisManager . rehydrateVariantAnalysis ( variantAnalysis ) ;
251+ sinon . assert . calledWith ( monitorVariantAnalysisCommandSpy , 'codeQL.monitorVariantAnalysis' ) ;
252+ } ) ;
253+ } ) ;
254+
255+ describe ( 'when the variant analysis is complete' , async ( ) => {
256+ beforeEach ( ( ) => {
257+ sandbox . stub ( VariantAnalysisModule , 'isVariantAnalysisComplete' ) . resolves ( true ) ;
258+ } ) ;
259+
260+ it ( 'should not remove the variant analysis' , async ( ) => {
261+ await variantAnalysisManager . rehydrateVariantAnalysis ( variantAnalysis ) ;
262+ sinon . assert . notCalled ( variantAnalysisRemovedSpy ) ;
263+ } ) ;
264+
265+ it ( 'should not trigger a monitoring command' , async ( ) => {
266+ await variantAnalysisManager . rehydrateVariantAnalysis ( variantAnalysis ) ;
267+ sinon . assert . notCalled ( monitorVariantAnalysisCommandSpy ) ;
268+ } ) ;
269+ } ) ;
270+ } ) ;
271+ } ) ;
197272} ) ;
0 commit comments