@@ -23,6 +23,19 @@ import {
2323 resolveBinPathSync ,
2424} from '../../../../src/util/ecosystem/environment.mts'
2525
26+ const mockIsWin32 = vi . hoisted ( ( ) => vi . fn ( ( ) => false ) )
27+ const mockNodeRuntime = vi . hoisted ( ( ) => vi . fn ( ) )
28+ vi . mock (
29+ import ( '@socketsecurity/lib-stable/constants/platform' ) ,
30+ async importOriginal => ( {
31+ ...( await importOriginal ( ) ) ,
32+ isWin32 : mockIsWin32 ,
33+ } ) ,
34+ )
35+ vi . mock ( import ( '../../../../src/util/spawn/node-runtime.mts' ) , ( ) => ( {
36+ resolveNodeRuntime : mockNodeRuntime ,
37+ } ) )
38+
2639// Mock the dependencies.
2740const mockExistsSync = vi . hoisted ( ( ) => vi . fn ( ) )
2841const mockReadFileSync = vi . hoisted ( ( ) => vi . fn ( ) )
@@ -70,6 +83,7 @@ vi.mock(import('semver'), () => ({
7083describe ( 'package-environment' , ( ) => {
7184 beforeEach ( ( ) => {
7285 vi . clearAllMocks ( )
86+ mockIsWin32 . mockReturnValue ( false )
7387 // Default mock behavior for spawn to get package manager version.
7488 mockSpawn . mockResolvedValue ( { stdout : '10.0.0' , stderr : '' , code : 0 } )
7589 } )
@@ -201,6 +215,21 @@ describe('package-environment', () => {
201215 } )
202216
203217 describe ( 'getAgentVersion' , ( ) => {
218+ it ( 'runs Windows JavaScript shims with the trusted Node runtime' , async ( ) => {
219+ mockIsWin32 . mockReturnValue ( true )
220+ mockExistsSync . mockReturnValue ( true )
221+ mockReadFileSync . mockReturnValue ( 'node "/tools/npm-cli.js" "$@"' )
222+ mockNodeRuntime . mockResolvedValue ( {
223+ executable : '/trusted/node' ,
224+ environment : { PATH : '/trusted' } ,
225+ } )
226+ await getAgentVersion ( 'npm' , '/tools/npm' , '/project' )
227+ expect ( mockSpawn ) . toHaveBeenCalledWith (
228+ '/trusted/node' ,
229+ expect . arrayContaining ( [ '/tools/npm-cli.js' , '--version' ] ) ,
230+ { cwd : '/project' , env : { PATH : '/trusted' } } ,
231+ )
232+ } )
204233 it ( 'returns coerced semver version on successful spawn' , async ( ) => {
205234 mockSpawn . mockResolvedValue ( {
206235 stdout : '10.8.2' ,
0 commit comments