@@ -61,6 +61,21 @@ jest.unstable_mockModule('node:path', () => ({
61
61
resolve : jest . fn ( ) ,
62
62
dirname : jest . fn ( ) ,
63
63
sep : '/' ,
64
+ relative : jest . fn ( ) . mockImplementation ( ( from , to ) => {
65
+ const fromParts = from . split ( '/' ) ;
66
+ const toParts = to . split ( '/' ) ;
67
+
68
+ let commonLength = 0 ;
69
+ for ( let i = 0 ; i < Math . min ( fromParts . length , toParts . length ) ; i ++ ) {
70
+ if ( fromParts [ i ] !== toParts [ i ] ) break ;
71
+ commonLength ++ ;
72
+ }
73
+
74
+ const up = fromParts . slice ( commonLength ) . map ( ( ) => '..' ) ;
75
+ const down = toParts . slice ( commonLength ) ;
76
+
77
+ return [ ...up , ...down ] . join ( '/' ) || '.' ;
78
+ } ) ,
64
79
} ,
65
80
} ) ) ;
66
81
@@ -1075,6 +1090,31 @@ describe('deploy.js', () => {
1075
1090
) ;
1076
1091
} ) ;
1077
1092
1093
+ it ( 'should return the ZkProgram when found in nested folders' , async ( ) => {
1094
+ const projectRoot = '/some/path/' ;
1095
+ const zkProgramNameArg = 'myZkProgram' ;
1096
+ const zkProgramFile = 'proofs/file1.js' ;
1097
+ const zkProgramMock = { name : 'myZkProgram' } ;
1098
+ glob . mockResolvedValue ( [ '/some/path/file1.js' ] ) ;
1099
+ fs . readFileSync . mockReturnValue (
1100
+ `
1101
+ const myVar = ZkProgram({
1102
+ name: 'myZkProgram'
1103
+ });
1104
+ `
1105
+ ) ;
1106
+ jest . spyOn ( path , 'basename' ) . mockReturnValue ( 'proofs/file1.js' ) ;
1107
+ dynamicImport . mockResolvedValue ( { myVar : zkProgramMock } ) ;
1108
+ const { getZkProgram } = await import ( './deploy.js' ) ;
1109
+
1110
+ const result = await getZkProgram ( projectRoot , zkProgramNameArg ) ;
1111
+
1112
+ expect ( result ) . toBe ( zkProgramMock ) ;
1113
+ expect ( dynamicImport ) . toHaveBeenCalledWith (
1114
+ `${ projectRoot } /build/src/${ zkProgramFile } `
1115
+ ) ;
1116
+ } ) ;
1117
+
1078
1118
it ( 'should handle Windows paths correctly' , async ( ) => {
1079
1119
const originalPlatform = process . platform ;
1080
1120
try {
0 commit comments