• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* eslint-disable camelcase */
2var fs = require('fs')
3var path = require('path')
4
5var mkdirp = require('mkdirp')
6var test = require('tap').test
7
8var common = require('../common-tap.js')
9
10var base = common.pkg
11var installme = path.join(base, 'installme')
12var installme_pkg = path.join(installme, 'package.json')
13var example = path.join(base, 'example')
14var example_shrinkwrap = path.join(example, 'npm-shrinkwrap.json')
15var example_pkg = path.join(example, 'package.json')
16var installed = path.join(example, 'node_modules', 'installed')
17var installed_pkg = path.join(installed, 'package.json')
18
19// Ignore max listeners warnings until that gets fixed
20var env = Object.keys(process.env).reduce((set, key) => {
21  if (!set[key]) set[key] = process.env[key]
22  return set
23}, { NODE_NO_WARNINGS: '1' })
24
25var EXEC_OPTS = { cwd: example, env: env }
26
27var installme_pkg_json = {
28  name: 'installme',
29  version: '1.0.0',
30  dependencies: {}
31}
32
33var example_pkg_json = {
34  name: 'example',
35  version: '1.0.0',
36  dependencies: {},
37  devDependencies: {
38    'installed': '1.0'
39  }
40}
41
42var example_shrinkwrap_json = {
43  name: 'example',
44  version: '1.0.0',
45  dependencies: {
46    installed: {
47      version: '1.0.0'
48    }
49  }
50}
51
52var installed_pkg_json = {
53  _id: 'installed@1.0.0',
54  name: 'installed',
55  version: '1.0.0'
56}
57
58function writeJson (filename, obj) {
59  mkdirp.sync(path.dirname(filename))
60  fs.writeFileSync(filename, JSON.stringify(obj, null, 2))
61}
62
63test('setup', function (t) {
64  writeJson(installme_pkg, installme_pkg_json)
65  writeJson(example_pkg, example_pkg_json)
66  writeJson(example_shrinkwrap, example_shrinkwrap_json)
67  writeJson(installed_pkg, installed_pkg_json)
68  t.end()
69})
70
71test('install --save leaves dev deps alone', t =>
72  common.npm(['install', '--save', 'file://' + installme], EXEC_OPTS)
73    .then(([code, stdout, stderr]) => {
74      t.is(code, 0, 'install completed ok')
75      t.is(stderr, '', 'install completed without error output')
76      var shrinkwrap = JSON.parse(fs.readFileSync(example_shrinkwrap))
77      t.ok(shrinkwrap.dependencies.installed, "save new install didn't remove dev dep")
78      t.ok(shrinkwrap.dependencies.installme, 'save new install DID add new dep')
79    }))
80