5
5
6
6
import assert from 'assert'
7
7
import * as vscode from 'vscode'
8
+ import * as fs from 'fs-extra'
8
9
import * as sinon from 'sinon'
10
+ import { makeTemporaryToolkitFolder } from '../../../shared/filesystemUtilities'
9
11
import * as model from '../../../codewhisperer/models/model'
10
12
import * as startTransformByQ from '../../../codewhisperer/commands/startTransformByQ'
11
13
import { HttpResponse } from 'aws-sdk'
12
14
import * as codeWhisperer from '../../../codewhisperer/client/codewhisperer'
13
15
import * as CodeWhispererConstants from '../../../codewhisperer/models/constants'
14
16
import { getTestWindow } from '../../shared/vscode/window'
17
+ import AdmZip from 'adm-zip'
15
18
import { stopTransformByQMessage } from '../../../codewhisperer/models/constants'
16
19
import { convertToTimeString , convertDateToTimestamp } from '../../../shared/utilities/textUtilities'
17
20
import path from 'path'
@@ -26,6 +29,7 @@ import {
26
29
pollTransformationJob ,
27
30
getHeadersObj ,
28
31
throwIfCancelled ,
32
+ zipCode ,
29
33
} from '../../../codewhisperer/service/transformByQ/transformApiHandler'
30
34
import {
31
35
validateOpenProjects ,
@@ -34,8 +38,15 @@ import {
34
38
import { TransformationCandidateProject } from '../../../codewhisperer/models/model'
35
39
36
40
describe ( 'transformByQ' , function ( ) {
37
- afterEach ( function ( ) {
41
+ let tempDir : string
42
+
43
+ beforeEach ( async function ( ) {
44
+ tempDir = await makeTemporaryToolkitFolder ( )
45
+ } )
46
+
47
+ afterEach ( async function ( ) {
38
48
sinon . restore ( )
49
+ await fs . remove ( tempDir )
39
50
} )
40
51
41
52
it ( 'WHEN converting short duration in milliseconds THEN converts correctly' , async function ( ) {
@@ -199,4 +210,54 @@ describe('transformByQ', function () {
199
210
}
200
211
assert . deepStrictEqual ( actual , expected )
201
212
} )
213
+
214
+ it ( `WHEN zip created THEN dependencies contains no .sha1 or .repositories files` , async function ( ) {
215
+ const m2Folders = [
216
+ 'com/groupid1/artifactid1/version1' ,
217
+ 'com/groupid1/artifactid1/version2' ,
218
+ 'com/groupid1/artifactid2/version1' ,
219
+ 'com/groupid2/artifactid1/version1' ,
220
+ 'com/groupid2/artifactid1/version2' ,
221
+ ]
222
+ // List of files that exist in m2 artifact directory
223
+ const filesToAdd = [
224
+ '_remote.repositories' ,
225
+ 'test-0.0.1-20240315.145420-18.pom' ,
226
+ 'test-0.0.1-20240315.145420-18.pom.sha1' ,
227
+ 'test-0.0.1-SNAPSHOT.pom' ,
228
+ 'maven-metadata-test-repo.xml' ,
229
+ 'maven-metadata-test-repo.xml.sha1' ,
230
+ 'resolver-status.properties' ,
231
+ ]
232
+ const expectedFilesAfterClean = [
233
+ 'test-0.0.1-20240315.145420-18.pom' ,
234
+ 'test-0.0.1-SNAPSHOT.pom' ,
235
+ 'maven-metadata-test-repo.xml' ,
236
+ 'resolver-status.properties' ,
237
+ ]
238
+
239
+ m2Folders . forEach ( folder => {
240
+ const folderPath = path . join ( tempDir , folder )
241
+ fs . mkdirSync ( folderPath , { recursive : true } )
242
+ filesToAdd . forEach ( file => {
243
+ fs . writeFileSync ( path . join ( folderPath , file ) , 'sample content for the test file' )
244
+ } )
245
+ } )
246
+
247
+ const tempFileName = `testfile-${ Date . now ( ) } .zip`
248
+ model . transformByQState . setProjectPath ( tempDir )
249
+ return zipCode ( {
250
+ path : tempDir ,
251
+ name : tempFileName ,
252
+ } ) . then ( zipFile => {
253
+ const zip = new AdmZip ( zipFile )
254
+ const dependenciesToUpload = zip . getEntries ( ) . filter ( entry => entry . entryName . startsWith ( 'dependencies' ) )
255
+ // Each dependency version folder contains each expected file, thus we multiply
256
+ const expectedNumberOfDependencyFiles = m2Folders . length * expectedFilesAfterClean . length
257
+ assert . strictEqual ( expectedNumberOfDependencyFiles , dependenciesToUpload . length )
258
+ dependenciesToUpload . forEach ( dependency => {
259
+ assert ( expectedFilesAfterClean . includes ( dependency . name ) )
260
+ } )
261
+ } )
262
+ } )
202
263
} )
0 commit comments