@@ -459,3 +459,125 @@ t.test('workspaces', async t => {
459459 t . ok ( exists . isFile ( ) , 'bin ran, creating file inside workspace' )
460460 } )
461461} )
462+
463+ t . test ( 'npm init with init-private config set' , async t => {
464+ const { npm, prefix } = await mockNpm ( t , {
465+ config : { yes : true , 'init-private' : true } ,
466+ noLog : true ,
467+ } )
468+
469+ await npm . exec ( 'init' , [ ] )
470+
471+ const pkg = require ( resolve ( prefix , 'package.json' ) )
472+ t . equal ( pkg . private , true , 'should set private to true when init-private is set' )
473+ } )
474+
475+ t . test ( 'npm init does not set private by default' , async t => {
476+ const { npm, prefix } = await mockNpm ( t , {
477+ config : { yes : true } ,
478+ noLog : true ,
479+ } )
480+
481+ await npm . exec ( 'init' , [ ] )
482+
483+ const pkg = require ( resolve ( prefix , 'package.json' ) )
484+ t . strictSame ( pkg . private , undefined , 'should not set private by default' )
485+ } )
486+
487+ t . test ( 'user‑set init-private IS forwarded' , async t => {
488+ const { npm, prefix } = await mockNpm ( t , {
489+ config : { yes : true , 'init-private' : true } ,
490+ noLog : true ,
491+ } )
492+
493+ await npm . exec ( 'init' , [ ] )
494+
495+ const pkg = require ( resolve ( prefix , 'package.json' ) )
496+ t . strictSame ( pkg . private , true , 'should set private to true when init-private is set' )
497+ } )
498+
499+ t . test ( 'user‑set init-private IS forwarded when false' , async t => {
500+ const { npm, prefix } = await mockNpm ( t , {
501+ config : { yes : true , 'init-private' : false } ,
502+ noLog : true ,
503+ } )
504+
505+ await npm . exec ( 'init' , [ ] )
506+
507+ const pkg = require ( resolve ( prefix , 'package.json' ) )
508+ t . strictSame ( pkg . private , false , 'should set private to false when init-private is false' )
509+ } )
510+
511+ t . test ( 'No init-private is respected in workspaces' , async t => {
512+ const { npm, prefix } = await mockNpm ( t , {
513+ prefixDir : {
514+ 'package.json' : JSON . stringify ( {
515+ name : 'top-level' ,
516+ } ) ,
517+ } ,
518+ config : { workspace : 'a' , yes : true } ,
519+ noLog : true ,
520+ } )
521+
522+ await npm . exec ( 'init' , [ ] )
523+
524+ const pkg = require ( resolve ( prefix , 'a/package.json' ) )
525+ t . strictSame ( pkg . private , undefined , 'workspace package.json has no private field set' )
526+ } )
527+
528+ t . test ( 'init-private is respected in workspaces' , async t => {
529+ const { npm, prefix } = await mockNpm ( t , {
530+ prefixDir : {
531+ 'package.json' : JSON . stringify ( {
532+ name : 'top-level' ,
533+ } ) ,
534+ } ,
535+ config : { workspace : 'a' , yes : true , 'init-private' : true } ,
536+ noLog : true ,
537+ } )
538+
539+ await npm . exec ( 'init' , [ ] )
540+
541+ const pkg = require ( resolve ( prefix , 'a/package.json' ) )
542+ t . equal ( pkg . private , true , 'workspace package.json has private field set' )
543+ } )
544+
545+ t . test ( 'create‑initializer path: init-private flag is forwarded via args' , async t => {
546+ const calls = [ ]
547+ const libexecStub = async opts => calls . push ( opts )
548+
549+ const { npm } = await mockNpm ( t , {
550+ libnpmexec : libexecStub ,
551+ // user set the flag in their config
552+ config : { yes : true , 'init-private' : true } ,
553+ noLog : true ,
554+ } )
555+
556+ await npm . exec ( 'init' , [ 'create-bar' ] )
557+
558+ t . ok ( calls [ 0 ] . initPrivate , 'init-private included in options' )
559+
560+ // Also verify the test for when isDefault returns true
561+ calls . length = 0
562+ npm . config . isDefault = ( ) => true
563+
564+ await npm . exec ( 'init' , [ 'create-bar' ] )
565+
566+ t . equal ( calls [ 0 ] . initPrivate , undefined , 'init-private not included when using default' )
567+ } )
568+
569+ t . test ( 'create‑initializer path: false init-private is forwarded' , async t => {
570+ const calls = [ ]
571+ const libexecStub = async opts => calls . push ( opts )
572+
573+ const { npm } = await mockNpm ( t , {
574+ libnpmexec : libexecStub ,
575+ // explicitly set to false
576+ config : { yes : true , 'init-private' : false } ,
577+ noLog : true ,
578+ } )
579+
580+ await npm . exec ( 'init' , [ 'create-baz' ] )
581+
582+ t . equal ( calls [ 0 ] . initPrivate , false , 'false init-private value is properly forwarded' )
583+ } )
0 commit comments