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