@@ -9,9 +9,10 @@ import { qTestingFramework } from './framework/framework'
99import sinon from 'sinon'
1010import { Messenger } from './framework/messenger'
1111import { FollowUpTypes } from 'aws-core-vscode/amazonq'
12- import { registerAuthHook , using , TestFolder , closeAllEditors } from 'aws-core-vscode/test'
12+ import { registerAuthHook , using , TestFolder , closeAllEditors , getTestWorkspaceFolder } from 'aws-core-vscode/test'
1313import { loginToIdC } from './utils/setup'
1414import { waitUntil , workspaceUtils } from 'aws-core-vscode/shared'
15+ import * as path from 'path'
1516
1617describe ( 'Amazon Q Test Generation' , function ( ) {
1718 let framework : qTestingFramework
@@ -20,11 +21,13 @@ describe('Amazon Q Test Generation', function () {
2021 const testFiles = [
2122 {
2223 language : 'python' ,
23- filePath : 'python3.7-image-sam-app/hello_world/app.py' ,
24+ filePath : 'testGenFolder/src/main/math.py' ,
25+ testFilePath : 'testGenFolder/src/test/test_math.py' ,
2426 } ,
2527 {
2628 language : 'java' ,
27- filePath : 'java17-gradle/HelloWorldFunction/src/main/java/helloworld/App.java' ,
29+ filePath : 'testGenFolder/src/main/Math.java' ,
30+ testFilePath : 'testGenFolder/src/test/MathTest.java' ,
2831 } ,
2932 ]
3033
@@ -33,14 +36,15 @@ describe('Amazon Q Test Generation', function () {
3336 // must be atleast one unsupported language here for testing
3437 {
3538 language : 'typescript' ,
36- filePath : 'ts-plain-sam-app /src/app .ts' ,
39+ filePath : 'testGenFolder /src/main/math .ts' ,
3740 } ,
3841 {
3942 language : 'javascript' ,
40- filePath : 'js-plain-sam-app /src/app .js' ,
43+ filePath : 'testGenFolder /src/main/math .js' ,
4144 } ,
4245 ]
4346
47+ // handles opening the file since /test must be called on an active file
4448 async function setupTestDocument ( filePath : string , language : string ) {
4549 const document = await waitUntil ( async ( ) => {
4650 const doc = await workspaceUtils . openTextDocument ( filePath )
@@ -57,7 +61,7 @@ describe('Amazon Q Test Generation', function () {
5761
5862 const activeEditor = vscode . window . activeTextEditor
5963 if ( ! activeEditor || activeEditor . document . uri . fsPath !== document . uri . fsPath ) {
60- assert . fail ( `Failed to make temp file active` )
64+ assert . fail ( `Failed to make ${ language } file active` )
6165 }
6266 }
6367
@@ -68,6 +72,15 @@ describe('Amazon Q Test Generation', function () {
6872 } )
6973 }
7074
75+ // clears test file to a blank file
76+ // not cleaning up test file may possibly cause bloat in CI since testFixtures does not get reset
77+ async function cleanupTestFile ( testFilePath : string ) {
78+ const workspaceFolder = getTestWorkspaceFolder ( )
79+ const absoluteTestFilePath = path . join ( workspaceFolder , testFilePath )
80+ const testFileUri = vscode . Uri . file ( absoluteTestFilePath )
81+ await vscode . workspace . fs . writeFile ( testFileUri , Buffer . from ( '' , 'utf-8' ) )
82+ }
83+
7184 before ( async function ( ) {
7285 await using( registerAuthHook ( 'amazonq-test-account' ) , async ( ) => {
7386 await loginToIdC ( )
@@ -112,7 +125,7 @@ describe('Amazon Q Test Generation', function () {
112125 } )
113126
114127 describe ( '/test entry' , ( ) => {
115- describe ( 'Unsupported language' , ( ) => {
128+ describe ( 'Unsupported language file ' , ( ) => {
116129 const { language, filePath } = unsupportedLanguages [ 0 ]
117130
118131 beforeEach ( async ( ) => {
@@ -134,13 +147,13 @@ describe('Amazon Q Test Generation', function () {
134147 } )
135148 } )
136149
137- describe ( 'External file' , async ( ) => {
150+ describe ( 'External file out of project ' , async ( ) => {
138151 let testFolder : TestFolder
139152 let fileName : string
140153
141154 beforeEach ( async ( ) => {
142155 testFolder = await TestFolder . create ( )
143- fileName = 'test .py'
156+ fileName = 'math .py'
144157 const filePath = await testFolder . write ( fileName , 'def add(a, b): return a + b' )
145158
146159 const document = await vscode . workspace . openTextDocument ( filePath )
@@ -162,10 +175,8 @@ describe('Amazon Q Test Generation', function () {
162175 } )
163176 } )
164177
165- for ( const { language, filePath } of testFiles ) {
166- // skipping for now since this test is flaky. passes locally, but only half the time in CI
167- // have tried retries for setupTestDocument, openTextDocument, and showTextDocument
168- describe . skip ( `${ language } file` , ( ) => {
178+ for ( const { language, filePath, testFilePath } of testFiles ) {
179+ describe ( `/test on ${ language } file` , ( ) => {
169180 beforeEach ( async ( ) => {
170181 await waitUntil ( async ( ) => await setupTestDocument ( filePath , language ) , { } )
171182
@@ -177,7 +188,7 @@ describe('Amazon Q Test Generation', function () {
177188 await tab . waitForChatFinishesLoading ( )
178189 } )
179190
180- describe ( 'View diff' , async ( ) => {
191+ describe ( 'View diff of test file ' , async ( ) => {
181192 it ( 'Clicks on view diff' , async ( ) => {
182193 const chatItems = tab . getChatItems ( )
183194 const viewDiffMessage = chatItems [ 5 ]
@@ -190,7 +201,14 @@ describe('Amazon Q Test Generation', function () {
190201 } )
191202 } )
192203
193- describe ( 'Accept code' , async ( ) => {
204+ describe ( 'Accept unit tests' , async ( ) => {
205+ afterEach ( async ( ) => {
206+ // this e2e test generates unit tests, so we want to clean them up after this test is done
207+ await waitUntil ( async ( ) => {
208+ await cleanupTestFile ( testFilePath )
209+ } , { } )
210+ } )
211+
194212 it ( 'Clicks on accept' , async ( ) => {
195213 await tab . waitForButtons ( [ FollowUpTypes . AcceptCode , FollowUpTypes . RejectCode ] )
196214 tab . clickButton ( FollowUpTypes . AcceptCode )
@@ -204,7 +222,7 @@ describe('Amazon Q Test Generation', function () {
204222 } )
205223 } )
206224
207- describe ( 'Reject code ' , async ( ) => {
225+ describe ( 'Reject unit tests ' , async ( ) => {
208226 it ( 'Clicks on reject' , async ( ) => {
209227 await tab . waitForButtons ( [ FollowUpTypes . AcceptCode , FollowUpTypes . RejectCode ] )
210228 tab . clickButton ( FollowUpTypes . RejectCode )
0 commit comments