/* * Copyright 2012 Cloud9 IDE, Inc. * * This product includes software developed by * Cloud9 IDE, Inc (http://c9.io). * * Author: Mike de Boer */ "use strict"; var Assert = require("assert"); var Client = require("./../../index"); describe("[gitdata]", function() { var client; var token = "c286e38330e15246a640c2cf32a45ea45d93b2ba"; beforeEach(function() { client = new Client({ version: "3.0.0" }); client.authenticate({ type: "oauth", token: token }); }); it("should successfully execute GET /repos/:user/:repo/git/blobs/:sha (getBlob)", function(next) { // found an object after executing: // git rev-list --all | xargs -l1 git diff-tree -r -c -M -C --no-commit-id | awk '{print $3}' client.gitdata.getBlob( { user: "mikedeboertest", repo: "node_chat", sha: "8433b682c95edf3fd81f5ee217dc9c874db35e4b" }, function(err, res) { Assert.equal(err, null); Assert.equal(res.sha, "8433b682c95edf3fd81f5ee217dc9c874db35e4b"); Assert.equal(res.size, 2654); Assert.equal(res.encoding, "base64"); next(); } ); }); it("should successfully execute POST /repos/:user/:repo/git/blobs (createBlob)", function(next) { client.gitdata.createBlob( { user: "mikedeboertest", repo: "node_chat", content: "test", encoding: "utf-8" }, function(err, res) { Assert.equal(err, null); Assert.equal(typeof res.sha, "string"); var sha = res.sha; client.gitdata.getBlob( { user: "mikedeboertest", repo: "node_chat", sha: sha }, function(err, res) { Assert.equal(err, null); Assert.equal(res.sha, sha); Assert.equal(res.size, 4); Assert.equal(res.encoding, "base64"); next(); } ); } ); }); it("should successfully execute GET /repos/:user/:repo/git/commits/:sha (getCommit)", function(next) { client.gitdata.getCommit( { user: "mikedeboertest", repo: "node_chat", sha: "17e0734295ffd8174f91f04ba8e8f8e51954b793" }, function(err, res) { Assert.equal(err, null); Assert.equal(res.author.date, "2012-10-05T08:05:31-07:00"); Assert.equal(res.author.name, "Mike de Boer"); Assert.equal(res.parents[0].sha, "221140b288a3c64949594c58420cb4ab289b0756"); Assert.equal(res.parents[1].sha, "d2836429f4ff7de033c8bc0d16d22d55f2ea39c3"); next(); } ); }); it("should successfully execute POST /repos/:user/:repo/git/commits (createCommit)", function(next) { // got valid tree reference by executing // git cat-file -p HEAD client.gitdata.createCommit( { user: "mikedeboertest", repo: "node_chat", message: "test", tree: "8ce4393a319b60bc6179509e0c46dee83c179f9f", parents: [], author: { name: "test-chef", email: "test-chef@pasta-nirvana.it", date: "2008-07-09T16:13:30+12:00" }, committer: { name: "test-minion", email: "test-minion@pasta-nirvana.it", date: "2008-07-09T16:13:30+12:00" } }, function(err, res) { Assert.equal(err, null); Assert.equal(res.author.name, "test-chef"); Assert.equal(res.author.email, "test-chef@pasta-nirvana.it"); Assert.equal(res.committer.name, "test-minion"); Assert.equal(res.committer.email, "test-minion@pasta-nirvana.it"); Assert.equal(res.message, "test"); next(); } ); }); it("should successfully execute GET /repos/:user/:repo/git/refs/:ref (getReference)", function(next) { client.gitdata.getReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/master" }, function(err, res) { Assert.equal(err, null); Assert.equal(res.ref, "refs/heads/master"); Assert.equal(res.object.type, "commit"); Assert.equal(res.object.sha, "17e0734295ffd8174f91f04ba8e8f8e51954b793"); next(); } ); }); it("should successfully execute GET /repos/:user/:repo/git/refs (getAllReferences)", function(next) { client.gitdata.getAllReferences( { user: "mikedeboertest", repo: "node_chat" }, function(err, res) { Assert.equal(err, null); var ref = res[0]; Assert.equal(ref.ref, "refs/heads/master"); Assert.equal(ref.object.type, "commit"); Assert.equal(ref.object.sha, "17e0734295ffd8174f91f04ba8e8f8e51954b793"); next(); } ); }); /* DISABLED temporarily due to Internal Server Error from Github! it("should successfully execute POST /repos/:user/:repo/git/refs (createReference)", function(next) { client.gitdata.createReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/tagliatelle", sha: "17e0734295ffd8174f91f04ba8e8f8e51954b793" }, function(err, res) { Assert.equal(err, null); console.log(res); // other assertions go here client.gitdata.deleteReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/tagliatelle" }, function(err, res) { Assert.equal(err, null); // other assertions go here next(); } ); } ); });*/ it("should successfully execute PATCH /repos/:user/:repo/git/refs/:ref (updateReference)", function(next) { client.gitdata.getReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/master" }, function(err, res) { Assert.equal(err, null); var sha = res.object.sha; // do `force=true` because we go backward in history, which yields a warning // that it's not a reference that can be fast-forwarded to. client.gitdata.updateReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/master", sha: "221140b288a3c64949594c58420cb4ab289b0756", force: true }, function(err, res) { Assert.equal(err, null); Assert.equal(res.ref, "refs/heads/master"); Assert.equal(res.object.type, "commit"); Assert.equal(res.object.sha, "221140b288a3c64949594c58420cb4ab289b0756"); client.gitdata.updateReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/master", sha: sha, force: false }, function(err, res) { Assert.equal(err, null); Assert.equal(res.ref, "refs/heads/master"); Assert.equal(res.object.type, "commit"); Assert.equal(res.object.sha, sha); next(); } ); } ); } ); }); /* DISABLED temporarily due to Internal Server Error from Github! it("should successfully execute DELETE /repos/:user/:repo/git/refs/:ref (deleteReference)", function(next) { client.gitdata.createReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/tagliatelle", sha: "17e0734295ffd8174f91f04ba8e8f8e51954b793" }, function(err, res) { Assert.equal(err, null); console.log(res); // other assertions go here client.gitdata.deleteReference( { user: "mikedeboertest", repo: "node_chat", ref: "heads/tagliatelle" }, function(err, res) { Assert.equal(err, null); // other assertions go here next(); } ); } ); });*/ it("should successfully execute GET /repos/:user/:repo/git/tags/:sha (getTag)", function(next) { client.gitdata.createTag( { user: "mikedeboertest", repo: "node_chat", tag: "test-pasta", message: "Grandma's secret sauce", object: "17e0734295ffd8174f91f04ba8e8f8e51954b793", type: "commit", tagger: { name: "test-chef", email: "test-chef@pasta-nirvana.it", date: "2008-07-09T16:13:30+12:00" } }, function(err, res) { Assert.equal(err, null); var sha = res.sha; client.gitdata.getTag( { user: "mikedeboertest", repo: "node_chat", sha: sha }, function(err, res) { Assert.equal(err, null); Assert.equal(res.tag, "test-pasta"); Assert.equal(res.message, "Grandma's secret sauce"); Assert.equal(res.sha, sha); Assert.equal(res.tagger.name, "test-chef"); Assert.equal(res.tagger.email, "test-chef@pasta-nirvana.it"); // other assertions go here client.gitdata.deleteReference( { user: "mikedeboertest", repo: "node_chat", ref: "tags/" + sha }, function(err, res) { //Assert.equal(err, null); // NOTE: Github return 'Validation Failed' error codes back, which makes no sense to me. // ask the guys what's up here... Assert.equal(err.code, 422); next(); } ); } ); } ); }); it("should successfully execute POST /repos/:user/:repo/git/tags (createTag)", function(next) { client.gitdata.createTag( { user: "mikedeboertest", repo: "node_chat", tag: "test-pasta", message: "Grandma's secret sauce", object: "17e0734295ffd8174f91f04ba8e8f8e51954b793", type: "commit", tagger: { name: "test-chef", email: "test-chef@pasta-nirvana.it", date: "2008-07-09T16:13:30+12:00" } }, function(err, res) { Assert.equal(err, null); var sha = res.sha; client.gitdata.getTag( { user: "mikedeboertest", repo: "node_chat", sha: sha }, function(err, res) { Assert.equal(err, null); Assert.equal(res.tag, "test-pasta"); Assert.equal(res.message, "Grandma's secret sauce"); Assert.equal(res.sha, sha); Assert.equal(res.tagger.name, "test-chef"); Assert.equal(res.tagger.email, "test-chef@pasta-nirvana.it"); // other assertions go here client.gitdata.deleteReference( { user: "mikedeboertest", repo: "node_chat", ref: "tags/" + sha }, function(err, res) { //Assert.equal(err, null); // NOTE: Github return 'Validation Failed' error codes back, which makes no sense to me. // ask the guys what's up here... Assert.equal(err.code, 422); next(); } ); } ); } ); }); it("should successfully execute GET /repos/:user/:repo/git/trees/:sha (getTree)", function(next) { client.gitdata.getTree( { user: "mikedeboertest", repo: "node_chat", sha: "8ce4393a319b60bc6179509e0c46dee83c179f9f", recursive: false }, function(err, res) { Assert.equal(err, null); Assert.equal(res.tree[0].type, "blob"); Assert.equal(res.tree[0].path, "LICENSE-MIT"); Assert.equal(res.tree[0].sha, "f30a31de94635399f42fd05f91f6ed3ff2f013d6"); Assert.equal(res.tree[0].mode, "100644"); Assert.equal(res.tree[0].size, 1075); client.gitdata.getTree( { user: "mikedeboertest", repo: "node_chat", sha: "8ce4393a319b60bc6179509e0c46dee83c179f9f", recursive: true }, function(err, res) { Assert.equal(err, null); Assert.equal(res.tree[0].type, "blob"); Assert.equal(res.tree[0].path, "LICENSE-MIT"); Assert.equal(res.tree[0].sha, "f30a31de94635399f42fd05f91f6ed3ff2f013d6"); Assert.equal(res.tree[0].mode, "100644"); Assert.equal(res.tree[0].size, 1075); next(); } ); } ); }); it("should successfully execute POST /repos/:user/:repo/git/trees (createTree)", function(next) { client.gitdata.getTree( { user: "mikedeboertest", repo: "node_chat", sha: "8ce4393a319b60bc6179509e0c46dee83c179f9f", recursive: false }, function(err, res) { Assert.equal(err, null); var file = res.tree[0]; client.gitdata.createTree( { base_tree: "8ce4393a319b60bc6179509e0c46dee83c179f9f", user: "mikedeboertest", repo: "node_chat", tree: [ { path: file.path, mode: "100755", type: file.type, sha: file.sha } ] }, function(err, res) { Assert.equal(err, null); var sha = res.sha; client.gitdata.getTree( { user: "mikedeboertest", repo: "node_chat", sha: sha, recursive: true }, function(err, res) { Assert.equal(err, null); Assert.equal(res.tree[0].type, "blob"); Assert.equal(res.tree[0].path, "LICENSE-MIT"); Assert.equal(res.tree[0].sha, "f30a31de94635399f42fd05f91f6ed3ff2f013d6"); Assert.equal(res.tree[0].mode, "100755"); Assert.equal(res.tree[0].size, 1075); next(); } ); } ); } ); }); });