From ffbd39e78acf31c953d343dc3ab261b32fd9c728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20B=C3=B6nnemann?= Date: Wed, 4 Feb 2015 15:22:48 +0100 Subject: [PATCH] test(prepublish): initial scenario --- tests/index.js | 1 + tests/scenarios/prepublish.js | 49 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/scenarios/prepublish.js diff --git a/tests/index.js b/tests/index.js index e101a3d6..66d04e60 100644 --- a/tests/index.js +++ b/tests/index.js @@ -5,3 +5,4 @@ var test = require('tape') var createModule = require('./lib/create-module') require('./scenarios/install')(test, createModule) +require('./scenarios/prepublish')(test, createModule) diff --git a/tests/scenarios/prepublish.js b/tests/scenarios/prepublish.js new file mode 100644 index 00000000..625be3f9 --- /dev/null +++ b/tests/scenarios/prepublish.js @@ -0,0 +1,49 @@ +'use strict' + +var fs = require('fs') +var exec = require('child_process').exec + +var efh = require('error-first-handler') +var nixt = require('nixt') + +module.exports = function (test, createModule) { + createModule(efh()(function (name, cwd) { + test('prepublish', function (t) { + prepublishTest(t, 'refactor: change', '0.0.0', 1, 'abort publish w/o changes') + prepublishTest(t, 'fix: change', '1.0.0', 0, 'release 1.0.0 if unpublished') + prepublishTest(t, 'fix: change', '1.0.1', 0, 'bump patch for fix') + prepublishTest(t, 'feat: change', '1.1.0', 0, 'bump minor for feature') + prepublishTest(t, 'fix: BREAKING CHANGE: change', '2.0.0', 0, 'bump major for breaking change') + }) + + function prepublishTest (t, message, version, code, name) { + t.test(name, function (t) { + t.plan(3) + + nixt() + .cwd(cwd) + .env('CI', true) + .exec('git commit --allow-empty -m "' + message + '"') + .run('npm run prepublish') + .code(code) + .stdout(/> semantic-release pre\n\nDetermining new version\n/m) + .end(function(err) { + t.error(err, 'nixt') + + var pkg = JSON.parse(fs.readFileSync(cwd + '/package.json')) + t.is(pkg.version, version, 'version') + + if (code === 1) { + return t.error(null, 'no publish') + } + + exec('npm publish --ignore-scripts', {cwd: cwd}, function(err) { + setTimeout(function() { + t.error(err, 'publish') + }, 300) + }) + }) + }) + } + })) +}