diff --git a/test/tests/tag.js b/test/tests/tag.js index 77b411f45..11b4f566f 100644 --- a/test/tests/tag.js +++ b/test/tests/tag.js @@ -9,12 +9,14 @@ describe("Tag", function() { var Obj = NodeGit.Object; var Oid = NodeGit.Oid; var Reference = NodeGit.Reference; + var Signature = NodeGit.Signature; var reposPath = local("../repos/workdir"); var tagName = "annotated-tag"; var tagFullName = "refs/tags/" + tagName; var tagOid = "dc800017566123ff3c746b37284a24a66546667e"; var commitPointedTo = "32789a79e71fbc9e04d3eff7425e1771eb595150"; + var commitPointedTo2 = "c82fb078a192ea221c9f1093c64321c60d64aa0d"; var tagMessage = "This is an annotated tag\n"; function testTag(tag, name) { @@ -144,4 +146,78 @@ describe("Tag", function() { return Promise.resolve(); }); }); + + it("can create a new signed tag with Tag.create and delete it", function() { + var name = "created-signed-tag-create"; + var repository = this.repository; + var signature = Signature.default(repository); + var commit = null; + var commit2 = null; + + return repository.getCommit(commitPointedTo) + .then(function(theCommit) { + commit = theCommit; + return repository.getCommit(commitPointedTo2); + }) + .then(function(theCommit2) { + commit2 = theCommit2; + return Tag.create(repository, name, commit, signature, tagMessage, 1); + }) + .then(function(oid) { + return repository.getTag(oid); + }) + .then(function(tag) { + testTag(tag, name); + assert(tag.tagger(), signature); + }) + .then(function() { + // overwriting is okay + return Tag.create(repository, name, commit2, signature, tagMessage, 1); + }) + .then(function() { + // overwriting is not okay + return Tag.create(repository, name, commit, signature, tagMessage, 0); + }) + .then(function() { + return Promise.reject(new Error("should not be able to create the '" + + name + "' tag twice")); + }, function() { + return Promise.resolve() + .then(function() { + return repository.deleteTagByName(name); + }) + .then(function() { + return Reference.lookup(repository, "refs/tags/" + name); + }) + .then(function() { + return Promise.reject(new Error("the tag '" + name + + "' should not exist")); + }, function() { + return Promise.resolve(); + }); + }); + }); + + it("can create a new signed tag with Tag.annotationCreate", function() { + var oid = Oid.fromString(commitPointedTo); + var name = "created-signed-tag-annotationCreate"; + var repository = this.repository; + var signature = Signature.default(repository); + var odb = null; + + return repository.odb() + .then(function(theOdb) { + odb = theOdb; + }) + .then(function() { + return Tag.annotationCreate( + repository, name, oid, signature, tagMessage); + }) + .then(function(oid) { + return odb.read(oid); + }) + .then(function(object) { + assert(object.type(), Obj.TYPE.TAG); + }); + }); });