Public API for a society manager application

events-ops-spec.js 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. var request = require("request");
  2. var base_url = "http://localhost:3000";
  3. describe("Events Operations", function () {
  4. var event_create = function (auth_key, time) {
  5. var mydate = Date.now() + 1000000;
  6. if (time) {
  7. mydate = 10;
  8. }
  9. return {
  10. url: base_url + "/events/create",
  11. method: "POST",
  12. json: {
  13. society: "foo123soc",
  14. name: "event",
  15. location: "location",
  16. start: mydate,
  17. end: mydate+10,
  18. details: "some details",
  19. auth: auth_key
  20. }
  21. }
  22. };
  23. var auth_user = function (username) {
  24. return {
  25. url: base_url + "/user/auth/",
  26. method: "POST",
  27. json: {
  28. user: username,
  29. password: "foofoo"
  30. }
  31. };
  32. };
  33. var join_soc = function (soc_name, auth_key) {
  34. return {
  35. url: base_url + "/society/join/",
  36. method: "POST",
  37. json: {
  38. society: soc_name,
  39. auth: auth_key
  40. }
  41. };
  42. };
  43. var foo123auth;
  44. var foo789auth;
  45. var event_id;
  46. describe("POST /events/create/", function () {
  47. it("can create an event", function (done) {
  48. request(auth_user("foo123"), function (error, response, body) {
  49. foo123auth = body["auth-key"];
  50. request(event_create(foo123auth), function (error, response, body) {
  51. event_id = body.event.id;
  52. expect(response.statusCode).toBe(200);
  53. expect(body.success).toBe(1);
  54. expect(typeof body.event.name).toBe("string");
  55. expect(body.error).toBe(0);
  56. done();
  57. });
  58. });
  59. });
  60. it("fails to create if user is not an admin", function (done) {
  61. request(auth_user("foo789"), function (error, response, body) {
  62. foo789auth = body["auth-key"];
  63. request(join_soc("foo123soc", foo789auth), function (error, response, body) {
  64. request(event_create(foo789auth), function (error, response, body) {
  65. expect(response.statusCode).toBe(200);
  66. expect(body.success).toBe(0);
  67. expect(typeof body.event).toBe("undefined");
  68. expect(body.error).toBe(1);
  69. done();
  70. });
  71. })
  72. });
  73. });
  74. it("fails to create if times are invalid", function (done) {
  75. request(event_create(foo123auth, true), function (error, response, body) {
  76. expect(response.statusCode).toBe(200);
  77. expect(body.success).toBe(0);
  78. expect(typeof body.event).toBe("undefined");
  79. expect(body.error).toBe(2);
  80. done();
  81. });
  82. });
  83. it("rejects malformed requests", function (done) {
  84. request({
  85. url: base_url + "/events/create/",
  86. method: "POST",
  87. json: {
  88. yeah: "no"
  89. }
  90. }, function (error, response, body) {
  91. expect(response.statusCode).toBe(200);
  92. expect(body.success).toBe(0);
  93. expect(typeof body.event).toBe("undefined");
  94. expect(body.error).toBe(3);
  95. done();
  96. });
  97. });
  98. }); //end POST /events/create/
  99. describe("GET /events/view/:eventid", function () {
  100. it("can view an event", function (done) {
  101. request({
  102. url: base_url + "/events/view/" + event_id,
  103. method: "GET",
  104. qs: {
  105. auth: foo123auth
  106. }
  107. }, function (error, response, body) {
  108. body = JSON.parse(body);
  109. expect(response.statusCode).toBe(200);
  110. expect(typeof body.event.name).toBe("string");
  111. expect(body.error).toBe(0);
  112. done();
  113. });
  114. });
  115. it("does not show non existant events", function (done) {
  116. request({
  117. url: base_url + "/events/view/nah",
  118. method: "GET",
  119. qs: {
  120. auth: foo123auth
  121. }
  122. }, function (error, response, body) {
  123. body = JSON.parse(body);
  124. expect(response.statusCode).toBe(200);
  125. expect(body.event).not.toBe(null);
  126. expect(JSON.stringify(body.event)).toEqual(JSON.stringify({}));
  127. expect(body.error).toBe(1);
  128. done();
  129. });
  130. });
  131. it("rejects malformed request", function (done) {
  132. request({
  133. url: base_url + "/events/view/nah",
  134. method: "GET",
  135. }, function (error, response, body) {
  136. body = JSON.parse(body);
  137. expect(response.statusCode).toBe(200);
  138. expect(body.event).not.toBe(null);
  139. expect(JSON.stringify(body.event)).toEqual(JSON.stringify({}));
  140. expect(body.error).toBe(2);
  141. done();
  142. });
  143. });
  144. });
  145. describe("GET /events/pending/", function () {
  146. it("can view pending events", function (done) {
  147. request({
  148. url: base_url + "/events/pending/",
  149. method: "GET",
  150. qs: {
  151. auth: foo123auth
  152. }
  153. }, function (error, response, body) {
  154. body = JSON.parse(body);
  155. expect(response.statusCode).toBe(200);
  156. expect(Array.isArray(body.pending_events)).toBe(true);
  157. expect(body.pending_events.length).toBe(1);
  158. expect(body.error).toBe(0);
  159. done();
  160. });
  161. });
  162. it("rejects invalid auth keys", function (done) {
  163. request({
  164. url: base_url + "/events/pending/",
  165. method: "GET",
  166. qs: {
  167. auth: "nah"
  168. }
  169. }, function (error, response, body) {
  170. body = JSON.parse(body);
  171. expect(response.statusCode).toBe(200);
  172. expect(Array.isArray(body.pending_events)).toBe(true);
  173. expect(body.pending_events.length).toBe(0);
  174. expect(body.error).toBe(1);
  175. done();
  176. });
  177. });
  178. it("rejects malformed request", function (done) {
  179. request({
  180. url: base_url + "/events/pending/",
  181. method: "GET",
  182. }, function (error, response, body) {
  183. body = JSON.parse(body);
  184. expect(response.statusCode).toBe(200);
  185. expect(Array.isArray(body.pending_events)).toBe(true);
  186. expect(body.pending_events.length).toBe(0);
  187. expect(body.error).toBe(2);
  188. done();
  189. });
  190. });
  191. });
  192. describe("POST /events/accept/:eventid", function () {
  193. it("can accept events", function (done) {
  194. request({
  195. url: base_url + "/events/accept/" + event_id,
  196. method: "POST",
  197. json: {
  198. auth: foo123auth
  199. }
  200. }, function (error, response, body) {
  201. expect(response.statusCode).toBe(200);
  202. expect(body.success).toBe(1);
  203. expect(body.error).toBe(0);
  204. done();
  205. });
  206. });
  207. it("rejects non existant events", function (done) {
  208. request({
  209. url: base_url + "/events/accept/nah",
  210. method: "POST",
  211. json: {
  212. auth: foo123auth
  213. }
  214. }, function (error, response, body) {
  215. expect(response.statusCode).toBe(200);
  216. expect(body.success).toBe(0);
  217. expect(body.error).toBe(2);
  218. done();
  219. });
  220. });
  221. it("rejects invalid auth key", function (done) {
  222. request({
  223. url: base_url + "/events/accept/" + event_id,
  224. method: "POST",
  225. json: {
  226. auth: "nah"
  227. }
  228. }, function (error, response, body) {
  229. expect(response.statusCode).toBe(200);
  230. expect(body.success).toBe(0);
  231. expect(body.error).toBe(1);
  232. done();
  233. });
  234. });
  235. it("rejects malformed requests", function (done) {
  236. request({
  237. url: base_url + "/events/accept/" + event_id,
  238. method: "POST",
  239. json: {
  240. auuth: foo123auth
  241. }
  242. }, function (error, response, body) {
  243. expect(response.statusCode).toBe(200);
  244. expect(body.success).toBe(0);
  245. expect(body.error).toBe(3);
  246. done();
  247. });
  248. });
  249. });
  250. describe("GET /events/accepted/", function () {
  251. it("can view accepted events", function (done) {
  252. request({
  253. url: base_url + "/events/accepted/",
  254. method: "GET",
  255. qs: {
  256. auth: foo123auth
  257. }
  258. }, function (error, response, body) {
  259. body = JSON.parse(body);
  260. expect(response.statusCode).toBe(200);
  261. expect(Array.isArray(body.accepted_events)).toBe(true);
  262. expect(body.accepted_events.length).toBe(1);
  263. expect(body.error).toBe(0);
  264. done();
  265. });
  266. });
  267. it("rejects invalid auth keys", function (done) {
  268. request({
  269. url: base_url + "/events/accepted/",
  270. method: "GET",
  271. qs: {
  272. auth: "nah"
  273. }
  274. }, function (error, response, body) {
  275. body = JSON.parse(body);
  276. expect(response.statusCode).toBe(200);
  277. expect(Array.isArray(body.accepted_events)).toBe(true);
  278. expect(body.accepted_events.length).toBe(0);
  279. expect(body.error).toBe(1);
  280. done();
  281. });
  282. });
  283. it("rejects malformed request", function (done) {
  284. request({
  285. url: base_url + "/events/accepted/",
  286. method: "GET",
  287. }, function (error, response, body) {
  288. body = JSON.parse(body);
  289. expect(response.statusCode).toBe(200);
  290. expect(Array.isArray(body.accepted_events)).toBe(true);
  291. expect(body.accepted_events.length).toBe(0);
  292. expect(body.error).toBe(2);
  293. done();
  294. });
  295. });
  296. });
  297. describe("POST /events/decline/:eventid", function () {
  298. it("can decline events", function (done) {
  299. request({
  300. url: base_url + "/events/decline/" + event_id,
  301. method: "POST",
  302. json: {
  303. auth: foo123auth
  304. }
  305. }, function (error, response, body) {
  306. expect(response.statusCode).toBe(200);
  307. expect(body.success).toBe(1);
  308. expect(body.error).toBe(0);
  309. done();
  310. });
  311. });
  312. it("rejects non existant events", function (done) {
  313. request({
  314. url: base_url + "/events/decline/nah",
  315. method: "POST",
  316. json: {
  317. auth: foo123auth
  318. }
  319. }, function (error, response, body) {
  320. expect(response.statusCode).toBe(200);
  321. expect(body.success).toBe(0);
  322. expect(body.error).toBe(2);
  323. done();
  324. });
  325. });
  326. it("rejects invalid auth key", function (done) {
  327. request({
  328. url: base_url + "/events/decline/" + event_id,
  329. method: "POST",
  330. json: {
  331. auth: "nah"
  332. }
  333. }, function (error, response, body) {
  334. expect(response.statusCode).toBe(200);
  335. expect(body.success).toBe(0);
  336. expect(body.error).toBe(1);
  337. done();
  338. });
  339. });
  340. it("rejects malformed requests", function (done) {
  341. request({
  342. url: base_url + "/events/decline/" + event_id,
  343. method: "POST",
  344. json: {
  345. auuth: foo123auth
  346. }
  347. }, function (error, response, body) {
  348. expect(response.statusCode).toBe(200);
  349. expect(body.success).toBe(0);
  350. expect(body.error).toBe(3);
  351. done();
  352. });
  353. });
  354. });
  355. describe("GET /events/declined/", function () {
  356. it("can view declined events", function (done) {
  357. request({
  358. url: base_url + "/events/declined/",
  359. method: "GET",
  360. qs: {
  361. auth: foo123auth
  362. }
  363. }, function (error, response, body) {
  364. body = JSON.parse(body);
  365. expect(response.statusCode).toBe(200);
  366. expect(Array.isArray(body.declined_events)).toBe(true);
  367. expect(body.declined_events.length).toBe(1);
  368. expect(body.error).toBe(0);
  369. done();
  370. });
  371. });
  372. it("rejects invalid auth keys", function (done) {
  373. request({
  374. url: base_url + "/events/declined/",
  375. method: "GET",
  376. qs: {
  377. auth: "nah"
  378. }
  379. }, function (error, response, body) {
  380. body = JSON.parse(body);
  381. expect(response.statusCode).toBe(200);
  382. expect(Array.isArray(body.declined_events)).toBe(true);
  383. expect(body.declined_events.length).toBe(0);
  384. expect(body.error).toBe(1);
  385. done();
  386. });
  387. });
  388. it("rejects malformed request", function (done) {
  389. request({
  390. url: base_url + "/events/declined/",
  391. method: "GET",
  392. }, function (error, response, body) {
  393. body = JSON.parse(body);
  394. expect(response.statusCode).toBe(200);
  395. expect(Array.isArray(body.declined_events)).toBe(true);
  396. expect(body.declined_events.length).toBe(0);
  397. expect(body.error).toBe(2);
  398. done();
  399. });
  400. });
  401. });
  402. describe("POST /events/cancel/:eventid", function () {
  403. it("rejects invalid auth key", function (done) {
  404. request(join_soc("foo123soc", foo789auth), function (error, response, body) {
  405. request({
  406. url: base_url + "/events/cancel/" + event_id,
  407. method: "POST",
  408. json: {
  409. auth: foo789auth
  410. }
  411. }, function (error, response, body) {
  412. expect(response.statusCode).toBe(200);
  413. expect(body.success).toBe(0);
  414. expect(body.error).toBe(1);
  415. done();
  416. });
  417. });
  418. });
  419. it("can cancel events", function (done) {
  420. request({
  421. url: base_url + "/events/cancel/" + event_id,
  422. method: "POST",
  423. json: {
  424. auth: foo123auth
  425. }
  426. }, function (error, response, body) {
  427. expect(response.statusCode).toBe(200);
  428. expect(body.success).toBe(1);
  429. expect(body.error).toBe(0);
  430. done();
  431. });
  432. });
  433. it("rejects non existant events", function (done) {
  434. request({
  435. url: base_url + "/events/cancel/nah/",
  436. method: "POST",
  437. json: {
  438. auth: foo123auth
  439. }
  440. }, function (error, response, body) {
  441. expect(response.statusCode).toBe(200);
  442. expect(body.success).toBe(0);
  443. expect(body.error).toBe(2);
  444. done();
  445. });
  446. });
  447. it("rejects malformed requests", function (done) {
  448. request({
  449. url: base_url + "/events/cancel/" + event_id,
  450. method: "POST",
  451. json: {
  452. auuth: foo123auth
  453. }
  454. }, function (error, response, body) {
  455. expect(response.statusCode).toBe(200);
  456. expect(body.success).toBe(0);
  457. expect(body.error).toBe(3);
  458. done();
  459. });
  460. });
  461. });
  462. });