1var fs = require('graceful-fs') 2var path = require('path') 3 4var mkdirp = require('mkdirp') 5var mr = require('npm-registry-mock') 6var rimraf = require('rimraf') 7var test = require('tap').test 8 9var common = require('../common-tap.js') 10 11var pkg = require('path').join(__dirname, 'ignore-shrinkwrap') 12 13var EXEC_OPTS = { cwd: pkg } 14 15var customMocks = { 16 'get': { 17 '/package.js': [200, { ente: true }], 18 '/shrinkwrap.js': [200, { ente: true }] 19 } 20} 21 22var json = { 23 author: 'Rocko Artischocko', 24 name: 'ignore-shrinkwrap', 25 version: '0.0.0', 26 dependencies: { 27 'npm-test-ignore-shrinkwrap-file': 'http://localhost:' + common.port + '/package.js' 28 } 29} 30 31var shrinkwrap = { 32 name: 'ignore-shrinkwrap', 33 version: '0.0.0', 34 dependencies: { 35 'npm-test-ignore-shrinkwrap-file': { 36 version: '1.2.3', 37 from: 'http://localhost:' + common.port + '/shrinkwrap.js', 38 resolved: 'http://localhost:' + common.port + '/shrinkwrap.js', 39 dependencies: { 40 opener: { 41 version: '1.3.0', 42 from: 'opener@1.3.0' 43 } 44 } 45 } 46 } 47} 48 49test('setup', function (t) { 50 setup() 51 t.end() 52}) 53 54test('npm install --no-shrinkwrap', function (t) { 55 mr({ port: common.port, mocks: customMocks }, function (err, s) { 56 t.ifError(err, 'mock registry bootstrapped without issue') 57 s._server.on('request', function (req) { 58 switch (req.url) { 59 case '/shrinkwrap.js': 60 t.fail('npm-shrinkwrap.json used instead of package.json') 61 break 62 case '/package.js': 63 t.pass('package.json used') 64 } 65 }) 66 67 common.npm( 68 [ 69 '--registry', common.registry, 70 '--loglevel', 'silent', 71 'install', '--no-shrinkwrap' 72 ], 73 EXEC_OPTS, 74 function (err, code) { 75 t.ifError(err, 'npm ran without issue') 76 t.ok(code, "install isn't going to succeed") 77 s.close() 78 t.end() 79 } 80 ) 81 }) 82}) 83 84test('npm install (with shrinkwrap)', function (t) { 85 mr({ port: common.port, mocks: customMocks }, function (err, s) { 86 t.ifError(err, 'mock registry bootstrapped without issue') 87 s._server.on('request', function (req) { 88 switch (req.url) { 89 case '/shrinkwrap.js': 90 t.pass('shrinkwrap used') 91 break 92 case '/package.js': 93 t.fail('shrinkwrap ignored') 94 } 95 }) 96 97 common.npm( 98 [ 99 '--registry', common.registry, 100 '--loglevel', 'silent', 101 'install' 102 ], 103 EXEC_OPTS, 104 function (err, code) { 105 t.ifError(err, 'npm ran without issue') 106 t.ok(code, "install isn't going to succeed") 107 s.close() 108 t.end() 109 } 110 ) 111 }) 112}) 113 114test('cleanup', function (t) { 115 cleanup() 116 t.end() 117}) 118 119function cleanup () { 120 rimraf.sync(pkg) 121} 122 123function setup () { 124 cleanup() 125 mkdirp.sync(pkg) 126 fs.writeFileSync( 127 path.join(pkg, 'package.json'), 128 JSON.stringify(json, null, 2) 129 ) 130 fs.writeFileSync( 131 path.join(pkg, 'npm-shrinkwrap.json'), 132 JSON.stringify(shrinkwrap, null, 2) 133 ) 134 process.chdir(pkg) 135} 136