55
66import assert from 'assert'
77import * as vscode from 'vscode'
8+ import * as fs from 'fs-extra'
89import * as sinon from 'sinon'
10+ import { makeTemporaryToolkitFolder } from '../../../shared/filesystemUtilities'
911import * as model from '../../../codewhisperer/models/model'
1012import * as startTransformByQ from '../../../codewhisperer/commands/startTransformByQ'
1113import { HttpResponse } from 'aws-sdk'
1214import * as codeWhisperer from '../../../codewhisperer/client/codewhisperer'
1315import * as CodeWhispererConstants from '../../../codewhisperer/models/constants'
1416import { getTestWindow } from '../../shared/vscode/window'
17+ import AdmZip from 'adm-zip'
1518import { stopTransformByQMessage } from '../../../codewhisperer/models/constants'
1619import { convertToTimeString , convertDateToTimestamp } from '../../../shared/utilities/textUtilities'
1720import path from 'path'
@@ -26,6 +29,7 @@ import {
2629 pollTransformationJob ,
2730 getHeadersObj ,
2831 throwIfCancelled ,
32+ zipCode ,
2933} from '../../../codewhisperer/service/transformByQ/transformApiHandler'
3034import {
3135 validateOpenProjects ,
@@ -34,8 +38,15 @@ import {
3438import { TransformationCandidateProject } from '../../../codewhisperer/models/model'
3539
3640describe ( 'transformByQ' , function ( ) {
37- afterEach ( function ( ) {
41+ let tempDir : string
42+
43+ beforeEach ( async function ( ) {
44+ tempDir = await makeTemporaryToolkitFolder ( )
45+ } )
46+
47+ afterEach ( async function ( ) {
3848 sinon . restore ( )
49+ await fs . remove ( tempDir )
3950 } )
4051
4152 it ( 'WHEN converting short duration in milliseconds THEN converts correctly' , async function ( ) {
@@ -199,4 +210,54 @@ describe('transformByQ', function () {
199210 }
200211 assert . deepStrictEqual ( actual , expected )
201212 } )
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+ } )
202263} )
0 commit comments