git.test.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. var expect = require('chai').expect;
  2. var fs = require('fs');
  3. var sinon = require('sinon');
  4. var ini = require('ini');
  5. var git = require("../../lib/git/git.js");
  6. var jsGitService = require("../../lib/git/js-git-service.js");
  7. describe('Unit: git', function () {
  8. describe('parseGitConfig', function parseGitConfigTest() {
  9. var folder = "my-folder";
  10. var config = {stub: 'config'};
  11. var data = {stub: 'data'};
  12. var readFileStub, parseStub;
  13. before(function beforeTest() {
  14. readFileStub = sinon.stub(fs, 'readFile').callsFake(function (path, encoding, cb) {
  15. if (process.platform !== 'win32' && process.platform !== 'win64')
  16. expect(path).to.eq('my-folder/.git/config');
  17. else
  18. expect(path).to.eq('my-folder\\.git\\config');
  19. cb(null, data);
  20. });
  21. parseStub = sinon.stub(ini, 'parse').callsFake(function (myData) {
  22. expect(myData).to.eq(data);
  23. return config;
  24. });
  25. });
  26. it('ok', function it(done) {
  27. git.parseGitConfig(folder, function (err, myConfig) {
  28. if (err) {
  29. return done(err);
  30. }
  31. expect(myConfig).to.eq(config);
  32. done();
  33. })
  34. });
  35. after(function afterTest() {
  36. readFileStub.restore();
  37. parseStub.restore();
  38. });
  39. });
  40. describe('getUrl', function getUrlTest() {
  41. var folder = "my-folder";
  42. var config = {
  43. 'remote "origin"': {
  44. url: 'test-url'
  45. }
  46. };
  47. var parseGitConfigStub;
  48. before(function beforeTest() {
  49. parseGitConfigStub = sinon.stub(git, 'parseGitConfig').callsFake(function (myFolder, cb) {
  50. expect(myFolder).to.eq(folder);
  51. cb(null, config);
  52. });
  53. });
  54. it('ok', function it(done) {
  55. git.getUrl(folder, function (err, data) {
  56. if (err) {
  57. return done(err);
  58. }
  59. expect(data).to.deep.eq({
  60. "type": "git",
  61. "url": "test-url"
  62. });
  63. done();
  64. });
  65. });
  66. after(function afterTest() {
  67. parseGitConfigStub.restore();
  68. });
  69. });
  70. describe('getCommitInfo', function getCommitInfoTest() {
  71. var folder = "my-folder";
  72. var commit = {
  73. hash: 'xfd4560',
  74. message: 'my message'
  75. };
  76. var data = {};
  77. var getHeadCommitStub;
  78. before(function beforeTest() {
  79. getHeadCommitStub = sinon.stub(jsGitService, 'getHeadCommit').callsFake(function (myFolder, cb) {
  80. expect(myFolder).to.eq(folder);
  81. cb(null, commit);
  82. });
  83. });
  84. it('ok', function it(done) {
  85. git.getCommitInfo(folder, data, function (err, data) {
  86. if (err) {
  87. return done(err);
  88. }
  89. expect(data).to.deep.eq({
  90. "revision": commit.hash,
  91. "comment": commit.message
  92. });
  93. done();
  94. });
  95. });
  96. after(function afterTest() {
  97. getHeadCommitStub.restore();
  98. });
  99. });
  100. describe('getBranch', function getBranchTest() {
  101. var folder = "my-folder";
  102. var data = {};
  103. var readFileStub;
  104. before(function beforeTest() {
  105. readFileStub = sinon.stub(fs, 'readFile').callsFake(function (path, encoding, cb) {
  106. if (process.platform !== 'win32' && process.platform !== 'win64')
  107. expect(path).to.eq('my-folder/.git/HEAD');
  108. else
  109. expect(path).to.eq('my-folder\\.git\\HEAD');
  110. expect(encoding).to.eq('utf-8');
  111. cb(null, "ref: refs/heads/master");
  112. });
  113. });
  114. it('ok', function it(done) {
  115. git.getBranch(folder, data, function (err, data) {
  116. if (err) {
  117. return done(err);
  118. }
  119. expect(data).to.deep.eq({
  120. "branch": "master",
  121. });
  122. done();
  123. });
  124. });
  125. after(function afterTest() {
  126. readFileStub.restore();
  127. });
  128. });
  129. describe('getRemote', function getRemoteTest() {
  130. var folder = "my-folder";
  131. var config = {
  132. 'remote "origin"': {
  133. url: 'test-url'
  134. },
  135. 'remote "other"': {
  136. url: 'other-url'
  137. }
  138. };
  139. var data = {};
  140. var parseGitConfigStub;
  141. before(function beforeTest() {
  142. parseGitConfigStub = sinon.stub(git, 'parseGitConfig').callsFake(function (myFolder, cb) {
  143. expect(myFolder).to.eq(folder);
  144. cb(null, config);
  145. });
  146. });
  147. it('ok', function it(done) {
  148. git.getRemote(folder, data, function (err, data) {
  149. if (err) {
  150. return done(err);
  151. }
  152. expect(data).to.deep.eq({
  153. "remote": "origin",
  154. "remotes": [
  155. "origin",
  156. "other"
  157. ]
  158. });
  159. done();
  160. });
  161. });
  162. after(function afterTest() {
  163. parseGitConfigStub.restore();
  164. });
  165. });
  166. describe('isCurrentBranchOnRemote', function isCurrentBranchOnRemoteTest() {
  167. var folder = "my-folder";
  168. var data = {
  169. branch: 'my-branch',
  170. remote: 'my-remote'
  171. };
  172. var getRefHashStub;
  173. context('not on remote', function () {
  174. before(function beforeTest() {
  175. getRefHashStub = sinon.stub(jsGitService, 'getRefHash').callsFake(function (myFolder,myBranch,myRemote, cb) {
  176. expect(myFolder).to.eq(folder);
  177. expect(myBranch).to.eq(data.branch);
  178. expect(myRemote).to.eq(data.remote);
  179. cb(null, null);
  180. });
  181. });
  182. it('ok', function it(done) {
  183. git.isCurrentBranchOnRemote(folder, data, function (err, data) {
  184. if (err) {
  185. return done(err);
  186. }
  187. expect(data).to.deep.eq({
  188. "branch": "my-branch",
  189. "branch_exists_on_remote": false,
  190. "remote": "my-remote"
  191. });
  192. done();
  193. });
  194. });
  195. after(function afterTest() {
  196. getRefHashStub.restore();
  197. });
  198. });
  199. context('on remote', function () {
  200. before(function beforeTest() {
  201. getRefHashStub = sinon.stub(jsGitService, 'getRefHash').callsFake(function (myFolder,myBranch,myRemote, cb) {
  202. expect(myFolder).to.eq(folder);
  203. expect(myBranch).to.eq(data.branch);
  204. expect(myRemote).to.eq(data.remote);
  205. cb(null, "FX421345CX");
  206. });
  207. });
  208. it('ok', function it(done) {
  209. git.isCurrentBranchOnRemote(folder, data, function (err, data) {
  210. if (err) {
  211. return done(err);
  212. }
  213. expect(data).to.deep.eq({
  214. "branch": "my-branch",
  215. "branch_exists_on_remote": true,
  216. "remote": "my-remote"
  217. });
  218. done();
  219. });
  220. });
  221. after(function afterTest() {
  222. getRefHashStub.restore();
  223. });
  224. });
  225. });
  226. describe('getPrevNext', function getPrevNextTest() {
  227. var folder = "my-folder";
  228. var data = {
  229. branch_exists_on_remote:true,
  230. branch: 'my-branch',
  231. remote: 'my-remote',
  232. revision: '2'
  233. };
  234. var commitHistory = [
  235. {hash: '3'},
  236. {hash: '2'},
  237. {hash: '1'},
  238. ];
  239. var getCommitHistoryStub;
  240. before(function beforeTest() {
  241. getCommitHistoryStub = sinon.stub(jsGitService, 'getCommitHistory').callsFake(function (myFolder, n, myBranch, myRemote, cb) {
  242. expect(myFolder).to.eq(folder);
  243. expect(n).to.eq(100);
  244. expect(myBranch).to.eq(data.branch);
  245. expect(myRemote).to.eq(data.remote);
  246. cb(null, commitHistory);
  247. });
  248. });
  249. it('ok', function it(done) {
  250. git.getPrevNext(folder, data, function (err, data) {
  251. if (err) {
  252. return done(err);
  253. }
  254. expect(data).to.deep.eq({
  255. "ahead": false,
  256. "branch": "my-branch",
  257. "branch_exists_on_remote": true,
  258. "next_rev": "3",
  259. "prev_rev": "1",
  260. "remote": "my-remote",
  261. "revision": "2"
  262. });
  263. done();
  264. });
  265. });
  266. after(function afterTest() {
  267. getCommitHistoryStub.restore();
  268. });
  269. });
  270. });