PageRenderTime 61ms CodeModel.GetById 36ms RepoModel.GetById 0ms app.codeStats 0ms

/test/test.js

https://github.com/trentm/molybdenum
JavaScript | 421 lines | 362 code | 21 blank | 38 comment | 19 complexity | c0f93c2446d8e07a76c65dfdabb42116 MD5 | raw file
  1. /* 'molybdenum' test suite
  2. *
  3. * Usage:
  4. * nodeunit test.js
  5. */
  6. var path = require('path');
  7. var sys = require('sys');
  8. var exec = require('child_process').exec;
  9. var fs = require('fs');
  10. var base64 = require('base64')
  11. var testCase = require('nodeunit').testCase;
  12. var request = require('request');
  13. var log = console.warn;
  14. var testData = {
  15. "GET /api # HTML": function(test) {
  16. request({
  17. uri: 'http://localhost:3334/api',
  18. headers: {
  19. "Accept": "text/html",
  20. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  21. }
  22. }, function (error, response, body) {
  23. test.equal(response.statusCode, 200);
  24. //log(body)
  25. test.ok(body.indexOf("<html") != -1, "no <html")
  26. test.ok(body.indexOf("Molybdenum API Documentation") != -1,
  27. "no 'Molybdenum API Documentation'")
  28. test.done();
  29. });
  30. },
  31. "GET /api # JSON": function(test) {
  32. request({
  33. uri:'http://localhost:3334/api',
  34. headers: {
  35. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  36. }
  37. }, function (error, response, body) {
  38. test.equal(response.statusCode, 200);
  39. var data = JSON.parse(body);
  40. test.ok(data.endpoints);
  41. test.done();
  42. });
  43. },
  44. "GET /api/repos": function(test) {
  45. request({
  46. uri:'http://localhost:3334/api/repos',
  47. headers: {
  48. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  49. }
  50. }, function (error, response, body) {
  51. test.equal(response.statusCode, 200);
  52. var data = JSON.parse(body);
  53. //log(body)
  54. test.ok(data.repositories);
  55. var eol = data.repositories.filter(function(r) { return r.name === "eol"; })[0];
  56. test.equal(eol.name, "eol");
  57. test.done();
  58. });
  59. },
  60. "GET /api/repos/:repo": function(test) {
  61. request({
  62. uri:'http://localhost:3334/api/repos/eol',
  63. headers: {
  64. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  65. }
  66. }, function (error, response, body) {
  67. test.equal(response.statusCode, 200);
  68. //log(body)
  69. var data = JSON.parse(body);
  70. test.equal(data.repository.name, "eol");
  71. test.done();
  72. });
  73. },
  74. //"POST /api/repos/:repo": function(test) {
  75. // //TODO
  76. // test.done();
  77. //},
  78. "GET /api/repos/:repo/refs": function(test) {
  79. request({
  80. uri:'http://localhost:3334/api/repos/eol/refs',
  81. headers: {
  82. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  83. }
  84. }, function (error, response, body) {
  85. test.equal(response.statusCode, 200);
  86. //log(body)
  87. var data = JSON.parse(body);
  88. test.ok(data.branches.indexOf("master") != -1);
  89. test.ok(data.tags.indexOf("0.7.2") != -1);
  90. test.done();
  91. });
  92. },
  93. // GET /api/repos/:repo/refs/:ref[/:path]
  94. "GET /api/repos/:repo/refs/:ref": function(test) {
  95. request({
  96. uri:'http://localhost:3334/api/repos/eol/refs/master',
  97. headers: {
  98. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  99. }
  100. }, function (error, response, body) {
  101. test.equal(response.statusCode, 200);
  102. //log(body)
  103. var data = JSON.parse(body);
  104. test.equal(data.type, "tree");
  105. test.ok(data.tree);
  106. test.ok(data.tree.id);
  107. test.equal(data.tree.entries[0].name, ".gitignore");
  108. test.equal(data.ref, "master");
  109. test.equal(data.path, "");
  110. test.done();
  111. });
  112. },
  113. "GET /api/repos/:repo/refs/:ref # tag": function(test) {
  114. request({
  115. uri:'http://localhost:3334/api/repos/eol/refs/0.7.2',
  116. headers: {
  117. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  118. }
  119. }, function (error, response, body) {
  120. test.equal(response.statusCode, 200);
  121. //log(body)
  122. var data = JSON.parse(body);
  123. test.equal(data.type, "tree");
  124. test.ok(data.tree);
  125. test.ok(data.tree.id);
  126. test.equal(data.tree.entries[0].name, ".gitignore");
  127. test.equal(data.ref, "0.7.2");
  128. test.equal(data.path, "");
  129. test.done();
  130. });
  131. },
  132. //TODO: on a project with a branch
  133. "GET /api/repos/:repo/commit/:id # sha1": function(test) {
  134. var id = "1a071c8728d57845ed76de67b8e0cbf2caa63915"
  135. request({
  136. uri:'http://localhost:3334/api/repos/eol/commit/'+id,
  137. headers: {
  138. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  139. }
  140. }, function (error, response, body) {
  141. test.equal(response.statusCode, 200);
  142. //log(body)
  143. var data = JSON.parse(body);
  144. test.ok(data.commit);
  145. test.ok(data.commit.tree);
  146. test.ok(data.commit.parents);
  147. test.equal(data.commit.id, id);
  148. test.equal(data.commit.message, "changelog update");
  149. test.equal(data.commit.author.name, "Trent Mick");
  150. test.done();
  151. });
  152. },
  153. "GET /api/repos/:repo/commit/:id # sha1 prefix": function(test) {
  154. var id = "1a071c8728d57845ed76de67b8e0cbf2caa63915";
  155. request({
  156. uri:'http://localhost:3334/api/repos/eol/commit/'+id.slice(0, 8),
  157. headers: {
  158. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  159. }
  160. }, function (error, response, body) {
  161. test.equal(response.statusCode, 200);
  162. //log(body)
  163. var data = JSON.parse(body);
  164. test.ok(data.commit);
  165. test.ok(data.commit.tree);
  166. test.ok(data.commit.parents);
  167. test.equal(data.commit.id, id);
  168. test.equal(data.commit.message, "changelog update");
  169. test.equal(data.commit.author.name, "Trent Mick");
  170. test.done();
  171. });
  172. },
  173. "GET /api/repos/:repo/commit/:id # non-existant sha1": function(test) {
  174. var id = "abcdef";
  175. request({
  176. uri:'http://localhost:3334/api/repos/eol/commit/'+id,
  177. headers: {
  178. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  179. }
  180. }, function (error, response, body) {
  181. test.equal(response.statusCode, 404);
  182. //log(body)
  183. var data = JSON.parse(body);
  184. test.ok(data.error);
  185. test.ok(/not found/.test(data.error.message));
  186. test.equal(data.error.code, 404);
  187. test.done();
  188. });
  189. },
  190. "GET /api/repos/:repo/commit/:id # not head sha1": function(test) {
  191. var id = "86fb0c2c2c37e71c218d386cc3f167496ce98c57"
  192. request({
  193. uri:'http://localhost:3334/api/repos/eol/commit/'+id,
  194. headers: {
  195. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  196. }
  197. }, function (error, response, body) {
  198. test.equal(response.statusCode, 200);
  199. //log(body)
  200. var data = JSON.parse(body);
  201. test.ok(data.commit);
  202. test.ok(data.commit.tree);
  203. test.ok(data.commit.parents);
  204. test.equal(data.commit.id, id);
  205. test.equal(data.commit.author.name, "Trent Mick");
  206. test.done();
  207. });
  208. },
  209. "GET /api/repos/:repo/commit/:id # ref": function(test) {
  210. var id = "1a071c8728d57845ed76de67b8e0cbf2caa63915"
  211. request({
  212. uri:'http://localhost:3334/api/repos/eol/commit/master',
  213. headers: {
  214. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  215. }
  216. }, function (error, response, body) {
  217. test.equal(response.statusCode, 200);
  218. //log(body)
  219. var data = JSON.parse(body);
  220. test.ok(data.commit);
  221. test.ok(data.commit.tree);
  222. test.ok(data.commit.parents);
  223. test.equal(data.commit.id, id);
  224. test.equal(data.commit.message, "changelog update");
  225. test.equal(data.commit.author.name, "Trent Mick");
  226. test.done();
  227. });
  228. },
  229. //TODO: on a project with a branch
  230. //"GET /api/commit/:id": function(test) {
  231. // //TODO
  232. // test.done();
  233. // }
  234. //"GET /api/repos/:repo/refs/:ref/:path": function(test) {
  235. // //TODO
  236. // test.done();
  237. //}
  238. //TODO: all the other non-api endpoints
  239. "GET /": function(test) {
  240. request({
  241. uri:'http://localhost:3334/',
  242. headers: {
  243. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  244. }
  245. }, function (error, response, body) {
  246. test.equal(response.statusCode, 200);
  247. //log(body)
  248. test.ok(body.indexOf('href="/eol"') != -1)
  249. test.done();
  250. });
  251. },
  252. "GET /:repo/tree/:ref # tag": function(test) {
  253. request({
  254. uri:'http://localhost:3334/eol/tree/0.7.2',
  255. headers: {
  256. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  257. }
  258. }, function (error, response, body) {
  259. test.equal(response.statusCode, 200);
  260. //log(body)
  261. test.ok(body.indexOf("/eol/tree/0.7.2/lib") != -1)
  262. test.ok(body.indexOf("/eol/blob/0.7.2/.gitignore") != -1)
  263. test.done();
  264. });
  265. },
  266. "GET /:repo/tree/:ref/:path # tag": function(test) {
  267. request({
  268. uri:'http://localhost:3334/eol/tree/0.7.2/lib',
  269. headers: {
  270. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  271. }
  272. }, function (error, response, body) {
  273. test.equal(response.statusCode, 200);
  274. //log(body)
  275. test.ok(body.indexOf("/eol/blob/0.7.2/lib/eol.py") != -1)
  276. test.done();
  277. });
  278. },
  279. "GET /:repo/blob/:ref/:path # tag": function(test) {
  280. request({
  281. uri:'http://localhost:3334/eol/tree/0.7.2/lib/eol.py',
  282. headers: {
  283. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  284. }
  285. }, function (error, response, body) {
  286. test.equal(response.statusCode, 200);
  287. //log(body)
  288. test.ok(body.indexOf("/eol/raw/0.7.2/lib/eol.py") != -1)
  289. test.ok(body.indexOf("#!/usr/bin/env python") != -1)
  290. test.done();
  291. });
  292. },
  293. "GET /:repo/blob/:ref/:path # 404": function(test) {
  294. request({
  295. uri:'http://localhost:3334/eol/blob/0.7.2x/lib/eol.py',
  296. headers: {
  297. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  298. }
  299. }, function (error, response, body) {
  300. test.equal(response.statusCode, 404);
  301. test.ok(body.indexOf("404") != -1)
  302. test.done();
  303. });
  304. },
  305. "GET /:repo/blob/:ref/:path # 404 also": function(test) {
  306. request({
  307. uri:'http://localhost:3334/eol/blob/0.7.2/lib/doesnotexist.py',
  308. headers: {
  309. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  310. }
  311. }, function (error, response, body) {
  312. test.equal(response.statusCode, 404);
  313. test.ok(body.indexOf("404") != -1)
  314. test.done();
  315. });
  316. },
  317. "GET /:repo/tree/:ref/:path # 404": function(test) {
  318. request({
  319. uri:'http://localhost:3334/eol/blob/0.7.2x/lib',
  320. headers: {
  321. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  322. }
  323. }, function (error, response, body) {
  324. test.equal(response.statusCode, 404);
  325. test.ok(body.indexOf("404") != -1)
  326. test.done();
  327. });
  328. },
  329. "GET /:repo/tree/:ref/:path # 404 also": function(test) {
  330. request({
  331. uri:'http://localhost:3334/eol/blob/0.7.2/doesnotexist',
  332. headers: {
  333. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  334. }
  335. }, function (error, response, body) {
  336. test.equal(response.statusCode, 404);
  337. test.ok(body.indexOf("404") != -1)
  338. test.done();
  339. });
  340. },
  341. "GET /:repo/commit/:id": function(test) {
  342. request({
  343. uri:'http://localhost:3334/eol/commit/86fb0c2c2c37e71c',
  344. headers: {
  345. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  346. }
  347. }, function (error, response, body) {
  348. test.equal(response.statusCode, 200);
  349. test.ok(body.indexOf("--- a/MANIFEST.in") != -1)
  350. test.done();
  351. });
  352. },
  353. "GET /:repo/commit/:id # 404": function(test) {
  354. request({
  355. uri:'http://localhost:3334/eol/commit/badbad',
  356. headers: {
  357. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  358. }
  359. }, function (error, response, body) {
  360. test.equal(response.statusCode, 404);
  361. test.ok(body.indexOf("404") != -1)
  362. test.done();
  363. });
  364. },
  365. "GET /commit/:id": function(test) {
  366. request({
  367. uri:'http://localhost:3334/commit/86fb0c2c2c37e71c',
  368. headers: {
  369. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  370. }
  371. }, function (error, response, body) {
  372. //log(body);
  373. test.equal(response.statusCode, 200);
  374. test.ok(body.indexOf("--- a/MANIFEST.in") != -1)
  375. test.done();
  376. });
  377. },
  378. "GET /commit/:id # 404": function(test) {
  379. request({
  380. uri:'http://localhost:3334/commit/badbad',
  381. headers: {
  382. "Authorization": "Basic "+base64.encode('kermit:thefrog')
  383. }
  384. }, function (error, response, body) {
  385. //log(body);
  386. test.equal(response.statusCode, 404);
  387. test.done();
  388. });
  389. },
  390. "": {} // F'ing trailing comma.
  391. };
  392. if (process.env.TEST_ONLY !== undefined) {
  393. var re = new RegExp(process.env.TEST_ONLY);
  394. Object.keys(testData).map(function (key) {
  395. if (!re.test(key)) {
  396. delete testData[key];
  397. }
  398. });
  399. }
  400. exports['test'] = testCase(testData);