@@ -252,6 +252,209 @@ test('exits with non-zero exit code for vulnerabilities at the `audit-level` fla
252252 } )
253253} )
254254
255+ test ( 'exits with zero exit code for vulnerabilities in devDependencies when running with production flag' , t => {
256+ const fixture = new Tacks ( new Dir ( {
257+ 'package.json' : new File ( {
258+ name : 'foo' ,
259+ version : '1.0.0' ,
260+ dependencies : {
261+ gooddep : '1.0.0'
262+ } ,
263+ devDependencies : {
264+ baddep : '1.0.0'
265+ }
266+ } )
267+ } ) )
268+ fixture . create ( testDir )
269+ return tmock ( t ) . then ( srv => {
270+ srv . filteringRequestBody ( req => 'ok' )
271+ srv . post ( '/-/npm/v1/security/audits/quick' , 'ok' ) . reply ( 200 , 'yeah' )
272+ srv . get ( '/gooddep' ) . twice ( ) . reply ( 200 , {
273+ name : 'gooddep' ,
274+ 'dist-tags' : {
275+ 'latest' : '1.2.3'
276+ } ,
277+ versions : {
278+ '1.0.0' : {
279+ name : 'gooddep' ,
280+ version : '1.0.0' ,
281+ _hasShrinkwrap : false ,
282+ dist : {
283+ shasum : 'deadbeef' ,
284+ tarball : common . registry + '/idk/-/idk-1.0.0.tgz'
285+ }
286+ } ,
287+ '1.2.3' : {
288+ name : 'gooddep' ,
289+ version : '1.2.3' ,
290+ _hasShrinkwrap : false ,
291+ dist : {
292+ shasum : 'deadbeef' ,
293+ tarball : common . registry + '/idk/-/idk-1.2.3.tgz'
294+ }
295+ }
296+ }
297+ } )
298+ srv . get ( '/baddep' ) . twice ( ) . reply ( 200 , {
299+ name : 'baddep' ,
300+ 'dist-tags' : {
301+ 'latest' : '1.2.3'
302+ } ,
303+ versions : {
304+ '1.0.0' : {
305+ name : 'baddep' ,
306+ version : '1.0.0' ,
307+ _hasShrinkwrap : false ,
308+ dist : {
309+ shasum : 'deadbeef' ,
310+ tarball : common . registry + '/idk/-/idk-1.0.0.tgz'
311+ }
312+ } ,
313+ '1.2.3' : {
314+ name : 'baddep' ,
315+ version : '1.2.3' ,
316+ _hasShrinkwrap : false ,
317+ dist : {
318+ shasum : 'deadbeef' ,
319+ tarball : common . registry + '/idk/-/idk-1.2.3.tgz'
320+ }
321+ }
322+ }
323+ } )
324+ return common . npm ( [
325+ 'install' ,
326+ '--audit' ,
327+ '--json' ,
328+ '--production' ,
329+ '--package-lock-only' ,
330+ '--registry' , common . registry ,
331+ '--cache' , path . join ( testDir , 'npm-cache' )
332+ ] , EXEC_OPTS ) . then ( ( [ code , stdout , stderr ] ) => {
333+ srv . filteringRequestBody ( req => 'ok' )
334+ srv . post ( '/-/npm/v1/security/audits' , 'ok' ) . reply ( 200 , {
335+ actions : [ ] ,
336+ metadata : {
337+ vulnerabilities : { }
338+ }
339+ } )
340+ return common . npm ( [
341+ 'audit' ,
342+ '--json' ,
343+ '--production' ,
344+ '--registry' , common . registry ,
345+ '--cache' , path . join ( testDir , 'npm-cache' )
346+ ] , EXEC_OPTS ) . then ( ( [ code , stdout , stderr ] ) => {
347+ t . equal ( code , 0 , 'exited OK' )
348+ } )
349+ } )
350+ } )
351+ } )
352+
353+ test ( 'exits with non-zero exit code for vulnerabilities in dependencies when running with production flag' , t => {
354+ const fixture = new Tacks ( new Dir ( {
355+ 'package.json' : new File ( {
356+ name : 'foo' ,
357+ version : '1.0.0' ,
358+ dependencies : {
359+ baddep : '1.0.0'
360+ } ,
361+ devDependencies : {
362+ gooddep : '1.0.0'
363+ }
364+ } )
365+ } ) )
366+ fixture . create ( testDir )
367+ return tmock ( t ) . then ( srv => {
368+ srv . filteringRequestBody ( req => 'ok' )
369+ srv . post ( '/-/npm/v1/security/audits/quick' , 'ok' ) . reply ( 200 , 'yeah' )
370+ srv . get ( '/baddep' ) . twice ( ) . reply ( 200 , {
371+ name : 'baddep' ,
372+ 'dist-tags' : {
373+ 'latest' : '1.2.3'
374+ } ,
375+ versions : {
376+ '1.0.0' : {
377+ name : 'baddep' ,
378+ version : '1.0.0' ,
379+ _hasShrinkwrap : false ,
380+ dist : {
381+ shasum : 'deadbeef' ,
382+ tarball : common . registry + '/idk/-/idk-1.0.0.tgz'
383+ }
384+ } ,
385+ '1.2.3' : {
386+ name : 'baddep' ,
387+ version : '1.2.3' ,
388+ _hasShrinkwrap : false ,
389+ dist : {
390+ shasum : 'deadbeef' ,
391+ tarball : common . registry + '/idk/-/idk-1.2.3.tgz'
392+ }
393+ }
394+ }
395+ } )
396+ srv . get ( '/gooddep' ) . twice ( ) . reply ( 200 , {
397+ name : 'gooddep' ,
398+ 'dist-tags' : {
399+ 'latest' : '1.2.3'
400+ } ,
401+ versions : {
402+ '1.0.0' : {
403+ name : 'gooddep' ,
404+ version : '1.0.0' ,
405+ _hasShrinkwrap : false ,
406+ dist : {
407+ shasum : 'deadbeef' ,
408+ tarball : common . registry + '/idk/-/idk-1.0.0.tgz'
409+ }
410+ } ,
411+ '1.2.3' : {
412+ name : 'gooddep' ,
413+ version : '1.2.3' ,
414+ _hasShrinkwrap : false ,
415+ dist : {
416+ shasum : 'deadbeef' ,
417+ tarball : common . registry + '/idk/-/idk-1.2.3.tgz'
418+ }
419+ }
420+ }
421+ } )
422+ return common . npm ( [
423+ 'install' ,
424+ '--audit' ,
425+ '--json' ,
426+ '--production' ,
427+ '--package-lock-only' ,
428+ '--registry' , common . registry ,
429+ '--cache' , path . join ( testDir , 'npm-cache' )
430+ ] , EXEC_OPTS ) . then ( ( [ code , stdout , stderr ] ) => {
431+ srv . filteringRequestBody ( req => 'ok' )
432+ srv . post ( '/-/npm/v1/security/audits' , 'ok' ) . reply ( 200 , {
433+ actions : [ {
434+ action : 'update' ,
435+ module : 'baddep' ,
436+ target : '1.2.3' ,
437+ resolves : [ { path : 'baddep' } ]
438+ } ] ,
439+ metadata : {
440+ vulnerabilities : {
441+ low : 1
442+ }
443+ }
444+ } )
445+ return common . npm ( [
446+ 'audit' ,
447+ '--json' ,
448+ '--production' ,
449+ '--registry' , common . registry ,
450+ '--cache' , path . join ( testDir , 'npm-cache' )
451+ ] , EXEC_OPTS ) . then ( ( [ code , stdout , stderr ] ) => {
452+ t . equal ( code , 1 , 'exited OK' )
453+ } )
454+ } )
455+ } )
456+ } )
457+
255458test ( 'cleanup' , t => {
256459 return rimraf ( testDir )
257460} )
0 commit comments