git.test.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. var expect = require('chai').expect;
  2. var shell = require('shelljs');
  3. var vizion = require("../../index.js");
  4. var p = require('path');
  5. if (shell.which('git') === null) process.exit(0);
  6. describe('Functional: Git', function () {
  7. var testRepoPath = '';
  8. var tmp_meta = {};
  9. before(function (done) {
  10. shell.cd('test/fixtures');
  11. shell.rm('-rf', 'angular-bridge');
  12. shell.exec('git clone https://github.com/Unitech/angular-bridge.git', () => {
  13. testRepoPath = p.join(shell.pwd().toString(), 'angular-bridge');
  14. done()
  15. });
  16. });
  17. after(function () {
  18. shell.rm('-rf', 'angular-bridge');
  19. shell.cd('../..'); // go back to root
  20. });
  21. it('should recursively downgrade to first commit', function (done) {
  22. var callback = function (err, meta) {
  23. if (err) {
  24. return done(err);
  25. }
  26. if (meta.success === true) {
  27. vizion.prev({folder: testRepoPath}, callback);
  28. }
  29. else {
  30. expect(meta.success).to.eq(false);
  31. vizion.analyze({folder: testRepoPath}, function (err, meta) {
  32. if (err) {
  33. return done(err);
  34. }
  35. expect(meta.prev_rev).to.eq(null);
  36. expect(meta.revision).to.eq('445c0b78e447e87eaec2140d32f67652108b434e');
  37. done();
  38. });
  39. }
  40. };
  41. vizion.prev({folder: testRepoPath}, callback);
  42. });
  43. it('should recursively upgrade to most recent commit', function (done) {
  44. var callback = function (err, meta) {
  45. if (err) {
  46. return done(err);
  47. }
  48. if (meta.success === true) {
  49. vizion.next({folder: testRepoPath}, callback);
  50. }
  51. else {
  52. expect(meta.success).to.eq(false);
  53. vizion.analyze({folder: testRepoPath}, function (err, meta) {
  54. if (err) {
  55. return done(err);
  56. }
  57. expect(meta.next_rev).to.eq(null);
  58. expect(meta.revision).to.eq('d1dee188a0d82f21c05a398704ac3237f5523ca7');
  59. done();
  60. });
  61. }
  62. };
  63. vizion.next({folder: testRepoPath}, callback);
  64. });
  65. describe('at head', function () {
  66. describe('analyze', function () {
  67. it('ok', function (done) {
  68. console.log('start')
  69. vizion.analyze({folder: testRepoPath}, function (err, meta) {
  70. if (err) {
  71. return done(err);
  72. }
  73. expect(meta.type).to.eq('git');
  74. expect(meta.url).to.eq('https://github.com/Unitech/angular-bridge.git');
  75. expect(meta.branch).to.eq('master');
  76. expect(meta.comment).to.eq('Merge pull request #17 from jorge-d/express_4\n\nExpress 4');
  77. expect(meta.unstaged).to.eq(false);
  78. expect(meta.branch).to.eq('master');
  79. expect(meta.remotes).to.deep.eq(['origin']);
  80. expect(meta.remote).to.eq('origin');
  81. expect(meta.branch_exists_on_remote).to.eq(true);
  82. expect(meta.ahead).to.eq(false);
  83. expect(meta.next_rev).to.eq(null);
  84. expect(meta.prev_rev).to.eq('da29de44b4884c595468b6978fb19f17bee76893');
  85. expect(meta.tags).to.deep.eq(['v0.3.4']);
  86. tmp_meta = meta;
  87. done();
  88. });
  89. });
  90. });
  91. describe('isUpToDate', function () {
  92. it('up to date', function (done) {
  93. vizion.isUpToDate({
  94. folder: testRepoPath
  95. }, function (err, meta) {
  96. if (err) {
  97. return done(err);
  98. }
  99. expect(meta.is_up_to_date).to.eq(true);
  100. done();
  101. });
  102. });
  103. });
  104. });
  105. describe('previous commit', function () {
  106. before(function beforeTest(done) {
  107. vizion.revertTo({
  108. folder: testRepoPath,
  109. revision: 'eb488c1ca9024b6da2d65ef34dc1544244d8c714'
  110. }, function (err, meta) {
  111. if (err) {
  112. return done(err);
  113. }
  114. expect(meta.success).to.eq(true);
  115. done();
  116. });
  117. });
  118. describe('analyze', function () {
  119. it('ok', function it(done) {
  120. vizion.analyze({folder: testRepoPath}, function (err, meta) {
  121. if (err) {
  122. return done(err);
  123. }
  124. expect(meta.type).to.eq('git');
  125. expect(meta.branch).to.eq('master');
  126. expect(meta.comment).to.eq('Fix indentation\n');
  127. expect(meta.unstaged).to.eq(false);
  128. expect(meta.branch).to.eq('master');
  129. expect(meta.remotes).to.deep.eq(['origin']);
  130. expect(meta.remote).to.eq('origin');
  131. expect(meta.branch_exists_on_remote).to.eq(true);
  132. expect(meta.ahead).to.eq(false);
  133. expect(meta.next_rev).to.eq('759120ab5b19953886424b7c847879cf7f4cb28e');
  134. expect(meta.prev_rev).to.eq('0c0cb178a3de0b8c69a81d1fd2f0d72fe0f23a11');
  135. expect(meta.tags).to.deep.eq(['v0.3.4']);
  136. done();
  137. });
  138. });
  139. });
  140. describe('isUpToDate', function () {
  141. it('not up to date', function (done) {
  142. vizion.isUpToDate({
  143. folder: testRepoPath
  144. }, function (err, meta) {
  145. if (err) {
  146. return done(err);
  147. }
  148. expect(meta.is_up_to_date).to.eq(false);
  149. done();
  150. });
  151. });
  152. });
  153. describe('update', function () {
  154. it('should update to latest', function (done) {
  155. vizion.update({
  156. folder: testRepoPath
  157. }, function (err, meta) {
  158. if (err) {
  159. return done(err);
  160. }
  161. expect(meta.success).to.eq(true);
  162. vizion.analyze({folder: testRepoPath}, function (err, meta) {
  163. if (err) {
  164. return done(err);
  165. }
  166. expect(meta.revision).to.eq('d1dee188a0d82f21c05a398704ac3237f5523ca7');
  167. done();
  168. });
  169. });
  170. });
  171. });
  172. });
  173. });