• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var fs = require('fs')
2var path = require('path')
3
4var mkdirp = require('mkdirp')
5var rimraf = require('rimraf')
6var test = require('tap').test
7
8var npm = require('../../')
9var common = require('../common-tap.js')
10
11var pkg = common.pkg
12var cache = common.cache
13
14test('npm version <semver> updates shrinkwrap - no git', function (t) {
15  setup()
16  npm.load({ cache: cache, registry: common.registry }, function () {
17    npm.commands.version(['patch'], function (err) {
18      if (err) return t.fail('Error perform version patch')
19      var shrinkwrap = require(path.resolve(pkg, 'npm-shrinkwrap.json'))
20      t.equal(shrinkwrap.version, '0.0.1', 'got expected version')
21      t.end()
22    })
23  })
24})
25
26test('npm version <semver> updates git works with no shrinkwrap', function (t) {
27  setup()
28  rimraf.sync(path.resolve(pkg, 'npm-shrinkwrap.json'))
29
30  npm.config.set('sign-git-commit', false)
31  npm.config.set('sign-git-tag', false)
32
33  common.makeGitRepo({
34    path: pkg,
35    added: ['package.json']
36  }, version)
37
38  function version (er, stdout, stderr) {
39    t.ifError(er, 'git repo initialized without issue')
40    t.notOk(stderr, 'no error output')
41
42    npm.commands.version(['patch'], checkCommit)
43  }
44
45  function checkCommit (er) {
46    t.ifError(er, 'version command ran without error')
47
48    var shrinkwrap = require(path.resolve(pkg, 'npm-shrinkwrap.json'))
49    t.equal(shrinkwrap.version, '0.0.1', 'got expected version')
50
51    var opts = { cwd: pkg, env: { PATH: process.env.PATH } }
52    var git = require('../../lib/utils/git.js')
53    git.whichAndExec(
54      ['show', 'HEAD', '--name-only'],
55      opts,
56      function (er, stdout, stderr) {
57        t.ifError(er, 'git show ran without issues')
58        t.notOk(stderr, 'no error output')
59
60        var lines = stdout.split('\n')
61        t.notEqual(lines.indexOf('package.json'), -1, 'package.json commited')
62        t.equal(lines.indexOf('npm-shrinkwrap.json'), -1, 'npm-shrinkwrap.json not present')
63
64        t.end()
65      }
66    )
67  }
68})
69
70test('npm version <semver> updates shrinkwrap and updates git', function (t) {
71  setup()
72
73  npm.config.set('sign-git-commit', false)
74  npm.config.set('sign-git-tag', false)
75
76  common.makeGitRepo({
77    path: pkg,
78    added: ['package.json', 'npm-shrinkwrap.json']
79  }, version)
80
81  function version (er, stdout, stderr) {
82    t.ifError(er, 'git repo initialized without issue')
83    t.notOk(stderr, 'no error output')
84
85    npm.commands.version(['patch'], checkCommit)
86  }
87
88  function checkCommit (er) {
89    t.ifError(er, 'version command ran without error')
90
91    var shrinkwrap = require(path.resolve(pkg, 'npm-shrinkwrap.json'))
92    t.equal(shrinkwrap.version, '0.0.1', 'got expected version')
93
94    var git = require('../../lib/utils/git.js')
95    var opts = { cwd: pkg, env: { PATH: process.env.PATH } }
96    git.whichAndExec(
97      ['show', 'HEAD', '--name-only'],
98      opts,
99      function (er, stdout, stderr) {
100        t.ifError(er, 'git show ran without issues')
101        t.notOk(stderr, 'no error output')
102
103        var lines = stdout.split('\n')
104        t.notEqual(lines.indexOf('package.json'), -1, 'package.json commited')
105        t.notEqual(lines.indexOf('npm-shrinkwrap.json'), -1, 'npm-shrinkwrap.json commited')
106
107        t.end()
108      }
109    )
110  }
111})
112
113function setup () {
114  process.chdir(__dirname)
115  rimraf.sync(pkg)
116  mkdirp.sync(pkg)
117  var contents = {
118    author: 'Nathan Bowser && Faiq Raza',
119    name: 'version-with-shrinkwrap-test',
120    version: '0.0.0',
121    description: 'Test for version with shrinkwrap update'
122  }
123
124  fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(contents), 'utf8')
125  fs.writeFileSync(path.resolve(pkg, 'npm-shrinkwrap.json'), JSON.stringify(contents), 'utf8')
126  process.chdir(pkg)
127}
128