diff options
Diffstat (limited to 'deps/npm/test/tap/version-lifecycle.js')
-rw-r--r-- | deps/npm/test/tap/version-lifecycle.js | 107 |
1 files changed, 105 insertions, 2 deletions
diff --git a/deps/npm/test/tap/version-lifecycle.js b/deps/npm/test/tap/version-lifecycle.js index da0af1086..5d78b71d5 100644 --- a/deps/npm/test/tap/version-lifecycle.js +++ b/deps/npm/test/tap/version-lifecycle.js @@ -10,6 +10,8 @@ var common = require('../common-tap.js') var npm = require('../../') var pkg = path.resolve(__dirname, 'version-lifecycle') var cache = path.resolve(pkg, 'cache') +var npmrc = path.resolve(pkg, './.npmrc') +var configContents = 'sign-git-tag=false\n' test('npm version <semver> with failing preversion lifecycle script', function (t) { setup() @@ -24,7 +26,30 @@ test('npm version <semver> with failing preversion lifecycle script', function ( }), 'utf8') fs.writeFileSync(path.resolve(pkg, 'fail.sh'), 'exit 50', 'utf8') fs.chmodSync(path.resolve(pkg, 'fail.sh'), 448) - npm.load({cache: cache, registry: common.registry}, function () { + npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () { + var version = require('../../lib/version') + version(['patch'], function (err) { + t.ok(err) + t.ok(err.message.match(/Exit status 50/)) + t.end() + }) + }) +}) + +test('npm version <semver> with failing version lifecycle script', function (t) { + setup() + fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ + author: 'Alex Wolfe', + name: 'version-lifecycle', + version: '0.0.0', + description: 'Test for npm version if postversion script fails', + scripts: { + version: './fail.sh' + } + }), 'utf8') + fs.writeFileSync(path.resolve(pkg, 'fail.sh'), 'exit 50', 'utf8') + fs.chmodSync(path.resolve(pkg, 'fail.sh'), 448) + npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () { var version = require('../../lib/version') version(['patch'], function (err) { t.ok(err) @@ -47,7 +72,7 @@ test('npm version <semver> with failing postversion lifecycle script', function }), 'utf8') fs.writeFileSync(path.resolve(pkg, 'fail.sh'), 'exit 50', 'utf8') fs.chmodSync(path.resolve(pkg, 'fail.sh'), 448) - npm.load({cache: cache, registry: common.registry}, function () { + npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () { var version = require('../../lib/version') version(['patch'], function (err) { t.ok(err) @@ -57,6 +82,52 @@ test('npm version <semver> with failing postversion lifecycle script', function }) }) +test('npm version <semver> execution order', function (t) { + setup() + fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify({ + author: 'Alex Wolfe', + name: 'version-lifecycle', + version: '0.0.0', + description: 'Test for npm version if postversion script fails', + scripts: { + preversion: './preversion.sh', + version: './version.sh', + postversion: './postversion.sh' + } + }), 'utf8') + makeScript('preversion') + makeScript('version') + makeScript('postversion') + npm.load({cache: cache, 'sign-git-tag': false, registry: common.registry}, function () { + common.makeGitRepo({path: pkg}, function (err, git) { + t.ifError(err, 'git bootstrap ran without error') + + var version = require('../../lib/version') + version(['patch'], function (err) { + t.ifError(err, 'version command complete') + + t.equal('0.0.0', readPackage('preversion').version, 'preversion') + t.deepEqual(readStatus('preversion', t), { + 'preversion-package.json': 'A' + }) + + t.equal('0.0.1', readPackage('version').version, 'version') + t.deepEqual(readStatus('version', t), { + 'package.json': 'M', + 'preversion-package.json': 'A', + 'version-package.json': 'A' + }) + + t.equal('0.0.1', readPackage('postversion').version, 'postversion') + t.deepEqual(readStatus('postversion', t), { + 'postversion-package.json': 'A' + }) + t.end() + }) + }) + }) +}) + test('cleanup', function (t) { process.chdir(osenv.tmpdir()) rimraf.sync(pkg) @@ -67,5 +138,37 @@ function setup () { mkdirp.sync(pkg) mkdirp.sync(path.join(pkg, 'node_modules')) mkdirp.sync(cache) + fs.writeFileSync(npmrc, configContents, 'ascii') process.chdir(pkg) } + +function makeScript (lifecycle) { + var contents = [ + 'cp package.json ' + lifecycle + '-package.json', + 'git add ' + lifecycle + '-package.json', + 'git status --porcelain > ' + lifecycle + '-git.txt' + ].join('\n') + var scriptPath = path.join(pkg, lifecycle + '.sh') + fs.writeFileSync(scriptPath, contents, 'utf-8') + fs.chmodSync(scriptPath, 448) +} + +function readPackage (lifecycle) { + return JSON.parse(fs.readFileSync(path.join(pkg, lifecycle + '-package.json'), 'utf-8')) +} + +function readStatus (lifecycle, t) { + var status = {} + fs.readFileSync(path.join(pkg, lifecycle + '-git.txt'), 'utf-8') + .trim() + .split('\n') + .forEach(function (line) { + line = line.trim() + if (line && !line.match(/^\?\? /)) { + var parts = line.split(/\s+/) + t.equal(parts.length, 2, lifecycle + ' : git status has too many words : ' + line) + status[parts[1].trim()] = parts[0].trim() + } + }) + return status +} |