UNPKG

git-last-commit

Version:

Read details of the last commit including tags

257 lines (218 loc) 12.5 kB
/*jshint expr: true*/ var expect = require('chai').expect; var process = require('child_process'); var sinon = require('sinon'); var git = require('../source/index.js'); describe('feature: git-last-commit to return last commit info', function() { let processExecMethod; beforeEach(function() { processExecMethod = sinon.stub(process, 'exec'); }); afterEach(function() { processExecMethod.restore(); }); it('should parse git output fully', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##>this is the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\nR2\nR1'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject line'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject line'); expect(commit.body).to.be.equal('this is the body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.have.members(['R2', 'R1']); done(); }); }); it('should parse git output when commit has no notes', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##>this is the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##><##>master\nR2\nR1'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject line'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject line'); expect(commit.body).to.be.equal('this is the body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.empty; expect(commit.tags).to.have.members(['R2', 'R1']); done(); }); }); it('should parse git output when commit has no body', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##><##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\nR2\nR1'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject line'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject line'); expect(commit.body).to.be.empty; expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.have.members(['R2', 'R1']); done(); }); }); it('should parse git output when commit has no tags', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##>this is the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\n'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject line'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject line'); expect(commit.body).to.be.equal('this is the body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.be.empty; done(); }); }); it('should parse git output when commit body has newline', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject<##>sanitized subject<##>this is\nthe body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\n'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject'); expect(commit.body).to.be.equal('this is\nthe body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.be.empty; done(); }); }); it('should parse git output when commit body has comma', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject<##>sanitized subject<##>this is, the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\n'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject'); expect(commit.body).to.be.equal('this is, the body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.be.empty; done(); }); }); it('should parse git output fully when commit has single tag', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##>this is the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\nR1'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject line'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject line'); expect(commit.body).to.be.equal('this is the body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.have.members(['R1']); done(); }); }); it('should parse git output fully when commit has multiple tags', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##>this is the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\nR1\nR2'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(commit.shortHash).to.be.equal('26e689d'); expect(commit.hash).to.be.equal('26e689d8769908329a145201be5081233c711663'); expect(commit.subject).to.be.equal('subject line'); expect(commit.sanitizedSubject).to.be.equal('sanitized subject line'); expect(commit.body).to.be.equal('this is the body'); expect(commit.authoredOn).to.be.equal('1437984178'); expect(commit.committedOn).to.be.equal('1437984179'); expect(commit.author.name).to.be.equal('Author1'); expect(commit.author.email).to.be.equal('author@gmail.com'); expect(commit.committer.name).to.be.equal('Committer1'); expect(commit.committer.email).to.be.equal('committer@gmail.com'); expect(commit.branch).to.be.equal('master'); expect(commit.notes).to.be.equal('note 1'); expect(commit.tags).to.have.members(['R1', 'R2']); done(); }); }); it('should run the git command on given destination', function(done) { processExecMethod.yields(null, '26e689d<##>26e689d8769908329a145201be5081233c711663<##>subject line<##>sanitized subject line<##>this is the body<##>1437984178<##>1437984179<##>Author1<##>author@gmail.com<##>Committer1<##>committer@gmail.com<##>note 1<##>master\nR2\nR1'); git.getLastCommit(function(err, commit) { expect(err).to.be.null; expect(commit).to.be.ok; expect(processExecMethod.args[0][1].cwd).to.be.ok; expect(processExecMethod.args[0][1].cwd).to.be.equal('path/path/whatever'); done(); }, {dst: 'path/path/whatever'}); }); it('should handle error properly if this is not a git repo', function(done) { processExecMethod.yields(null, ''); git.getLastCommit(function(err, commit) { expect(err).to.be.not.null; expect(commit).to.be.undefined; expect(err).to.be.equal('this does not look like a git repo'); done(); }); }); it('should handle stderr coming from git output', function(done) { processExecMethod.yields(null, null, 'command not found git'); git.getLastCommit(function(err, commit) { expect(err).to.be.not.null; expect(commit).to.be.undefined; expect(err).to.be.equal('command not found git'); done(); }); }); });