1
1
import snykGraph from '@snyk/dep-graph' ;
2
- import { mkdtempSync as unMockedMkdtempSync , statSync as unMockedStatSync } from 'fs' ;
2
+ import {
3
+ copyFileSync as unMockedCopyFileSync ,
4
+ mkdtempSync as unMockedMkdtempSync ,
5
+ statSync as unMockedStatSync ,
6
+ } from 'fs' ;
3
7
import { buildDepTreeFromFiles } from 'snyk-nodejs-lockfile-parser' ;
4
8
import snyk from 'snyk-nodejs-plugin' ;
5
9
import { afterEach , beforeEach , describe , expect , it , Mock , vi } from 'vitest' ;
@@ -21,6 +25,9 @@ const tmpdir = '/tmpdir';
21
25
const statSync = unMockedStatSync as Mock ;
22
26
statSync . mockReturnValue ( { size : 1 } ) ;
23
27
28
+ const copyFileSync = unMockedCopyFileSync as Mock ;
29
+ copyFileSync . mockReturnValue ( undefined ) ;
30
+
24
31
const mkdtempSync = unMockedMkdtempSync as Mock ;
25
32
mkdtempSync . mockReturnValue ( tmpdir ) ;
26
33
@@ -348,4 +355,46 @@ describe('findChangedDependencies', () => {
348
355
}
349
356
) ;
350
357
} ) ;
358
+
359
+ it ( 'handles relative paths correctly when copying files to temp directory' , async ( ) => {
360
+ // Mock the repository root to be different from current working directory
361
+ getRepositoryRoot . mockResolvedValue ( '/root/subdir' ) ;
362
+
363
+ // Mock findFilesFromRepositoryRoot to return relative paths
364
+ findFilesFromRepositoryRoot . mockImplementation ( ( _ , ...patterns ) => {
365
+ const results : string [ ] = [ ] ;
366
+ for ( const pattern of patterns ) {
367
+ if ( pattern === 'package.json' ) {
368
+ results . push ( 'package.json' ) ;
369
+ } else if (
370
+ pattern === 'yarn.lock' ||
371
+ pattern === 'pnpm-lock.yaml' ||
372
+ pattern === 'package-lock.json'
373
+ ) {
374
+ results . push ( 'package-lock.json' ) ;
375
+ }
376
+ }
377
+ return Promise . resolve ( results ) ;
378
+ } ) ;
379
+
380
+ mockInspect ( /* HEAD */ [ '[email protected] ' ] , /* Baseline A */ [ '[email protected] ' ] ) ;
381
+ mockChangedPackagesGraph ( [ '[email protected] ' ] ) ;
382
+
383
+ const context = getContext ( {
384
+ git : {
385
+ packageMetadataChanges : [ { changedFiles : [ 'package.json' ] , commit : 'A' } ] ,
386
+ } ,
387
+ } ) ;
388
+
389
+ await expect ( findChangedDependencies ( context ) ) . resolves . toEqual ( [ 'react' ] ) ;
390
+
391
+ expect ( copyFileSync ) . toHaveBeenCalledWith (
392
+ '/root/subdir/package.json' ,
393
+ `${ tmpdir } /package.json`
394
+ ) ;
395
+ expect ( copyFileSync ) . toHaveBeenCalledWith (
396
+ '/root/subdir/package-lock.json' ,
397
+ `${ tmpdir } /package-lock.json`
398
+ ) ;
399
+ } ) ;
351
400
} ) ;
0 commit comments