1- import { describe , it , expect } from 'vitest' ;
1+ import { describe , it , expect , vi , beforeEach } from 'vitest' ;
22import InitCommand from '../../../src/commands/everywhere/init.js' ;
33import EverywhereBaseCommand from '../../../src/commands/everywhere/base.js' ;
44
@@ -25,3 +25,58 @@ describe('everywhere init', () => {
2525 } ) ;
2626 } ) ;
2727} ) ;
28+
29+ describe ( 'runNpmInstall' , ( ) => {
30+ beforeEach ( ( ) => {
31+ vi . resetModules ( ) ;
32+ } ) ;
33+
34+ describe ( 'when npm install succeeds' , ( ) => {
35+ it ( 'resolves the promise' , async ( ) => {
36+ const mockOn = vi . fn ( ) . mockImplementation ( ( event , cb ) => {
37+ if ( event === 'close' ) cb ( 0 ) ;
38+ } ) ;
39+ const mockSpawn = vi . fn ( ) . mockReturnValue ( { on : mockOn } ) ;
40+
41+ vi . doMock ( 'node:child_process' , ( ) => ( { spawn : mockSpawn } ) ) ;
42+
43+ const { runNpmInstall } = await import ( '../../../src/commands/everywhere/init.js' ) ;
44+
45+ await expect ( runNpmInstall ( '/fake/dir' ) ) . resolves . toBeUndefined ( ) ;
46+ } ) ;
47+ } ) ;
48+
49+ describe ( 'when npm install fails' , ( ) => {
50+ it ( 'rejects with the exit code in the error message' , async ( ) => {
51+ const mockOn = vi . fn ( ) . mockImplementation ( ( event , cb ) => {
52+ if ( event === 'close' ) cb ( 1 ) ;
53+ } ) ;
54+ const mockSpawn = vi . fn ( ) . mockReturnValue ( { on : mockOn } ) ;
55+
56+ vi . doMock ( 'node:child_process' , ( ) => ( { spawn : mockSpawn } ) ) ;
57+
58+ const { runNpmInstall } = await import ( '../../../src/commands/everywhere/init.js' ) ;
59+
60+ await expect ( runNpmInstall ( '/fake/dir' ) ) . rejects . toThrow (
61+ 'npm install failed with exit code 1'
62+ ) ;
63+ } ) ;
64+ } ) ;
65+
66+ describe ( 'when spawn emits an error' , ( ) => {
67+ it ( 'rejects with the error message' , async ( ) => {
68+ const mockOn = vi . fn ( ) . mockImplementation ( ( event , cb ) => {
69+ if ( event === 'error' ) cb ( new Error ( 'spawn ENOENT' ) ) ;
70+ } ) ;
71+ const mockSpawn = vi . fn ( ) . mockReturnValue ( { on : mockOn } ) ;
72+
73+ vi . doMock ( 'node:child_process' , ( ) => ( { spawn : mockSpawn } ) ) ;
74+
75+ const { runNpmInstall } = await import ( '../../../src/commands/everywhere/init.js' ) ;
76+
77+ await expect ( runNpmInstall ( '/fake/dir' ) ) . rejects . toThrow (
78+ 'Failed to start npm install: spawn ENOENT'
79+ ) ;
80+ } ) ;
81+ } ) ;
82+ } ) ;
0 commit comments