@@ -270,14 +270,45 @@ const packument = (nv, opts) => {
270
270
} ,
271
271
} ,
272
272
} ,
273
+ // this is a packaged named error which will conflict with
274
+ // the error key in json output
275
+ error : {
276
+ _id : 'error' ,
277
+ name : 'error' ,
278
+ 'dist-tags' : {
279
+ latest : '1.0.0' ,
280
+ } ,
281
+ versions : {
282
+ '1.0.0' : {
283
+ name : 'error' ,
284
+ version : '1.0.0' ,
285
+ dist : {
286
+ shasum : '123' ,
287
+ tarball : 'http://hm.error.com/1.0.0.tgz' ,
288
+ fileCount : 1 ,
289
+ } ,
290
+ } ,
291
+ } ,
292
+ } ,
273
293
}
294
+
274
295
if ( nv . type === 'git' ) {
275
296
return mocks [ nv . hosted . project ]
276
297
}
298
+
277
299
if ( nv . raw === './blue' ) {
278
300
return mocks . blue
279
301
}
280
- return mocks [ nv . name ]
302
+
303
+ if ( mocks [ nv . name ] ) {
304
+ return mocks [ nv . name ]
305
+ }
306
+
307
+ if ( nv . name === 'unknown-error' ) {
308
+ throw new Error ( 'Unknown error' )
309
+ }
310
+
311
+ throw Object . assign ( new Error ( '404' ) , { code : 'E404' } )
281
312
}
282
313
283
314
const loadMockNpm = async function ( t , opts = { } ) {
@@ -543,6 +574,33 @@ t.test('workspaces', async t => {
543
574
} ,
544
575
}
545
576
577
+ const prefixDir404 = {
578
+ 'test-workspace-b' : {
579
+ 'package.json' : JSON . stringify ( {
580
+ name : 'missing-package' ,
581
+ version : '1.2.3' ,
582
+ } ) ,
583
+ } ,
584
+ }
585
+
586
+ const prefixDirError = {
587
+ 'test-workspace-b' : {
588
+ 'package.json' : JSON . stringify ( {
589
+ name : 'unknown-error' ,
590
+ version : '1.2.3' ,
591
+ } ) ,
592
+ } ,
593
+ }
594
+
595
+ const prefixPackageNamedError = {
596
+ 'test-workspace-a' : {
597
+ 'package.json' : JSON . stringify ( {
598
+ name : 'error' ,
599
+ version : '1.2.3' ,
600
+ } ) ,
601
+ } ,
602
+ }
603
+
546
604
t . test ( 'all workspaces' , async t => {
547
605
const { view, joinedOutput } = await loadMockNpm ( t , {
548
606
prefixDir,
@@ -624,6 +682,56 @@ t.test('workspaces', async t => {
624
682
t . matchSnapshot ( joinedOutput ( ) )
625
683
t . matchSnapshot ( logs . warn , 'should have warning of ignoring workspaces' )
626
684
} )
685
+
686
+ t . test ( '404 workspaces' , async t => {
687
+ t . test ( 'basic' , async t => {
688
+ const { view, joinedFullOutput } = await loadMockNpm ( t , {
689
+ prefixDir : { ...prefixDir , ...prefixDir404 } ,
690
+ config : { workspaces : true , loglevel : 'error' } ,
691
+ } )
692
+ await view . exec ( [ ] )
693
+ t . matchSnapshot ( joinedFullOutput ( ) )
694
+ t . equal ( process . exitCode , 1 )
695
+ } )
696
+
697
+ t . test ( 'json' , async t => {
698
+ const { view, joinedFullOutput } = await loadMockNpm ( t , {
699
+ prefixDir : { ...prefixDir , ...prefixDir404 } ,
700
+ config : { workspaces : true , json : true , loglevel : 'error' } ,
701
+ } )
702
+ await view . exec ( [ ] )
703
+ t . matchSnapshot ( joinedFullOutput ( ) )
704
+ t . equal ( process . exitCode , 1 )
705
+ } )
706
+
707
+ t . test ( 'json with package named error' , async t => {
708
+ const { view, joinedFullOutput } = await loadMockNpm ( t , {
709
+ prefixDir : { ...prefixDir , ...prefixDir404 , ...prefixPackageNamedError } ,
710
+ config : { workspaces : true , json : true , loglevel : 'warn' } ,
711
+ } )
712
+ await view . exec ( [ ] )
713
+ t . matchSnapshot ( joinedFullOutput ( ) )
714
+ t . equal ( process . exitCode , 1 )
715
+ } )
716
+
717
+ t . test ( 'non-404 error rejects' , async t => {
718
+ const { view, joinedFullOutput } = await loadMockNpm ( t , {
719
+ prefixDir : { ...prefixDir , ...prefixDirError } ,
720
+ config : { workspaces : true , loglevel : 'error' } ,
721
+ } )
722
+ await t . rejects ( view . exec ( [ ] ) )
723
+ t . matchSnapshot ( joinedFullOutput ( ) )
724
+ } )
725
+
726
+ t . test ( 'non-404 error rejects with single arg' , async t => {
727
+ const { view, joinedFullOutput } = await loadMockNpm ( t , {
728
+ prefixDir : { ...prefixDir , ...prefixDirError } ,
729
+ config : { workspaces : true , loglevel : 'error' } ,
730
+ } )
731
+ await t . rejects ( view . exec ( [ '.' , 'version' ] ) )
732
+ t . matchSnapshot ( joinedFullOutput ( ) )
733
+ } )
734
+ } )
627
735
} )
628
736
629
737
t . test ( 'completion' , async t => {
0 commit comments