Public API for a society manager application

events-ops-spec.js 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  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("PUT /events/edit/:eventid", function () {
  193. it("can edit events", function (done) {
  194. request({
  195. url: base_url + "/events/edit/" + event_id,
  196. method: "PUT",
  197. json: {
  198. auth: foo123auth,
  199. name: "FooFooFoo"
  200. }
  201. }, function (error, response, body) {
  202. expect(response.statusCode).toBe(200);
  203. expect(body.success).toBe(1);
  204. expect(body.error).toBe(0);
  205. done();
  206. });
  207. });
  208. it("rejects invalid auth keys", function (done) {
  209. request({
  210. url: base_url + "/events/edit/" + event_id,
  211. method: "PUT",
  212. json: {
  213. auth: "nah",
  214. name: "FooFooFoo"
  215. }
  216. }, function (error, response, body) {
  217. expect(response.statusCode).toBe(200);
  218. expect(body.success).toBe(0);
  219. expect(body.error).toBe(1);
  220. done();
  221. });
  222. });
  223. it("rejects invalid dates", function (done) {
  224. request({
  225. url: base_url + "/events/edit/" + event_id,
  226. method: "PUT",
  227. json: {
  228. auth: foo123auth,
  229. start: 5
  230. }
  231. }, function (error, response, body) {
  232. expect(response.statusCode).toBe(200);
  233. expect(body.success).toBe(0);
  234. expect(body.error).toBe(3);
  235. done();
  236. });
  237. });
  238. it("does not edit non existant events", function (done) {
  239. request({
  240. url: base_url + "/events/edit/nah",
  241. method: "PUT",
  242. json: {
  243. auth: foo123auth,
  244. name: "FooFooFoo"
  245. }
  246. }, function (error, response, body) {
  247. expect(response.statusCode).toBe(200);
  248. expect(body.success).toBe(0);
  249. expect(body.error).toBe(2);
  250. done();
  251. });
  252. });
  253. it("rejects malformed requests", function (done) {
  254. request({
  255. url: base_url + "/events/edit/nah",
  256. method: "PUT",
  257. json: {
  258. auth: foo123auth,
  259. }
  260. }, function (error, response, body) {
  261. expect(response.statusCode).toBe(200);
  262. expect(body.success).toBe(0);
  263. expect(body.error).toBe(4);
  264. done();
  265. });
  266. });
  267. });
  268. describe("POST /events/accept/:eventid", function () {
  269. it("can accept events", function (done) {
  270. request({
  271. url: base_url + "/events/accept/" + event_id,
  272. method: "POST",
  273. json: {
  274. auth: foo123auth
  275. }
  276. }, function (error, response, body) {
  277. expect(response.statusCode).toBe(200);
  278. expect(body.success).toBe(1);
  279. expect(body.error).toBe(0);
  280. done();
  281. });
  282. });
  283. it("rejects non existant events", function (done) {
  284. request({
  285. url: base_url + "/events/accept/nah",
  286. method: "POST",
  287. json: {
  288. auth: foo123auth
  289. }
  290. }, function (error, response, body) {
  291. expect(response.statusCode).toBe(200);
  292. expect(body.success).toBe(0);
  293. expect(body.error).toBe(2);
  294. done();
  295. });
  296. });
  297. it("rejects invalid auth key", function (done) {
  298. request({
  299. url: base_url + "/events/accept/" + event_id,
  300. method: "POST",
  301. json: {
  302. auth: "nah"
  303. }
  304. }, function (error, response, body) {
  305. expect(response.statusCode).toBe(200);
  306. expect(body.success).toBe(0);
  307. expect(body.error).toBe(1);
  308. done();
  309. });
  310. });
  311. it("rejects malformed requests", function (done) {
  312. request({
  313. url: base_url + "/events/accept/" + event_id,
  314. method: "POST",
  315. json: {
  316. auuth: foo123auth
  317. }
  318. }, function (error, response, body) {
  319. expect(response.statusCode).toBe(200);
  320. expect(body.success).toBe(0);
  321. expect(body.error).toBe(3);
  322. done();
  323. });
  324. });
  325. });
  326. describe("GET /events/accepted/", function () {
  327. it("can view accepted events", function (done) {
  328. request({
  329. url: base_url + "/events/accepted/",
  330. method: "GET",
  331. qs: {
  332. auth: foo123auth
  333. }
  334. }, function (error, response, body) {
  335. body = JSON.parse(body);
  336. expect(response.statusCode).toBe(200);
  337. expect(Array.isArray(body.accepted_events)).toBe(true);
  338. expect(body.accepted_events.length).toBe(1);
  339. expect(body.error).toBe(0);
  340. done();
  341. });
  342. });
  343. it("rejects invalid auth keys", function (done) {
  344. request({
  345. url: base_url + "/events/accepted/",
  346. method: "GET",
  347. qs: {
  348. auth: "nah"
  349. }
  350. }, function (error, response, body) {
  351. body = JSON.parse(body);
  352. expect(response.statusCode).toBe(200);
  353. expect(Array.isArray(body.accepted_events)).toBe(true);
  354. expect(body.accepted_events.length).toBe(0);
  355. expect(body.error).toBe(1);
  356. done();
  357. });
  358. });
  359. it("rejects malformed request", function (done) {
  360. request({
  361. url: base_url + "/events/accepted/",
  362. method: "GET",
  363. }, function (error, response, body) {
  364. body = JSON.parse(body);
  365. expect(response.statusCode).toBe(200);
  366. expect(Array.isArray(body.accepted_events)).toBe(true);
  367. expect(body.accepted_events.length).toBe(0);
  368. expect(body.error).toBe(2);
  369. done();
  370. });
  371. });
  372. });
  373. describe("POST /events/decline/:eventid", function () {
  374. it("can decline events", function (done) {
  375. request({
  376. url: base_url + "/events/decline/" + event_id,
  377. method: "POST",
  378. json: {
  379. auth: foo123auth
  380. }
  381. }, function (error, response, body) {
  382. expect(response.statusCode).toBe(200);
  383. expect(body.success).toBe(1);
  384. expect(body.error).toBe(0);
  385. done();
  386. });
  387. });
  388. it("rejects non existant events", function (done) {
  389. request({
  390. url: base_url + "/events/decline/nah",
  391. method: "POST",
  392. json: {
  393. auth: foo123auth
  394. }
  395. }, function (error, response, body) {
  396. expect(response.statusCode).toBe(200);
  397. expect(body.success).toBe(0);
  398. expect(body.error).toBe(2);
  399. done();
  400. });
  401. });
  402. it("rejects invalid auth key", function (done) {
  403. request({
  404. url: base_url + "/events/decline/" + event_id,
  405. method: "POST",
  406. json: {
  407. auth: "nah"
  408. }
  409. }, function (error, response, body) {
  410. expect(response.statusCode).toBe(200);
  411. expect(body.success).toBe(0);
  412. expect(body.error).toBe(1);
  413. done();
  414. });
  415. });
  416. it("rejects malformed requests", function (done) {
  417. request({
  418. url: base_url + "/events/decline/" + event_id,
  419. method: "POST",
  420. json: {
  421. auuth: foo123auth
  422. }
  423. }, function (error, response, body) {
  424. expect(response.statusCode).toBe(200);
  425. expect(body.success).toBe(0);
  426. expect(body.error).toBe(3);
  427. done();
  428. });
  429. });
  430. });
  431. describe("GET /events/declined/", function () {
  432. it("can view declined events", function (done) {
  433. request({
  434. url: base_url + "/events/declined/",
  435. method: "GET",
  436. qs: {
  437. auth: foo123auth
  438. }
  439. }, function (error, response, body) {
  440. body = JSON.parse(body);
  441. expect(response.statusCode).toBe(200);
  442. expect(Array.isArray(body.declined_events)).toBe(true);
  443. expect(body.declined_events.length).toBe(1);
  444. expect(body.error).toBe(0);
  445. done();
  446. });
  447. });
  448. it("rejects invalid auth keys", function (done) {
  449. request({
  450. url: base_url + "/events/declined/",
  451. method: "GET",
  452. qs: {
  453. auth: "nah"
  454. }
  455. }, function (error, response, body) {
  456. body = JSON.parse(body);
  457. expect(response.statusCode).toBe(200);
  458. expect(Array.isArray(body.declined_events)).toBe(true);
  459. expect(body.declined_events.length).toBe(0);
  460. expect(body.error).toBe(1);
  461. done();
  462. });
  463. });
  464. it("rejects malformed request", function (done) {
  465. request({
  466. url: base_url + "/events/declined/",
  467. method: "GET",
  468. }, function (error, response, body) {
  469. body = JSON.parse(body);
  470. expect(response.statusCode).toBe(200);
  471. expect(Array.isArray(body.declined_events)).toBe(true);
  472. expect(body.declined_events.length).toBe(0);
  473. expect(body.error).toBe(2);
  474. done();
  475. });
  476. });
  477. });
  478. describe("POST /events/cancel/:eventid", function () {
  479. it("rejects invalid auth key", function (done) {
  480. request(join_soc("foo123soc", foo789auth), function (error, response, body) {
  481. request({
  482. url: base_url + "/events/cancel/" + event_id,
  483. method: "POST",
  484. json: {
  485. auth: foo789auth
  486. }
  487. }, function (error, response, body) {
  488. expect(response.statusCode).toBe(200);
  489. expect(body.success).toBe(0);
  490. expect(body.error).toBe(1);
  491. done();
  492. });
  493. });
  494. });
  495. it("can cancel events", function (done) {
  496. request({
  497. url: base_url + "/events/cancel/" + event_id,
  498. method: "POST",
  499. json: {
  500. auth: foo123auth
  501. }
  502. }, function (error, response, body) {
  503. expect(response.statusCode).toBe(200);
  504. expect(body.success).toBe(1);
  505. expect(body.error).toBe(0);
  506. done();
  507. });
  508. });
  509. it("rejects non existant events", function (done) {
  510. request({
  511. url: base_url + "/events/cancel/nah/",
  512. method: "POST",
  513. json: {
  514. auth: foo123auth
  515. }
  516. }, function (error, response, body) {
  517. expect(response.statusCode).toBe(200);
  518. expect(body.success).toBe(0);
  519. expect(body.error).toBe(2);
  520. done();
  521. });
  522. });
  523. it("rejects malformed requests", function (done) {
  524. request({
  525. url: base_url + "/events/cancel/" + event_id,
  526. method: "POST",
  527. json: {
  528. auuth: foo123auth
  529. }
  530. }, function (error, response, body) {
  531. expect(response.statusCode).toBe(200);
  532. expect(body.success).toBe(0);
  533. expect(body.error).toBe(3);
  534. done();
  535. });
  536. });
  537. });
  538. });