• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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