@@ -10,55 +10,84 @@ import {
1010 ContentLengthError ,
1111 maxRepoSizeBytes ,
1212} from 'aws-core-vscode/amazonqFeatureDev'
13- import { assertTelemetry , createTestWorkspace } from 'aws-core-vscode/test'
13+ import { assertTelemetry , getWorkspaceFolder , TestFolder } from 'aws-core-vscode/test'
1414import { fs , AmazonqCreateUpload } from 'aws-core-vscode/shared'
15- import { Span } from 'aws-core-vscode/telemetry'
15+ import { MetricName , Span } from 'aws-core-vscode/telemetry'
1616import sinon from 'sinon'
17+ import { CodeWhispererSettings } from 'aws-core-vscode/codewhisperer'
18+
19+ const testDevfilePrepareRepo = async ( expectedRepoSize : number , devfileEnabled : boolean ) => {
20+ const folder = await TestFolder . create ( )
21+ await folder . write ( 'devfile.yaml' , 'test' )
22+ await folder . write ( 'file.md' , 'test content' )
23+ const workspace = getWorkspaceFolder ( folder . path )
24+ sinon
25+ . stub ( CodeWhispererSettings . instance , 'getDevCommandWorkspaceConfigurations' )
26+ . returns ( devfileEnabled ? { [ workspace . uri . fsPath ] : true } : { } )
27+
28+ await testPrepareRepoData ( workspace , expectedRepoSize )
29+ }
30+
31+ const testPrepareRepoData = async (
32+ workspace : vscode . WorkspaceFolder ,
33+ expectedRepoSize : number ,
34+ expectedTelemetryMetrics ?: Array < { metricName : MetricName ; value : any } >
35+ ) => {
36+ const telemetry = new TelemetryHelper ( )
37+ const result = await prepareRepoData ( [ workspace . uri . fsPath ] , [ workspace ] , telemetry , {
38+ record : ( ) => { } ,
39+ } as unknown as Span < AmazonqCreateUpload > )
40+
41+ assert . strictEqual ( Buffer . isBuffer ( result . zipFileBuffer ) , true )
42+ // checksum is not the same across different test executions because some unique random folder names are generated
43+ assert . strictEqual ( result . zipFileChecksum . length , 44 )
44+ assert . strictEqual ( telemetry . repositorySize , expectedRepoSize )
45+
46+ if ( expectedTelemetryMetrics ) {
47+ expectedTelemetryMetrics . forEach ( ( metric ) => {
48+ assertTelemetry ( metric . metricName , metric . value )
49+ } )
50+ }
51+ }
1752
1853describe ( 'file utils' , ( ) => {
1954 describe ( 'prepareRepoData' , function ( ) {
20- it ( 'returns files in the workspace as a zip' , async function ( ) {
21- // these variables are a manual selection of settings for the test in order to test the collectFiles function
22- const fileAmount = 2
23- const fileNamePrefix = 'file'
24- const fileNameSuffix = '.md'
25- const fileContent = 'test content'
55+ afterEach ( ( ) => {
56+ sinon . restore ( )
57+ } )
2658
27- const workspace = await createTestWorkspace ( fileAmount , { fileNamePrefix, fileContent, fileNameSuffix } )
59+ it ( 'returns files in the workspace as a zip' , async function ( ) {
60+ const folder = await TestFolder . create ( )
61+ await folder . write ( 'file1.md' , 'test content' )
62+ await folder . write ( 'file2.md' , 'test content' )
63+ const workspace = getWorkspaceFolder ( folder . path )
2864
29- const telemetry = new TelemetryHelper ( )
30- const result = await prepareRepoData ( [ workspace . uri . fsPath ] , [ workspace ] , telemetry , {
31- record : ( ) => { } ,
32- } as unknown as Span < AmazonqCreateUpload > )
33- assert . strictEqual ( Buffer . isBuffer ( result . zipFileBuffer ) , true )
34- // checksum is not the same across different test executions because some unique random folder names are generated
35- assert . strictEqual ( result . zipFileChecksum . length , 44 )
36- assert . strictEqual ( telemetry . repositorySize , 24 )
65+ await testPrepareRepoData ( workspace , 24 )
3766 } )
3867
3968 it ( 'prepareRepoData ignores denied file extensions' , async function ( ) {
40- // these variables are a manual selection of settings for the test in order to test the collectFiles function
41- const fileAmount = 1
42- const fileNamePrefix = 'file'
43- const fileNameSuffix = '.mp4'
44- const fileContent = 'test content'
69+ const folder = await TestFolder . create ( )
70+ await folder . write ( 'file.mp4' , 'test content' )
71+ const workspace = getWorkspaceFolder ( folder . path )
4572
46- const workspace = await createTestWorkspace ( fileAmount , { fileNamePrefix, fileContent, fileNameSuffix } )
47- const telemetry = new TelemetryHelper ( )
48- const result = await prepareRepoData ( [ workspace . uri . fsPath ] , [ workspace ] , telemetry , {
49- record : ( ) => { } ,
50- } as unknown as Span < AmazonqCreateUpload > )
73+ await testPrepareRepoData ( workspace , 0 , [
74+ { metricName : 'amazonq_bundleExtensionIgnored' , value : { filenameExt : 'mp4' , count : 1 } } ,
75+ ] )
76+ } )
77+
78+ it ( 'should ignore devfile.yaml when setting is disabled' , async function ( ) {
79+ await testDevfilePrepareRepo ( 12 , false )
80+ } )
5181
52- assert . strictEqual ( Buffer . isBuffer ( result . zipFileBuffer ) , true )
53- // checksum is not the same across different test executions because some unique random folder names are generated
54- assert . strictEqual ( result . zipFileChecksum . length , 44 )
55- assert . strictEqual ( telemetry . repositorySize , 0 )
56- assertTelemetry ( 'amazonq_bundleExtensionIgnored' , { filenameExt : 'mp4' , count : 1 } )
82+ it ( 'should include devfile.yaml when setting is enabled' , async function ( ) {
83+ await testDevfilePrepareRepo ( 16 , true )
5784 } )
5885
5986 // Test the logic that allows the customer to modify root source folder
6087 it ( 'prepareRepoData throws a ContentLengthError code when repo is too big' , async function ( ) {
61- const workspace = await createTestWorkspace ( 1 , { } )
88+ const folder = await TestFolder . create ( )
89+ await folder . write ( 'file.md' , 'test content' )
90+ const workspace = getWorkspaceFolder ( folder . path )
6291 const telemetry = new TelemetryHelper ( )
6392
6493 sinon . stub ( fs , 'stat' ) . resolves ( { size : 2 * maxRepoSizeBytes } as vscode . FileStat )
0 commit comments