@@ -15,6 +15,7 @@ import { CursorUpdateManager } from '../../../../../src/app/inline/cursorUpdateM
1515import { CodeWhispererStatusBarManager } from 'aws-core-vscode/codewhisperer'
1616import { globals } from 'aws-core-vscode/shared'
1717import { DocumentEventListener } from '../../../../../src/app/inline/documentEventListener'
18+ import { EditSuggestionState } from '../../../../../src/app/inline/editSuggestionState'
1819
1920const completionApi = 'aws/textDocument/inlineCompletionWithReferences'
2021const editApi = 'aws/textDocument/editCompletion'
@@ -325,5 +326,77 @@ describe('RecommendationService', () => {
325326 console . error = originalConsoleError
326327 }
327328 } )
329+
330+ it ( 'should not make completion request when edit suggestion is active' , async ( ) => {
331+ // Mock EditSuggestionState to return true (edit suggestion is active)
332+ const isEditSuggestionActiveStub = sandbox . stub ( EditSuggestionState , 'isEditSuggestionActive' ) . returns ( true )
333+
334+ const mockResult = {
335+ sessionId : 'test-session' ,
336+ items : [ mockInlineCompletionItemOne ] ,
337+ partialResultToken : undefined ,
338+ }
339+
340+ sendRequestStub . resolves ( mockResult )
341+
342+ await service . getAllRecommendations (
343+ languageClient ,
344+ mockDocument ,
345+ mockPosition ,
346+ mockContext ,
347+ mockToken ,
348+ true ,
349+ mockDocumentEventListener
350+ )
351+
352+ // Verify sendRequest was called only for edit API, not completion API
353+ const cs = sendRequestStub . getCalls ( )
354+ const completionCalls = cs . filter ( ( c ) => c . firstArg === completionApi )
355+ const editCalls = cs . filter ( ( c ) => c . firstArg === editApi )
356+
357+ assert . strictEqual ( cs . length , 1 ) // Only edit call
358+ assert . strictEqual ( completionCalls . length , 0 ) // No completion calls
359+ assert . strictEqual ( editCalls . length , 1 ) // One edit call
360+
361+ // Verify the stub was called
362+ sinon . assert . calledOnce ( isEditSuggestionActiveStub )
363+ } )
364+
365+ it ( 'should make completion request when edit suggestion is not active' , async ( ) => {
366+ // Mock EditSuggestionState to return false (no edit suggestion active)
367+ const isEditSuggestionActiveStub = sandbox
368+ . stub ( EditSuggestionState , 'isEditSuggestionActive' )
369+ . returns ( false )
370+
371+ const mockResult = {
372+ sessionId : 'test-session' ,
373+ items : [ mockInlineCompletionItemOne ] ,
374+ partialResultToken : undefined ,
375+ }
376+
377+ sendRequestStub . resolves ( mockResult )
378+
379+ await service . getAllRecommendations (
380+ languageClient ,
381+ mockDocument ,
382+ mockPosition ,
383+ mockContext ,
384+ mockToken ,
385+ true ,
386+ mockDocumentEventListener
387+ )
388+
389+ // Verify sendRequest was called for both APIs
390+ const cs = sendRequestStub . getCalls ( )
391+ const completionCalls = cs . filter ( ( c ) => c . firstArg === completionApi )
392+ const editCalls = cs . filter ( ( c ) => c . firstArg === editApi )
393+
394+ assert . strictEqual ( cs . length , 2 ) // Both calls
395+ assert . strictEqual ( completionCalls . length , 1 ) // One completion call
396+ assert . strictEqual ( editCalls . length , 1 ) // One edit call
397+
398+ // Verify the stub was called
399+ sinon . assert . calledOnce ( isEditSuggestionActiveStub )
400+ } )
328401 } )
329402} )
0 commit comments