33 * SPDX-License-Identifier: Apache-2.0
44 */
55import sinon from 'sinon'
6- import { commands , languages } from 'vscode'
6+ import { CancellationToken , commands , languages , Position } from 'vscode'
77import assert from 'assert'
88import { LanguageClient } from 'vscode-languageclient'
9- import { InlineCompletionManager } from '../../../../../src/app/inline/completion'
9+ import { AmazonQInlineCompletionItemProvider , InlineCompletionManager } from '../../../../../src/app/inline/completion'
10+ import { RecommendationService } from '../../../../../src/app/inline/recommendationService'
11+ import { SessionManager } from '../../../../../src/app/inline/sessionManager'
12+ import { createMockDocument } from 'aws-core-vscode/test'
13+ import { ReferenceInlineProvider } from 'aws-core-vscode/codewhisperer'
1014
1115describe ( 'InlineCompletionManager' , ( ) => {
1216 let manager : InlineCompletionManager
@@ -19,6 +23,10 @@ describe('InlineCompletionManager', () => {
1923 let sandbox : sinon . SinonSandbox
2024 let getActiveSessionStub : sinon . SinonStub
2125 let getActiveRecommendationStub : sinon . SinonStub
26+ const mockDocument = createMockDocument ( )
27+ const mockPosition = { line : 0 , character : 0 } as Position
28+ const mockContext = { triggerKind : 1 , selectedCompletionInfo : undefined }
29+ const mockToken = { isCancellationRequested : false } as CancellationToken
2230
2331 beforeEach ( ( ) => {
2432 sandbox = sinon . createSandbox ( )
@@ -179,4 +187,100 @@ describe('InlineCompletionManager', () => {
179187 } )
180188 } )
181189 } )
190+
191+ describe ( 'AmazonQInlineCompletionItemProvider' , ( ) => {
192+ describe ( 'provideInlineCompletionItems' , ( ) => {
193+ const fakeReferences = [
194+ {
195+ message : '' ,
196+ licenseName : 'TEST_LICENSE' ,
197+ repository : 'TEST_REPO' ,
198+ recommendationContentSpan : {
199+ start : 0 ,
200+ end : 10 ,
201+ } ,
202+ } ,
203+ ]
204+ const mockSuggestions = [
205+ {
206+ itemId : 'test-item' ,
207+ insertText : 'test' ,
208+ references : fakeReferences ,
209+ } ,
210+ ]
211+ let mockSessionManager : SessionManager
212+ let provider : AmazonQInlineCompletionItemProvider
213+ let getAllRecommendationsStub : sinon . SinonStub
214+ let recommendationService : RecommendationService
215+ let setInlineReferenceStub : sinon . SinonStub
216+
217+ beforeEach ( ( ) => {
218+ recommendationService = new RecommendationService ( mockSessionManager )
219+ setInlineReferenceStub = sandbox . stub ( ReferenceInlineProvider . instance , 'setInlineReference' )
220+
221+ mockSessionManager = {
222+ getActiveSession : getActiveSessionStub ,
223+ getActiveRecommendation : getActiveRecommendationStub ,
224+ } as unknown as SessionManager
225+
226+ getActiveSessionStub . returns ( {
227+ sessionId : 'test-session' ,
228+ suggestions : mockSuggestions ,
229+ isRequestInProgress : false ,
230+ requestStartTime : Date . now ( ) ,
231+ } )
232+ getActiveRecommendationStub . returns ( mockSuggestions )
233+ getAllRecommendationsStub = sandbox . stub ( recommendationService , 'getAllRecommendations' )
234+ getAllRecommendationsStub . resolves ( )
235+ } ) ,
236+ it ( 'should call recommendation service to get new suggestions for new sessions' , async ( ) => {
237+ provider = new AmazonQInlineCompletionItemProvider (
238+ languageClient ,
239+ recommendationService ,
240+ mockSessionManager
241+ )
242+ const items = await provider . provideInlineCompletionItems (
243+ mockDocument ,
244+ mockPosition ,
245+ mockContext ,
246+ mockToken
247+ )
248+ assert ( getAllRecommendationsStub . calledOnce )
249+ assert . deepStrictEqual ( items , mockSuggestions )
250+ } ) ,
251+ it ( 'should not call recommendation service for existing sessions' , async ( ) => {
252+ provider = new AmazonQInlineCompletionItemProvider (
253+ languageClient ,
254+ recommendationService ,
255+ mockSessionManager ,
256+ false
257+ )
258+ const items = await provider . provideInlineCompletionItems (
259+ mockDocument ,
260+ mockPosition ,
261+ mockContext ,
262+ mockToken
263+ )
264+ assert ( getAllRecommendationsStub . notCalled )
265+ assert . deepStrictEqual ( items , mockSuggestions )
266+ } ) ,
267+ it ( 'should handle reference if there is any' , async ( ) => {
268+ provider = new AmazonQInlineCompletionItemProvider (
269+ languageClient ,
270+ recommendationService ,
271+ mockSessionManager ,
272+ false
273+ )
274+ await provider . provideInlineCompletionItems ( mockDocument , mockPosition , mockContext , mockToken )
275+ assert ( setInlineReferenceStub . calledOnce )
276+ assert (
277+ setInlineReferenceStub . calledWithExactly (
278+ mockPosition . line ,
279+ mockSuggestions [ 0 ] . insertText ,
280+ fakeReferences
281+ )
282+ )
283+ } )
284+ } )
285+ } )
182286} )
0 commit comments