From 1811278792bd03c911707d9694c06e5258a255e8 Mon Sep 17 00:00:00 2001 From: didil Date: Fri, 3 Feb 2017 15:36:35 +0000 Subject: [PATCH] refactor tests + start refactoring git.js --- .gitignore | 1 + lib/git.js | 315 +++++++++++------- lib/helper.js | 7 + package.json | 17 +- test-ini.js | 5 + test/functional/git.test.js | 204 ++++++++++++ .../svn-hg.test.js} | 2 +- test/git_scenario.mocha.js | 146 -------- test/mocha.opts | 5 + 9 files changed, 420 insertions(+), 282 deletions(-) create mode 100644 lib/helper.js create mode 100644 test-ini.js create mode 100644 test/functional/git.test.js rename test/{all.mocha.js => functional/svn-hg.test.js} (97%) delete mode 100644 test/git_scenario.mocha.js create mode 100644 test/mocha.opts diff --git a/.gitignore b/.gitignore index 0c8937b..f6cd9bb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ test/fixtures/angular-bridge node_modules npm-debug.log coverage +.idea/ \ No newline at end of file diff --git a/lib/git.js b/lib/git.js index 5884339..4693293 100644 --- a/lib/git.js +++ b/lib/git.js @@ -1,104 +1,133 @@ var fs = require('fs'); var async = require('async'); var exec = require('child_process').exec; +var ini = require('ini'); +var path = require('path'); +var _ = require('lodash'); +var helper = require('./helper'); var git = {}; var TIMEOUT = 5000; var MAXBUFFER = 1024 * 64; // 16KB -git.parse = function(folder, cb) { - var myTrim = function(str) { - if (typeof(str) === 'string') - return str.replace(/\n/g, ''); - return str; - }; - - var getUrl = function(cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git config --get remote.origin.url", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if(err !== null) - return cb(err); - var data = {}; - data.type = 'git'; - data.url = myTrim(stdout); - return cb(null, data); - }); - }; +git.parseGitConfig = function (folder, cb) { + fs.readFile(path.join(folder, '.git/config'), 'utf-8', function (err, data) { + if (err) { + return cb(err); + } + + var config = ini.parse(data); + cb(null, config); + }); +}; + +git.getUrl = function (folder, cb) { + git.parseGitConfig(folder, function (err, config) { + if (err) { + return cb(err); + } + + var data = {}; - var getMeta = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git show --quiet --format=%H%n%aD%n%s%n%B HEAD", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if(err !== null) + data.type = 'git'; + data.url = _.get(config, 'remote "origin".url'); + + cb(null, data); + }); +}; + +git.getMeta = function (folder, data, cb) { + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git show --quiet --format=%H%n%aD%n%s%n%B HEAD", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, + function (err, stdout, stderr) { + if (err) { return cb(err); + } + var lines = stdout.split("\n"); - data.revision = myTrim(lines.shift()); - data.update_time = myTrim(lines.shift()); - data.comment = myTrim(lines.shift()); + data.revision = helper.trimNewLine(lines.shift()); + data.update_time = helper.trimNewLine(lines.shift()); + data.comment = helper.trimNewLine(lines.shift()); return cb(null, data); }); - }; +}; - var getStaged = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git status -s", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if(err !== null) +git.getStaged = function (folder, data, cb) { + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git status -s", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, + function (err, stdout, stderr) { + if (err) { return cb(err); + } + data.unstaged = (stdout === '') ? false : true; return cb(null, data); }); - }; +}; + - var getBranch = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git rev-parse --abbrev-ref HEAD", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if(err !== null) +git.getBranch = function (folder, data, cb) { + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git rev-parse --abbrev-ref HEAD", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, + function (err, stdout, stderr) { + if (err) { return cb(err); - data.branch = myTrim(stdout); + } + + data.branch = helper.trimNewLine(stdout); return cb(null, data); }); - }; +}; - var getRemote = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git remote", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if(err !== null) + +git.getRemote = function (folder, data, cb) { + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git remote", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, + function (err, stdout, stderr) { + if (err) { return cb(err); + } + data.remotes = stdout.split('\n'); data.remotes.pop(); - data.remote = (data.remotes.indexOf('origin') === -1) - ? data.remotes[0] : 'origin'; + data.remote = (data.remotes.indexOf('origin') === -1) ? data.remotes[0] : 'origin'; return cb(null, data); }); - }; +}; - var getRemoteBrancheExistence = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git show-ref refs/remotes/"+data.remote+"/"+data.branch, {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if (err) +git.getRemoteBrancheExistence = function (folder, data, cb) { + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git show-ref refs/remotes/" + data.remote + "/" + data.branch, { + timeout: TIMEOUT, + maxBuffer: MAXBUFFER + }, + function (err, stdout, stderr) { + if (err) { data.branch_exists_on_remote = false; - else + } + else { data.branch_exists_on_remote = true; + } return cb(null, data); }); - }; +}; - var getPrevNext = function(data, cb) { - var prefix = ''; +git.getPrevNext = function (folder, data, cb) { + var prefix = ''; - if (data.branch_exists_on_remote) - prefix = data.remote + '/'; + if (data.branch_exists_on_remote) + prefix = data.remote + '/'; - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git log "+ prefix + data.branch +" --pretty=oneline -n 100", - {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if(err !== null) + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git log " + prefix + data.branch + " --pretty=oneline -n 100", { + timeout: TIMEOUT, + maxBuffer: MAXBUFFER + }, + function (err, stdout, stderr) { + if (err) { return cb(err); + } + var commit_history = []; var lines = stdout.split('\n'); - lines.forEach(function(key) { + lines.forEach(function (key) { var parse = key.match(/([^ ]*) (.*)/); if (parse) commit_history.push(parse[1]); @@ -117,22 +146,27 @@ git.parse = function(folder, cb) { } return cb(null, data); }); - }; +}; - var getDate = function(data, cb) { - fs.stat(folder+".git", function(err, stats) { - if(err !== null) - return cb(err); - data.update_time = myTrim(stats.mtime); - return cb(null, data); - }); - }; - var getTags = function(data, cb) { - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git tag", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - if (err !== null) +git.getDate = function (folder, data, cb) { + fs.stat(folder + ".git", function (err, stats) { + if (err) { + return cb(err); + } + + data.update_time = helper.trimNewLine(stats.mtime); + return cb(null, data); + }); +}; + +git.getTags = function (folder, data, cb) { + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git tag", {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, + function (err, stdout, stderr) { + if (err) { return cb(err); + } + if (stdout.length) { data.tags = stdout.split('\n'); data.tags.pop(); @@ -140,64 +174,81 @@ git.parse = function(folder, cb) { } return cb(null, data); }); - }; - - async.waterfall([getUrl, getMeta, getStaged, getBranch, getRemote, getRemoteBrancheExistence, getPrevNext, getDate, getTags], - function(err, data) { - if (err !== null) - return cb(err); - return cb(null, data); - }); }; -git.isUpdated = function(folder, cb) { - git.parse(folder, function(err, data) { - var prefix = ''; +git.parse = function (folder, cb) { + async.waterfall([ + git.getUrl.bind(null, folder), + git.getMeta.bind(null, folder), + git.getStaged.bind(null, folder), + git.getBranch.bind(null, folder), + git.getRemote.bind(null, folder), + git.getRemoteBrancheExistence.bind(null, folder), + git.getPrevNext.bind(null, folder), + git.getDate.bind(null, folder), + git.getTags.bind(null, folder)], + function (err, data) { + if (err) { + return cb(err); + } - if (err !== null) + return cb(null, data); + }); +}; + +git.isUpdated = function (folder, cb) { + git.parse(folder, function (err, data) { + if (err) { return cb(err); + } + + var prefix = ''; if (data.branch_exists_on_remote) prefix = data.remote + '/'; - exec("cd '"+folder+"';LC_ALL=en_US.UTF-8 git remote update >> /dev/null 2>&1; git log "+ prefix+data.branch+ - " --pretty=oneline -n 1", {timeout: 60000, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - var res = {}; - - if(err !== null) - return cb(err); - if (stdout.substring(0, 40) === data.revision.substring(0, 40)) - res.is_up_to_date = true; - else - res.is_up_to_date = false; - res.new_revision = stdout.substring(0, 40); - res.current_revision = data.revision.substring(0, 40); - return cb(null, res); - }); + exec("cd '" + folder + "';LC_ALL=en_US.UTF-8 git remote update >> /dev/null 2>&1; git log " + prefix + data.branch + + " --pretty=oneline -n 1", {timeout: 60000, maxBuffer: MAXBUFFER}, + function (err, stdout, stderr) { + if (err) { + return cb(err); + } + + var res = {}; + + if (stdout.substring(0, 40) === data.revision.substring(0, 40)) + res.is_up_to_date = true; + else + res.is_up_to_date = false; + res.new_revision = stdout.substring(0, 40); + res.current_revision = data.revision.substring(0, 40); + return cb(null, res); + }); }); }; -git.revert = function(args, cb) { +git.revert = function (args, cb) { var ret = {}; - var command = "cd '"+args.folder+"';LC_ALL=en_US.UTF-8 git reset --hard "+args.revision; + var command = "cd '" + args.folder + "';LC_ALL=en_US.UTF-8 git reset --hard " + args.revision; ret.output = ''; ret.output += command + '\n'; ret.success = true; exec(command, {timeout: TIMEOUT, maxBuffer: MAXBUFFER}, - function(err, stdout, stderr) { - ret.output += stdout; - if (err !== null || stderr.substring(0, 6) === 'fatal:') - ret.success = false; - return cb(null, ret); - }); + function (err, stdout, stderr) { + ret.output += stdout; + if (err !== null || stderr.substring(0, 6) === 'fatal:') + ret.success = false; + return cb(null, ret); + }); }; -git.update = function(folder, cb) { - git.isUpdated(folder, function(err, data) { - var res = {}; - if (err !== null) +git.update = function (folder, cb) { + git.isUpdated(folder, function (err, data) { + if (err) { return cb(err); + } + + var res = {}; if (data.is_up_to_date === true) { res.success = false; res.current_revision = data.new_revision; @@ -205,25 +256,29 @@ git.update = function(folder, cb) { } else { git.revert({folder: folder, revision: data.new_revision}, - function (err, dt) { - if (err !== null) - return cb(err); - res.output = dt.output; - res.success = dt.success; - res.current_revision = (dt.success) ? data.new_revision : data.current_revision; - return cb(null, res); - }); + function (err, dt) { + if (err) { + return cb(err); + } + + res.output = dt.output; + res.success = dt.success; + res.current_revision = (dt.success) ? data.new_revision : data.current_revision; + return cb(null, res); + }); } }); }; -git.prev = function(folder, cb) { - git.parse(folder, function(err, data) { - if (err !== null) +git.prev = function (folder, cb) { + git.parse(folder, function (err, data) { + if (err) { return cb(err); + } + var res = {}; if (data.prev_rev !== null) { - git.revert({folder: folder, revision: data.prev_rev}, function(err, meta){ + git.revert({folder: folder, revision: data.prev_rev}, function (err, meta) { if (err !== null) return cb(err); res.output = meta.output; @@ -240,15 +295,19 @@ git.prev = function(folder, cb) { }); }; -git.next = function(folder, cb) { - git.parse(folder, function(err, data) { - if (err !== null) +git.next = function (folder, cb) { + git.parse(folder, function (err, data) { + if (err) { return cb(err); + } + var res = {}; if (data.next_rev !== null) { - git.revert({folder: folder, revision: data.next_rev}, function(err, meta){ - if (err !== null) + git.revert({folder: folder, revision: data.next_rev}, function (err, meta) { + if (err) { return cb(err); + } + res.output = meta.output; res.success = meta.success; res.current_revision = (res.success) ? data.next_rev : data.revision; diff --git a/lib/helper.js b/lib/helper.js new file mode 100644 index 0000000..b03e3f4 --- /dev/null +++ b/lib/helper.js @@ -0,0 +1,7 @@ +function trimNewLine(input) { + return typeof(input) === 'string' ? input.replace(/\n/g, '') : input; +} + +module.exports = { + trimNewLine: trimNewLine +}; \ No newline at end of file diff --git a/package.json b/package.json index a41d4bd..948d477 100644 --- a/package.json +++ b/package.json @@ -26,17 +26,20 @@ }, "main": "index.js", "scripts": { - "cover" : "node_modules/.bin/istanbul cover --report html node_modules/.bin/_mocha -- -R spec test/*", - "test": "node_modules/.bin/_mocha --require test/support/env --reporter spec --bail --check-leaks test/" + "cover": "node_modules/.bin/istanbul cover --report html node_modules/.bin/_mocha -- -R spec test/*", + "test": "node_modules/.bin/_mocha --require test/support/env test/" }, "dependencies": { - "async": "1.5" + "async": "1.5", + "chai": "^3.5.0", + "ini": "^1.3.4", + "lodash": "^4.17.4" }, "devDependencies": { - "mocha": "2.0.0", - "should" : "*", - "shelljs" : "0.6.0", - "istanbul" : "*" + "mocha": "3.2.0", + "should": "11.2.0", + "shelljs": "0.6.0", + "istanbul": "0.4.5" }, "bugs": { "url": "https://github.com/keymetrics/vizion/issues" diff --git a/test-ini.js b/test-ini.js new file mode 100644 index 0000000..2ad739b --- /dev/null +++ b/test-ini.js @@ -0,0 +1,5 @@ +var fs = require('fs') + , ini = require('ini'); +var path = require('path'); + + diff --git a/test/functional/git.test.js b/test/functional/git.test.js new file mode 100644 index 0000000..f41b67d --- /dev/null +++ b/test/functional/git.test.js @@ -0,0 +1,204 @@ +var expect = require('chai').expect; +var shell = require('shelljs'); +var vizion = require("../../index.js"); +var p = require('path'); + +if (shell.which('git') === null) process.exit(0); + +describe('Git', function () { + var testRepoPath = ''; + var tmp_meta = {}; + + before(function () { + shell.cd('test/fixtures'); + + shell.rm('-rf', 'angular-bridge'); + shell.exec('git clone https://github.com/Unitech/angular-bridge.git'); + + testRepoPath = p.join(shell.pwd(), 'angular-bridge'); + }); + + + context('at head', function () { + + describe('analyze', function () { + it('ok', function (done) { + vizion.analyze({folder: testRepoPath}, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.type).to.eq('git'); + expect(meta.url).to.eq('https://github.com/Unitech/angular-bridge.git'); + expect(meta.branch).to.eq('master'); + expect(meta.comment).to.eq('Merge pull request #17 from jorge-d/express_4'); + expect(meta.unstaged).to.eq(false); + expect(meta.branch).to.eq('master'); + expect(meta.remotes).to.deep.eq(['origin']); + expect(meta.remote).to.eq('origin'); + expect(meta.branch_exists_on_remote).to.eq(true); + expect(meta.ahead).to.eq(false); + expect(meta.next_rev).to.eq(null); + expect(meta.prev_rev).to.eq('da29de44b4884c595468b6978fb19f17bee76893'); + expect(meta.tags).to.deep.eq(['v0.3.4']); + + tmp_meta = meta; + + done(); + }); + }); + }); + + describe('isUpToDate', function () { + it('up to date', function (done) { + vizion.isUpToDate({ + folder: testRepoPath + }, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.is_up_to_date).to.eq(true); + done(); + }); + }); + }); + + }); + + context('previous commit', function () { + before(function beforeTest(done) { + vizion.revertTo({ + folder: testRepoPath, + revision: '31edbe84c6d60092ffca007d699f1ed2f4a4fcf0' + }, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.success).to.eq(true); + done(); + }); + }); + + describe('analyze', function () { + + it('ok', function it(done) { + vizion.analyze({folder: testRepoPath}, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.type).to.eq('git'); + expect(meta.branch).to.eq('master'); + expect(meta.comment).to.eq('Use expres 4 router correctly'); + expect(meta.unstaged).to.eq(false); + expect(meta.branch).to.eq('master'); + expect(meta.remotes).to.deep.eq(['origin']); + expect(meta.remote).to.eq('origin'); + expect(meta.branch_exists_on_remote).to.eq(true); + expect(meta.ahead).to.eq(false); + expect(meta.next_rev).to.eq('da29de44b4884c595468b6978fb19f17bee76893'); + expect(meta.prev_rev).to.eq('82ce6b2c75ee1c5d98b2d0def278c7d988281bc2'); + expect(meta.tags).to.deep.eq(['v0.3.4']); + + done(); + }); + }); + }); + + describe('isUpToDate', function () { + it('not up to date', function (done) { + vizion.isUpToDate({ + folder: testRepoPath + }, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.is_up_to_date).to.eq(false); + done(); + }); + }); + }); + + describe('update', function () { + it('should update to latest', function (done) { + vizion.update({ + folder: testRepoPath + }, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.success).to.eq(true); + + vizion.analyze({folder: testRepoPath}, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.revision).to.eq('d1dee188a0d82f21c05a398704ac3237f5523ca7'); + done(); + }); + }); + }); + }); + }); + + it('should recursively downgrade to first commit', function (done) { + var callback = function (err, meta) { + if (err) { + return done(err); + } + + if (meta.success === true) { + vizion.prev({folder: testRepoPath}, callback); + } + else { + expect(meta.success).to.eq(false); + vizion.analyze({folder: testRepoPath}, function (err, meta) { + if (err) { + return done(err); + } + + expect(meta.prev_rev).to.eq(null); + expect(meta.revision).to.eq('445c0b78e447e87eaec2140d32f67652108b434e'); + done(); + }); + } + }; + vizion.prev({folder: testRepoPath}, callback); + }); + + it('should recursively upgrade to most recent commit', function (done) { + var callback = function (err, meta) { + if (err) { + return done(err); + } + + if (meta.success === true) { + vizion.next({folder: testRepoPath}, callback); + } + else { + expect(meta.success).to.eq(false); + vizion.analyze({folder: testRepoPath}, function (err, meta) { + if (err) { + return done(err); + } + expect(meta.next_rev).to.eq(null); + expect(meta.revision).to.eq('d1dee188a0d82f21c05a398704ac3237f5523ca7'); + done(); + }); + } + }; + + vizion.next({folder: testRepoPath}, callback); + }); + + after(function () { + shell.rm('-rf', 'angular-bridge'); + }); + + +}); diff --git a/test/all.mocha.js b/test/functional/svn-hg.test.js similarity index 97% rename from test/all.mocha.js rename to test/functional/svn-hg.test.js index 8ed97f8..ed9afea 100644 --- a/test/all.mocha.js +++ b/test/functional/svn-hg.test.js @@ -1,7 +1,7 @@ var assert = require("assert"); var shell = require("shelljs"); -var vizion = require(".."); +var vizion = require("../../index.js"); /* To enable a sample test suite, remove the _disabled diff --git a/test/git_scenario.mocha.js b/test/git_scenario.mocha.js deleted file mode 100644 index a4b29f3..0000000 --- a/test/git_scenario.mocha.js +++ /dev/null @@ -1,146 +0,0 @@ - -var should = require('should'); -var shell = require('shelljs'); -var vizion = require('..'); -var p = require('path'); - -if (shell.which('git') === null) process.exit(0); - -describe('Git scenario', function() { - var repo_pwd = ''; - var tmp_meta = {}; - - before(function(done) { - this.timeout(10000); - shell.cd('test/fixtures'); - - if (shell.ls('angular-bridge').length == 0) - shell.exec('git clone https://github.com/Unitech/angular-bridge.git'); - - repo_pwd = p.join(shell.pwd(), 'angular-bridge'); - done(); - }); - - after(function(done) { - shell.rm('-rf', 'angular-bridge'); - done(); - }); - - it('should update to latest', function(done) { - this.timeout(10000); - vizion.update({ - folder : repo_pwd - }, function(err, meta) { - should(err).not.exist; - should(meta.success).be.false; - done(); - }); - }); - - it('should analyze versioned folder', function(done) { - this.timeout(10000); - vizion.analyze({ - folder: repo_pwd - }, function(err, meta) { - should(err).not.exist; - - meta.type.should.equal('git'); - meta.branch.should.equal('master'); - - should(meta.branch_exists_on_remote).be.true - should.exist(meta.comment); - should.exist(meta.url); - should.exist(meta.revision); - - should(meta.next_rev).be.null; - should(meta.prev_rev).not.be.null; - - tmp_meta = meta; - - done(); - }); - }); - - it('should checkout older version', function(done) { - this.timeout(10000); - vizion.revertTo({ - folder : repo_pwd, - revision : tmp_meta.prev_rev - }, function(err, meta) { - should(err).not.exist; - - done(); - }); - }); - - it('should has next and prev', function(done) { - this.timeout(10000); - vizion.analyze({ - folder: repo_pwd - }, function(err, meta) { - should(err).not.exist; - - should(meta.next_rev).not.be.null; - should(meta.prev_rev).not.be.null; - - tmp_meta = meta; - - done(); - }); - }); - - it('should see that its not on HEAD', function(done) { - this.timeout(10000); - - vizion.isUpToDate({ - folder : repo_pwd - }, function(err, meta) { - - should(err).not.exist; - meta.is_up_to_date.should.be.false; - - done(); - }); - }); - - it('should recursively downgrade to first commit', function(done) { - this.timeout(20000); - var callback = function(err, meta) { - should(err).not.exist; - should(meta).be.ok; - if (meta.success === true) { - vizion.prev({folder: repo_pwd}, callback); - } - else { - should(meta.success).be.false; - vizion.analyze({folder: repo_pwd}, function(err, meta) { - should(err).not.exist; - should(meta.prev_rev).be.null; - done(); - }); - } - } - vizion.prev({folder : repo_pwd}, callback); - }); - - it('should recursively upgrade to most recent commit', function(done) { - this.timeout(20000); - var callback = function(err, meta) { - should(err).not.exist; - should(meta).be.ok; - if (meta.success === true) { - vizion.next({folder: repo_pwd}, callback); - } - else { - should(meta.success).be.false; - vizion.analyze({folder: repo_pwd}, function(err, meta) { - should(err).not.exist; - should(meta.next_rev).be.null; - done(); - }); - } - } - vizion.next({folder : repo_pwd}, callback); - }); - -}); diff --git a/test/mocha.opts b/test/mocha.opts new file mode 100644 index 0000000..d5302e1 --- /dev/null +++ b/test/mocha.opts @@ -0,0 +1,5 @@ +--timeout 20000 +--reporter spec +--bail +--check-leaks +test/**/*.test.js \ No newline at end of file