1var fs = require('fs') 2var path = require('path') 3 4var mr = require('npm-registry-mock') 5var test = require('tap').test 6 7var common = require('../common-tap.js') 8var npm = require('../../') 9 10var pkg = common.pkg 11 12test('shrinkwrap adds optional property when optional dependency', function (t) { 13 t.plan(1) 14 15 mr({port: common.port}, function (er, s) { 16 t.parent.teardown(() => s.close()) 17 setup(function (err) { 18 if (err) { 19 throw err 20 } 21 22 // Install with the optional dependency 23 npm.install('.', function (err) { 24 if (err) { 25 throw err 26 } 27 28 writePackage() 29 30 npm.commands.shrinkwrap([], true, function (err, results) { 31 if (err) { 32 throw err 33 } 34 35 t.deepEqual(results.dependencies, desired.dependencies) 36 s.close() 37 t.end() 38 }) 39 }) 40 }) 41 }) 42}) 43 44var desired = { 45 name: 'npm-test-shrinkwrap-optional-dependency', 46 version: '0.0.0', 47 dependencies: { 48 'test-package': { 49 version: '0.0.0', 50 resolved: common.registry + '/test-package/-/test-package-0.0.0.tgz', 51 integrity: 'sha1-sNMrbEXCWcV4uiADdisgUTG9+9E=' 52 }, 53 'underscore': { 54 version: '1.3.3', 55 resolved: 'http://localhost:' + common.port + '/underscore/-/underscore-1.3.3.tgz', 56 optional: true, 57 integrity: 'sha1-R6xTaD2vgyv6lS4XdEF9pHgXrkI=' 58 } 59 } 60} 61 62var json = { 63 author: 'Maximilian Antoni', 64 name: 'npm-test-shrinkwrap-optional-dependency', 65 version: '0.0.0', 66 dependencies: { 67 'test-package': '0.0.0' 68 }, 69 optionalDependencies: { 70 'underscore': '1.3.3' 71 } 72} 73 74function writePackage () { 75 fs.writeFileSync(path.join(pkg, 'package.json'), JSON.stringify(json, null, 2)) 76} 77 78function setup (cb) { 79 writePackage() 80 process.chdir(pkg) 81 82 var opts = { 83 cache: common.cache, 84 registry: common.registry 85 } 86 npm.load(opts, cb) 87} 88