3
3
* SPDX-License-Identifier: Apache-2.0
4
4
*/
5
5
6
+ import * as vscode from 'vscode'
7
+ import * as assert from 'assert'
8
+
6
9
import sinon from 'sinon'
7
- import { createMessenger , createSession } from '../utils'
8
- import { Session } from '../../../amazonqFeatureDev/session/session'
10
+
11
+ import {
12
+ ControllerSetup ,
13
+ createController ,
14
+ createMessenger ,
15
+ createSession ,
16
+ generateVirtualMemoryUri ,
17
+ sessionRegisterProvider ,
18
+ sessionWriteFile ,
19
+ } from '../utils'
20
+ import { CurrentWsFolders } from '../../../amazonqFeatureDev/types'
21
+ import { CodeGenState } from '../../../amazonqFeatureDev/session/sessionState'
22
+ import { FeatureDevClient } from '../../../amazonqFeatureDev/client/featureDev'
23
+ import path from 'path'
9
24
import { assertTelemetry } from '../../testUtil'
25
+ import { Messenger } from '../../../amazonqFeatureDev/controllers/chat/messenger/messenger'
26
+ import { FileSystemCommon } from '../../../srcShared/fs'
10
27
11
28
describe ( 'session' , ( ) => {
12
29
const conversationID = '12345'
30
+ let messenger : Messenger
13
31
14
- let session : Session
15
-
16
- beforeEach ( async ( ) => {
17
- const messenger = createMessenger ( )
18
- session = await createSession ( { messenger, conversationID } )
32
+ beforeEach ( ( ) => {
33
+ messenger = createMessenger ( )
19
34
} )
20
35
21
36
afterEach ( ( ) => {
@@ -24,11 +39,85 @@ describe('session', () => {
24
39
25
40
describe ( 'preloader' , ( ) => {
26
41
it ( 'emits start chat telemetry' , async ( ) => {
42
+ const session = await createSession ( { messenger, conversationID } )
43
+
27
44
await session . preloader ( 'implement twosum in typescript' )
28
45
29
46
assertTelemetry ( 'amazonq_startConversationInvoke' , {
30
47
amazonqConversationId : conversationID ,
31
48
} )
32
49
} )
33
50
} )
51
+ describe ( 'insertChanges' , async ( ) => {
52
+ afterEach ( ( ) => {
53
+ sinon . restore ( )
54
+ } )
55
+
56
+ let workspaceFolderUriFsPath : string
57
+ const notRejectedFileName = 'notRejectedFile.js'
58
+ const notRejectedFileContent = 'notrejectedFileContent'
59
+ let uri : vscode . Uri
60
+ let encodedContent : Uint8Array
61
+
62
+ async function createCodeGenState ( ) {
63
+ const controllerSetup : ControllerSetup = await createController ( )
64
+
65
+ const uploadID = '789'
66
+ const tabID = '123'
67
+ const testApproach = 'test-approach'
68
+ const workspaceFolders = [ controllerSetup . workspaceFolder ] as CurrentWsFolders
69
+ workspaceFolderUriFsPath = controllerSetup . workspaceFolder . uri . fsPath
70
+ uri = generateVirtualMemoryUri ( uploadID , notRejectedFileName )
71
+
72
+ const testConfig = {
73
+ conversationId : conversationID ,
74
+ proxyClient : { } as unknown as FeatureDevClient ,
75
+ sourceRoots : [ '' ] ,
76
+ uploadId : uploadID ,
77
+ workspaceFolders,
78
+ }
79
+
80
+ const codeGenState = new CodeGenState (
81
+ testConfig ,
82
+ testApproach ,
83
+ [
84
+ {
85
+ zipFilePath : notRejectedFileName ,
86
+ relativePath : notRejectedFileName ,
87
+ fileContent : notRejectedFileContent ,
88
+ rejected : false ,
89
+ virtualMemoryUri : uri ,
90
+ workspaceFolder : controllerSetup . workspaceFolder ,
91
+ } ,
92
+ {
93
+ zipFilePath : 'rejectedFile.js' ,
94
+ relativePath : 'rejectedFile.js' ,
95
+ fileContent : 'rejectedFileContent' ,
96
+ rejected : true ,
97
+ virtualMemoryUri : generateVirtualMemoryUri ( uploadID , 'rejectedFile.js' ) ,
98
+ workspaceFolder : controllerSetup . workspaceFolder ,
99
+ } ,
100
+ ] ,
101
+ [ ] ,
102
+ [ ] ,
103
+ tabID ,
104
+ 0
105
+ )
106
+ const session = await createSession ( { messenger, sessionState : codeGenState , conversationID } )
107
+ encodedContent = new TextEncoder ( ) . encode ( notRejectedFileContent )
108
+ await sessionRegisterProvider ( session , uri , encodedContent )
109
+ return session
110
+ }
111
+ it ( 'only insert non rejected files' , async ( ) => {
112
+ const fsSpyWriteFile = sinon . spy ( FileSystemCommon . instance , 'writeFile' )
113
+ const session = await createCodeGenState ( )
114
+ await sessionWriteFile ( session , uri , encodedContent )
115
+ await session . insertChanges ( )
116
+
117
+ const absolutePath = path . join ( workspaceFolderUriFsPath , notRejectedFileName )
118
+
119
+ assert . ok ( fsSpyWriteFile . calledOnce )
120
+ assert . ok ( fsSpyWriteFile . calledWith ( absolutePath , notRejectedFileContent ) )
121
+ } )
122
+ } )
34
123
} )
0 commit comments