1/* eslint-disable camelcase */ 2var fs = require('fs') 3var path = require('path') 4var mkdirp = require('mkdirp') 5var test = require('tap').test 6var common = require('../common-tap.js') 7 8var base = common.pkg 9var installme = path.join(base, 'installme') 10var installme_pkg = path.join(installme, 'package.json') 11var example = path.join(base, 'example') 12var example_shrinkwrap = path.join(example, 'npm-shrinkwrap.json') 13var example_pkg = path.join(example, 'package.json') 14var installed_prod = path.join(example, 'node_modules', 'installed-prod') 15var installed_prod_pkg = path.join(installed_prod, 'package.json') 16var installed_dev = path.join(example, 'node_modules', 'installed-dev') 17var installed_dev_pkg = path.join(installed_dev, 'package.json') 18 19var EXEC_OPTS = { cwd: example } 20 21var installme_pkg_json = { 22 name: 'installme', 23 version: '1.0.0', 24 dependencies: {} 25} 26 27var example_pkg_json = { 28 name: 'example', 29 version: '1.0.0', 30 dependencies: { 31 'installed-prod': '1.0' 32 }, 33 devDependencies: { 34 'installed-dev': '1.0' 35 } 36} 37 38var example_shrinkwrap_json = { 39 name: 'example', 40 version: '1.0.0', 41 dependencies: { 42 'installed-prod': { 43 version: '1.0.0' 44 }, 45 'installed-dev': { 46 version: '1.0.0' 47 } 48 } 49} 50 51var installed_prod_pkg_json = { 52 _id: 'installed-prod@1.0.0', 53 _integrity: 'sha1-deadbeef', 54 _resolved: 'foo', 55 name: 'installed-prod', 56 version: '1.0.0' 57} 58 59var installed_dev_pkg_json = { 60 _id: 'installed-dev@1.0.0', 61 _integrity: 'sha1-deadbeef', 62 _resolved: 'foo', 63 name: 'installed-dev', 64 version: '1.0.0' 65} 66 67function writeJson (filename, obj) { 68 mkdirp.sync(path.dirname(filename)) 69 fs.writeFileSync(filename, JSON.stringify(obj, null, 2)) 70} 71 72test('setup', function (t) { 73 writeJson(installme_pkg, installme_pkg_json) 74 writeJson(example_pkg, example_pkg_json) 75 writeJson(example_shrinkwrap, example_shrinkwrap_json) 76 writeJson(installed_prod_pkg, installed_prod_pkg_json) 77 writeJson(installed_dev_pkg, installed_dev_pkg_json) 78 t.end() 79}) 80 81test('install --save-dev leaves prod deps alone', function (t) { 82 common.npm(['install', '--save-dev', 'file://' + installme], EXEC_OPTS, function (er, code, stdout, stderr) { 83 t.ifError(er, "spawn didn't catch fire") 84 t.is(code, 0, 'install completed ok') 85 t.is(stderr, '', 'install completed without error output') 86 var shrinkwrap = JSON.parse(fs.readFileSync(example_shrinkwrap)) 87 t.ok(shrinkwrap.dependencies['installed-prod'], "save-dev new install didn't remove prod dep") 88 t.ok(shrinkwrap.dependencies['installed-dev'], "save-dev new install didn't remove dev dep") 89 t.ok(shrinkwrap.dependencies.installme, 'save-dev new install DID add new dev dep') 90 t.end() 91 }) 92}) 93