[Pkg-javascript-commits] [node-coveralls] 107/332: Massive expansion of test coverage: 100% of detectLocalGit + numerous missing lines in other files

Bastien Roucariès rouca at moszumanska.debian.org
Thu Nov 9 13:53:46 UTC 2017


This is an automated email from the git hooks/post-receive script.

rouca pushed a commit to branch master
in repository node-coveralls.

commit 6ca3aec602027774dd159c9ff41ed69e835073b0
Author: Christophe Porteneuve <tdd at tddsworld.com>
Date:   Thu Nov 14 20:33:23 2013 +0100

    Massive expansion of test coverage: 100% of detectLocalGit + numerous missing lines in other files
---
 test/fetchGitData.js |   6 ++
 test/getOptions.js   | 187 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 193 insertions(+)

diff --git a/test/fetchGitData.js b/test/fetchGitData.js
index de5c474..9c00828 100644
--- a/test/fetchGitData.js
+++ b/test/fetchGitData.js
@@ -9,6 +9,12 @@ describe("fetchGitData", function(){
   it("should throw an error when no data is passed", function() {
     fetchGitData.should.throw(/fetchGitData requires a callback/);
   });
+  it('should throw an error when no git context is provided', function(done) {
+    fetchGitData(undefined, function(err){
+      err.should.match(/No options passed/);
+      done();
+    });
+  });
   it("should throw an error if no head is provided", function(done) {
     fetchGitData({
     }, function(err){
diff --git a/test/getOptions.js b/test/getOptions.js
index 939cedd..bab5499 100644
--- a/test/getOptions.js
+++ b/test/getOptions.js
@@ -16,9 +16,24 @@ describe("getBaseOptions", function(){
   it ("should set git branch if it exists", function(done){
     testGitBranch(getBaseOptions, done);
   });
+  it ("should detect current git hash if not passed in", function(done) {
+    testGitHashDetection(getBaseOptions, done);
+  });
+  it ("should detect current git branch if not passed in", function(done) {
+    testGitBranchDetection(getBaseOptions, done);
+  });
+  it ("should detect detached git head if no hash passed in", function(done) {
+    testGitDetachedHeadDetection(getBaseOptions, done);
+  });
+  it ("should fail local Git detection if no .git directory", function(done) {
+    testNoLocalGit(getBaseOptions, done);
+  });
   it ("should set repo_token if it exists", function(done){
     testRepoToken(getBaseOptions, done);
   });
+  it ("should detect repo_token if not passed in", function(done){
+    testRepoTokenDetection(getBaseOptions, done);
+  });
   it ("should set service_name if it exists", function(done){
     testServiceName(getBaseOptions, done);
   });
@@ -31,12 +46,21 @@ describe("getBaseOptions", function(){
   it ("should set service_name and service_job_id if it's running on circleci", function(done){
     testCircleCi(getBaseOptions, done);
   });
+  it ("should set service_name and service_job_id if it's running on codeship", function(done){
+    testCodeship(getBaseOptions, done);
+  });
 });
 
 describe("getOptions", function(){
   beforeEach(function(){
     process.env = {};
   });
+  it ("should require a callback", function(done) {
+    (function() {
+      getOptions();
+    }).should.throw();
+    done();
+  });
   it ("should get a filepath if there is one", function(done){
     process.argv[2] = "somepath";
     getOptions(function(err, options){
@@ -62,9 +86,24 @@ describe("getOptions", function(){
   it ("should set git branch if it exists", function(done){
     testGitBranch(getOptions, done);
   });
+  it ("should detect current git hash if not passed in", function(done) {
+    testGitHashDetection(getOptions, done);
+  });
+  it ("should detect current git branch if not passed in", function(done) {
+    testGitBranchDetection(getOptions, done);
+  });
+  it ("should detect detached git head if no hash passed in", function(done) {
+    testGitDetachedHeadDetection(getOptions, done);
+  });
+  it ("should fail local Git detection if no .git directory", function(done) {
+    testNoLocalGit(getOptions, done);
+  });
   it ("should set repo_token if it exists", function(done){
     testRepoToken(getOptions, done);
   });
+  it ("should detect repo_token if not passed in", function(done){
+    testRepoTokenDetection(getOptions, done);
+  });
   it ("should set service_name if it exists", function(done){
     testServiceName(getOptions, done);
   });
@@ -77,6 +116,9 @@ describe("getOptions", function(){
   it ("should set service_name and service_job_id if it's running on circleci", function(done){
     testCircleCi(getOptions, done);
   });
+  it ("should set service_name and service_job_id if it's running on codeship", function(done){
+    testCodeship(getOptions, done);
+  });
 });
 
 var testServiceJobId = function(sut, done){
@@ -95,6 +137,24 @@ var testGitHash = function(sut, done){
   });
 };
 
+var testGitDetachedHeadDetection = function(sut, done){
+  var localGit = ensureLocalGitContext({ detached: true });
+  sut(function(err, options) {
+    options.git.head.id.should.equal(localGit.id);
+    localGit.wrapUp();
+    done();
+  });
+};
+
+var testGitHashDetection = function(sut, done){
+  var localGit = ensureLocalGitContext();
+  sut(function(err, options) {
+    options.git.head.id.should.equal(localGit.id);
+    localGit.wrapUp();
+    done();
+  });
+};
+
 var testGitBranch = function(sut, done){
   process.env.COVERALLS_GIT_COMMIT = "e3e3e3e3e3e3e3e3e";
   process.env.COVERALLS_GIT_BRANCH = "master";
@@ -104,6 +164,24 @@ var testGitBranch = function(sut, done){
   });
 };
 
+var testGitBranchDetection = function(sut, done){
+  var localGit = ensureLocalGitContext();
+  sut(function(err, options) {
+    options.git.branch.should.equal(localGit.branch);
+    localGit.wrapUp();
+    done();
+  });
+};
+
+var testNoLocalGit = function(sut, done){
+  var localGit = ensureLocalGitContext({ noGit: true });
+  sut(function(err, options) {
+    options.should.not.have.property('git');
+    localGit.wrapUp();
+    done();
+  });
+};
+
 var testRepoToken = function(sut, done){
   process.env.COVERALLS_REPO_TOKEN = "REPO_TOKEN";
   sut(function(err, options){
@@ -112,6 +190,28 @@ var testRepoToken = function(sut, done){
   });
 };
 
+var testRepoTokenDetection = function(sut, done) {
+  var fs = require('fs');
+  var path = require('path');
+
+  var file = path.join(process.cwd(), '.coveralls.yml'), token, synthetic = false;
+  if (fs.exists(file)) {
+    var yaml = require('yaml');
+    /* jshint evil:true */
+    token = yaml.eval(fs.readFileSync(yml, 'utf8')).repo_token;
+  } else {
+    token = 'REPO_TOKEN';
+    fs.writeFileSync(file, 'repo_token: ' + token, { encoding: 'utf-8' });
+    synthetic = true;
+  }
+  sut(function(err, options) {
+    options.repo_token.should.equal(token);
+    if (synthetic)
+      fs.unlink(file);
+    done();
+  });
+};
+
 var testServiceName = function(sut, done){
   process.env.COVERALLS_SERVICE_NAME = "SERVICE_NAME";
   sut(function(err, options){
@@ -171,3 +271,90 @@ var testCircleCi = function(sut, done){
     done();
   });
 };
+
+var testCodeship = function(sut, done) {
+  process.env.CI_NAME = 'codeship';
+  process.env.CI_BUILD_NUMBER = '1234';
+  process.env.CI_COMMIT_ID = "e3e3e3e3e3e3e3e3e";
+  process.env.CI_COMMIT_BRANCH = "e3e3e3e3e3e3e3e3e";
+  sut(function(err, options){
+    options.service_name.should.equal("codeship");
+    options.service_job_id.should.equal("1234");
+    options.git.should.eql({ head:
+                               { id: 'e3e3e3e3e3e3e3e3e',
+                                 author_name: 'Unknown Author',
+                                 author_email: '',
+                                 committer_name: 'Unknown Committer',
+                                 committer_email: '',
+                                 message: 'Unknown Commit Message' },
+                              branch: 'master',
+                              remotes: [] });
+    done();
+  });
+};
+
+function ensureLocalGitContext(options) {
+  var path = require('path');
+  var fs = require('fs');
+
+  var baseDir = process.cwd(), dir = baseDir, gitDir;
+  while ('/' !== dir) {
+    gitDir = path.join(dir, '.git');
+    if (fs.existsSync(path.join(gitDir, 'HEAD')))
+      break;
+
+    dir = path.dirname(dir);
+  }
+
+  options = options || {};
+  var synthetic = '/' === dir;
+  var gitHead, branch, id, wrapUp = function() {};
+
+  if (synthetic) {
+    branch = 'synthetic';
+    id = '424242424242424242';
+    gitHead = path.join('.git', 'HEAD');
+    var gitBranch = path.join('.git', 'refs', 'heads', branch);
+    fs.mkdirSync('.git');
+    if (options.detached) {
+      fs.writeFileSync(gitHead, id, { encoding: 'utf-8' });
+    } else {
+      fs.mkdirSync(path.join('.git', 'refs'));
+      fs.mkdirSync(path.join('.git', 'refs', 'heads'));
+      fs.writeFileSync(gitHead, "ref: refs/heads/" + branch, { encoding: 'utf-8' });
+      fs.writeFileSync(gitBranch, id, { encoding: 'utf-8' });
+    }
+    wrapUp = function() {
+      fs.unlinkSync(gitHead);
+      if (!options.detached) {
+        fs.unlinkSync(gitBranch);
+        fs.rmdirSync(path.join('.git', 'refs', 'heads'));
+        fs.rmdirSync(path.join('.git', 'refs'));
+      }
+      fs.rmdirSync('.git');
+    };
+  } else if (options.noGit) {
+    fs.renameSync(gitDir, gitDir + '.bak');
+    wrapUp = function() {
+      fs.renameSync(gitDir + '.bak', gitDir);
+    };
+  } else if (options.detached) {
+    gitHead = path.join(gitDir, 'HEAD');
+    var content = fs.readFileSync(gitHead, 'utf-8').trim();
+    var b = content.match(/^ref: refs\/heads\/(\S+)$/)[1];
+    if (!b) {
+      id = b;
+    } else {
+      id = fs.readFileSync(path.join(gitDir, 'refs', 'heads', b), 'utf-8').trim();
+      fs.writeFileSync(gitHead, id, 'utf-8');
+      wrapUp = function() {
+        fs.writeFileSync(gitHead, content, 'utf-8');
+      };
+    }
+  } else {
+    branch = fs.readFileSync(path.join(gitDir, 'HEAD'), 'utf-8').trim().match(/^ref: refs\/heads\/(\S+)$/)[1];
+    id = fs.readFileSync(path.join(gitDir, 'refs', 'heads', branch), 'utf-8').trim();
+  }
+
+  return { id: id, branch: branch, wrapUp: wrapUp };
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-coveralls.git



More information about the Pkg-javascript-commits mailing list