PageRenderTime 1585ms CodeModel.GetById 28ms RepoModel.GetById 6ms app.codeStats 0ms

/wwwroot/lib/tests/test_ucejs.js

http://github.com/AF83/ucengine
JavaScript | 816 lines | 747 code | 63 blank | 6 comment | 8 complexity | 98fa53050bdca9833a70bb9fd1e92d3e MD5 | raw file
  1. module('ucejs', {
  2. setup: function() {
  3. this.client = uce.createClient();
  4. },
  5. teardown: function() {
  6. $.mockjaxClear();
  7. }
  8. });
  9. var Factories = {
  10. createPresence: function() {
  11. return {"user": "myuid", "id": "mysid"};
  12. },
  13. getDefaultMeeting: function() {
  14. return uce.createClient().attachPresence(Factories.createPresence()).meeting("mymeeting");
  15. }
  16. };
  17. function jackTest(name, fun) {
  18. test(name, function() {
  19. var that = this;
  20. jack($.proxy(fun, that));
  21. ok(true, "mock are ok");
  22. });
  23. }
  24. function addUceApiCall(method, url, data, status, responseText, xhr, callback) {
  25. if (url[0] == "/")
  26. url = "/api/"+ uce.version + url;
  27. jack.expect("$.ajax")
  28. .exactly("1 time")
  29. .mock(function(args) {
  30. equals(args.type, method, "");
  31. equals(args.url, url, "");
  32. same(args.data, data, "");
  33. setTimeout(function() {
  34. args.complete({
  35. status : status,
  36. responseText: responseText
  37. });
  38. (callback || $.noop)();
  39. }, 1);
  40. return xhr;
  41. });
  42. }
  43. test("can be accessed via window.uce", function() {
  44. same(window.uce, uce, "");
  45. });
  46. jackTest("can create a presence", function() {
  47. stop();
  48. addUceApiCall("post", "/presence/", { "name": "name",
  49. "credential": "pwd" }, 200, '{"result": {"uid":"uid","sid":"sid"}}');
  50. var client = this.client;
  51. ok(!this.client.connected, "not connected");
  52. this.client.auth("name", "pwd", function(err, presence, xhr) {
  53. start();
  54. equals(err, null, "shoud not have error");
  55. equals(presence.user, "uid");
  56. equals(presence.id, "sid");
  57. equals(client.uid, "uid");
  58. ok(client.connected, "client connected");
  59. });
  60. });
  61. jackTest("can get a presence", function() {
  62. stop();
  63. $.mockjax({
  64. url : '/api/' + uce.version + '/presence/',
  65. responseText: {"result": {"uid":"myuid", "sid":"mysid"}}
  66. });
  67. $.mockjax({
  68. url : '/api/' + uce.version + '/presence/mysid',
  69. data: { "uid": "myuid", "sid": "mysid"},
  70. response: function() {
  71. this.responseText = {"result": {"uid": "myuid", "sid":"mysid"}};
  72. }
  73. });
  74. var client = this.client;
  75. this.client.auth("name", "pwd", function(err, presence) {
  76. client.presence(function(err, r, xhr) {
  77. start();
  78. equals(r.result.sid, presence.id);
  79. equals(err, null);
  80. });
  81. });
  82. });
  83. jackTest("can close a presence", function() {
  84. stop();
  85. $.mockjax({
  86. url : '/api/' + uce.version + '/presence/',
  87. responseText: {"result": {"uid":"myuid", "sid":"mysid"}}
  88. });
  89. $.mockjax({
  90. url : '/api/' + uce.version + '/presence/mysid',
  91. data: { "_method": "delete", "uid": "myuid", "sid": "mysid"},
  92. response: function() {
  93. this.responseText = {"result": "mysid"}
  94. }
  95. });
  96. var client = this.client;
  97. this.client.auth("name", "pwd", function(err, presence) {
  98. client.close(function(err, r, xhr) {
  99. start();
  100. ok(!client.connected, "not connected");
  101. equals(err, null);
  102. });
  103. });
  104. });
  105. jackTest("can list users", function() {
  106. stop();
  107. addUceApiCall("get", "/user/", {"uid": "myuid", "sid": "mysid"}, 200, '{"result" : [{"name": "myuser"}, {}]}');
  108. this.client.attachPresence(Factories.createPresence()).users.get(function(err, r, xhr) {
  109. start();
  110. equals(err, null);
  111. equals(r.length, 2);
  112. });
  113. });
  114. jackTest("can list meetings", function() {
  115. stop();
  116. addUceApiCall("get", "/meeting/", {"uid": "myuid", "sid": "mysid"}, 200, '{"result" : [{"name": "mymeeting"}]}');
  117. this.client.attachPresence(Factories.createPresence()).meetings(function(err, r, xhr) {
  118. start();
  119. equals(err, null);
  120. equals(r.length, 1);
  121. });
  122. });
  123. test("meetings are the same", function() {
  124. var client = this.client.attachPresence(Factories.createPresence());
  125. ok(client.meeting("mymeeting") === client.meeting("mymeeting"));
  126. ok(client.meeting("mymeeting") !== client.meeting("meeting"));
  127. });
  128. jackTest("can get meeting", function() {
  129. stop();
  130. addUceApiCall("get", "/meeting/mymeeting", {"uid": "myuid", "sid": "mysid"}, 200, '{"result" : {"name": "mymeeting"}}');
  131. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").get(function(err, r, xhr) {
  132. start();
  133. equals(err, null);
  134. equals(r.name, "mymeeting");
  135. });
  136. });
  137. jackTest("can update meeting", function() {
  138. stop();
  139. addUceApiCall("post", "/meeting/mymeeting",
  140. {"uid": "myuid",
  141. "sid": "mysid",
  142. "_method": "put",
  143. "metadata": {'description': "a brand new description"}},
  144. 200, '{"result" : "ok"}');
  145. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting")
  146. .update({'description': 'a brand new description'},
  147. function(err, r, xhr) {
  148. start();
  149. equals(err, null);
  150. equals(r.result, "ok");
  151. });
  152. });
  153. jackTest("can join meeting", function() {
  154. stop();
  155. addUceApiCall("post", "/meeting/mymeeting/roster/", {"uid": "myuid", "sid": "mysid", "metadata": {nickname: "plop"}}, 200, '{"name": "mymeeting"}');
  156. var meeting = this.client.attachPresence(Factories.createPresence()).meeting("mymeeting");
  157. meeting.join({nickname: 'plop'}, function(err, r, xhr) {
  158. start();
  159. equals(err, null);
  160. equals(r.name, "mymeeting");
  161. equals(meeting.uid, "myuid");
  162. });
  163. });
  164. jackTest("can leave meeting", function() {
  165. stop();
  166. addUceApiCall("post", "/meeting/mymeeting/roster/myuid", {"_method" :"delete", "uid": "myuid", "sid": "mysid"}, 200, '{"name": "mymeeting"}');
  167. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").leave(function(err, r, xhr) {
  168. start();
  169. equals(err, null);
  170. });
  171. });
  172. jackTest("can push event on meeting", function() {
  173. stop();
  174. addUceApiCall("post", "/event/mymeeting", JSON.stringify({"uid": "myuid", "sid": "mysid", "type": "test_event", "metadata": {_mymetadata: "myvalue"}}, 200, ''));
  175. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").push('test_event', {_mymetadata:"myvalue"}, function(err, r, xhr) {
  176. start();
  177. equals(err, null);
  178. });
  179. });
  180. jackTest("can push event on meeting with a parent", function() {
  181. stop();
  182. addUceApiCall("post", "/event/mymeeting", JSON.stringify({"uid": "myuid", "sid": "mysid", "type": "test_event", "parent": "test", "metadata": {_mymetadata: "myvalue"}}, 200, ''));
  183. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").push({parent: "test", type: 'test_event'}, {_mymetadata:"myvalue"}, function(err, r, xhr) {
  184. start();
  185. equals(err, null);
  186. });
  187. });
  188. jackTest("getEvents with callback on global success", function() {
  189. stop();
  190. addUceApiCall("get", "/event/mymeeting", {"uid": "myuid", "sid": "mysid"}, 200, '{"result": [{}, {}]}');
  191. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").getEvents({}, function(err, r, xhr) {
  192. start();
  193. equals(err, null);
  194. same(r, [{}, {}]);
  195. }, false);
  196. });
  197. jackTest("getEvents with callback on each event", function() {
  198. stop();
  199. expect(8);
  200. var called = 0;
  201. addUceApiCall("get", "/event/mymeeting", {"uid": "myuid", "sid": "mysid"}, 200, '{"result": [{}, {}]}');
  202. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").getEvents({}, function(err, r, xhr) {
  203. equals(err, null);
  204. called++;
  205. if (called == 2) {
  206. start();
  207. same(r, {});
  208. ok(true, "callback have been called 2 times");
  209. }
  210. }, true);
  211. });
  212. jackTest("getEvents with start", function() {
  213. stop();
  214. addUceApiCall("get", "/event/mymeeting", {"uid": "myuid", "sid": "mysid", "start": "pouet"}, 200, '{"result": [{}, {}]}');
  215. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").getEvents({start: "pouet" }, function(err, r, xhr) {
  216. start();
  217. }, false);
  218. });
  219. jackTest("getEvents with end", function() {
  220. stop();
  221. addUceApiCall("get", "/event/mymeeting", {"uid": "myuid", "sid": "mysid", "end": "plop"}, 200, '{"result": [{}, {}]}');
  222. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").getEvents({end: "plop"}, function(err, r, xhr) {
  223. start();
  224. }, false);
  225. });
  226. jackTest("getEvents with type", function() {
  227. stop();
  228. addUceApiCall("get", "/event/mymeeting", {"uid": "myuid", "sid": "mysid", "type": "chuck_norris"}, 200, '{"result": [{}, {}]}');
  229. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").getEvents({type: "chuck_norris"}, function(err, r, xhr) {
  230. start();
  231. }, false);
  232. });
  233. jackTest("waitEvents without type param", function() {
  234. stop();
  235. addUceApiCall("get", "/live/mymeeting", {"uid": "myuid", "sid": "mysid", "mode": "longpolling", "start": "pouet"}, 200, '{"result": [{}]}');
  236. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").waitEvents({start: "pouet"}, function(err, r, xhr) {
  237. start();
  238. equals(err, null);
  239. }, true, ["longpolling"]);
  240. });
  241. jackTest("waitEvents with type param", function() {
  242. stop();
  243. addUceApiCall("get", "/live/mymeeting", {"uid": "myuid", "sid": "mysid", "mode": "longpolling", "start": "pouet", "type" : "chuck_norris"}, 200, '{"result": [{}]}');
  244. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").waitEvents({"start": "pouet", type: "chuck_norris"}, function(err, r, xhr) {
  245. start();
  246. equals(err, null);
  247. }, true, ["longpolling"]);
  248. });
  249. jackTest("waitEvents without wait param", function() {
  250. stop();
  251. addUceApiCall("get", "/live/mymeeting", {"uid": "myuid", "sid": "mysid", "mode": "longpolling", "start": "pouet"}, 200, '{"result": [{}]}');
  252. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").waitEvents({start: "pouet"}, function(err, r, xhr) {
  253. start();
  254. equals(err, null);
  255. }, true, ["longpolling"]);
  256. });
  257. jackTest("waitEvents can be stopped", function() {
  258. expect(5);
  259. stop();
  260. addUceApiCall("get", "/live/mymeeting", {"uid": "myuid", "sid": "mysid", "mode": "longpolling", "start": "pouet"}, 200, '{"result": [{}]}', {
  261. abort: function() {
  262. start();
  263. ok(true, "waitEvent stopped");
  264. }
  265. }, false, ["longpolling"]);
  266. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").waitEvents({start: "pouet"}, function(err, r, xhr) {}, true, ["longpolling"]).stop();
  267. });
  268. test("waitEvents auto restart after wait", function() {
  269. expect(2);
  270. stop();
  271. var ajaxcall = 0; // nb of ajax request/response
  272. var called = 0;
  273. $.mockjax({
  274. url: '/api/' + uce.version + '/live/mymeeting',
  275. responseTime: 10,
  276. response: function() {
  277. this.responseText = {
  278. result: [{"datetime":"14"}]
  279. };
  280. ajaxcall++;
  281. }
  282. });
  283. var client = this.client;
  284. var env = {
  285. start: function() {
  286. var that = this;
  287. this.polling = client.attachPresence(Factories.createPresence()).meeting("mymeeting").waitEvents({start: "pouet"}, function(err, r, xhr) {
  288. called++;
  289. if (ajaxcall > 2)
  290. {
  291. that.polling.stop(); // stop polling
  292. // wait 1s to be sure long polling is stopped
  293. setTimeout(function() {
  294. start();
  295. equals(3, ajaxcall, "ajaxcall");
  296. equals(3, called, "callback");
  297. }, 1000);
  298. }
  299. }, false, ["longpolling"]);
  300. }
  301. };
  302. env.start();
  303. });
  304. jackTest("waitEvents, callback is called on each events", function() {
  305. stop();
  306. expect(5);
  307. var called = 0;
  308. addUceApiCall("get", "/live/mymeeting", {"uid": "myuid", "sid": "mysid", "mode": "longpolling", "start": "pouet"}, 200, '{"result": [{}, {}]}');
  309. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").waitEvents({start: "pouet"}, function(err, r, xhr) {
  310. called++;
  311. if (called == 2) {
  312. start();
  313. ok(true, "callback have been called 2 times");
  314. }
  315. }, true, ["longpolling"]);
  316. });
  317. function longPollingTest(events, test) {
  318. var env = {
  319. ajaxcall : 0,
  320. start: function() {
  321. this.mock();
  322. test(this);
  323. },
  324. mock : function() {
  325. var that = this;
  326. $.mockjax({
  327. url: '/api/' + uce.version + '/live/mymeeting',
  328. responseTime: 1,
  329. response: function() {
  330. this.responseText = {
  331. result: events
  332. };
  333. that.ajaxcall++;
  334. }
  335. });
  336. }
  337. };
  338. env.start();
  339. }
  340. test("startLoop with bind", function() {
  341. stop();
  342. var client = this.client.attachPresence(Factories.createPresence());
  343. longPollingTest([{type: "chuck_norris", datetime : 14}], function(longPolling) {
  344. longPolling.xhr = client.meeting("mymeeting").bind(function(event) {
  345. same(event, {type: "chuck_norris", datetime : 14});
  346. equals(longPolling.ajaxcall, 1);
  347. longPolling.xhr.stop();
  348. start();
  349. }).startLoop(1213, ["longpolling"]);
  350. });
  351. });
  352. test("startLoop widgets/whatever can bind event handler with special type", function() {
  353. stop();
  354. expect(2);
  355. var client = this.client.attachPresence(Factories.createPresence());
  356. longPollingTest([{type: "chuck_norris", datetime : 14}, {type: "plop"}],
  357. function(longPolling) {
  358. longPolling.xhr = client.meeting("mymeeting").on("chuck_norris", function(event) {
  359. same(event, {type : "chuck_norris", datetime: 14});
  360. equals(longPolling.ajaxcall, 1);
  361. longPolling.xhr.stop();
  362. start();
  363. }).startLoop(1213, ["longpolling"]);
  364. });
  365. });
  366. test("startLoop with 'bind', alias of 'on'", function() {
  367. stop()
  368. expect(2);
  369. var client = this.client.attachPresence(Factories.createPresence());
  370. longPollingTest([{type: "chuck_norris", datetime : 14}, {type: "plop"}],
  371. function(longPolling) {
  372. longPolling.xhr = client.meeting("mymeeting").on("chuck_norris", function(event) {
  373. same(event, {type : "chuck_norris", datetime: 14});
  374. equals(longPolling.ajaxcall, 1);
  375. longPolling.xhr.stop();
  376. start();
  377. }).startLoop(1213, ["longpolling"]);
  378. });
  379. });
  380. test("get upload url", function() {
  381. var url = this.client.attachPresence(Factories.createPresence()).meeting("mymeeting").getFileUploadUrl();
  382. equals(url, "/api/" + uce.version + "/file/mymeeting?uid=myuid&sid=mysid");
  383. var url = this.client.attachPresence({"user": "myuid2", "id": "mysid2"}).meeting("mymeeting2").getFileUploadUrl();
  384. equals(url, "/api/" + uce.version + "/file/mymeeting2?uid=myuid2&sid=mysid2");
  385. });
  386. test("get download file url", function() {
  387. var meeting = this.client.attachPresence(Factories.createPresence()).meeting("mymeeting");
  388. var url = meeting.getFileDownloadUrl('mydoc.pdf');
  389. equals(url, "/api/" + uce.version + "/file/mymeeting/mydoc.pdf?uid=myuid&sid=mysid");
  390. var url = meeting.getFileDownloadUrl('mydoc2.pdf');
  391. equals(url, "/api/" + uce.version + "/file/mymeeting/mydoc2.pdf?uid=myuid&sid=mysid");
  392. });
  393. jackTest("delete file", function() {
  394. stop();
  395. addUceApiCall("post", "/file/mymeeting/file_id",
  396. {"_method": "delete",
  397. "uid": "myuid",
  398. "sid": "mysid"}, 200, '{"result": "ok"}');
  399. this.client.attachPresence(Factories.createPresence()).meeting("mymeeting")
  400. .delFile("file_id", function(err, result, xhr) {
  401. start();
  402. equals(null, err);
  403. equals(result.result, "ok");
  404. });
  405. });
  406. jackTest("this.client.time", function() {
  407. stop();
  408. addUceApiCall("get", "/time", {}, 200, '{"result": "4"}');
  409. this.client.attachPresence(Factories.createPresence()).time.get(function(err, result, xhr) {
  410. start();
  411. equals(null, err);
  412. equals(result, 4);
  413. });
  414. });
  415. test("uce waiter", function() {
  416. var called = 0;
  417. var waiter = this.client.getWaiter(4, function() {
  418. called++;
  419. equals(called, 1);
  420. });
  421. waiter();waiter();waiter();waiter();
  422. });
  423. jackTest("register new user", function() {
  424. stop();
  425. addUceApiCall("post", "/user/", {name: "test@example.net", auth: 'password', credential: 'mypwd', metadata: {nickname: 'test'}}, 200, '{"result":"uid"}');
  426. this.client.user.register('test@example.net', 'password', 'mypwd', {nickname: 'test'}, function(err, result) {
  427. start();
  428. equals(null, err);
  429. same(result, {"result":"uid"});
  430. });
  431. });
  432. jackTest("register with password", function() {
  433. stop();
  434. addUceApiCall("post", "/user/", {name: "test@example.net", auth: 'password', credential: 'mypwd', metadata: {nickname: 'test'}}, 200, '{"result":"uid"}');
  435. this.client.user.registerWithPassword('test@example.net', 'mypwd', {nickname: 'test'}, function(err, result) {
  436. start();
  437. equals(null, err);
  438. same(result, {"result":"uid"});
  439. });
  440. });
  441. jackTest("get user", function() {
  442. stop();
  443. addUceApiCall("get", "/user/test@example.net", {"uid": "myuid", "sid": "mysid"}, 200, '{"result": {}}');
  444. this.client.attachPresence(Factories.createPresence()).user.get('test@example.net', function(err, result) {
  445. start();
  446. equals(null, err);
  447. same(result, {"result":{}});
  448. });
  449. });
  450. jackTest("custom api url", function() {
  451. stop();
  452. addUceApiCall("get", "http://example.com/api/" + uce.version + "/user/test@example.net", {"uid": "myuid", "sid": "mysid"}, 200, '{"result": {}}');
  453. var client = uce.createClient('http://example.com/api');
  454. var meeting = client.attachPresence(Factories.createPresence()).meeting("mymeeting");
  455. var url = meeting.getFileDownloadUrl('mydoc.pdf');
  456. equals(url, "http://example.com/api/" + uce.version + "/file/mymeeting/mydoc.pdf?uid=myuid&sid=mysid");
  457. var url = meeting.getFileUploadUrl();
  458. equals(url, "http://example.com/api/" + uce.version + "/file/mymeeting?uid=myuid&sid=mysid");
  459. client.attachPresence(Factories.createPresence()).user.get('test@example.net', function(err, result) {
  460. start();
  461. });
  462. });
  463. jackTest("search events in all meetings", function() {
  464. stop();
  465. addUceApiCall("get", "/search/event", {"uid": "myuid", "sid": "mysid", "searchTerms" : "hello"}, 200, '{"result": {}}');
  466. this.client.attachPresence(Factories.createPresence()).search({query: 'hello'}, function(err, result) {
  467. start();
  468. equals(null, err);
  469. same(result, {});
  470. });
  471. });
  472. jackTest("search events with options", function() {
  473. stop();
  474. addUceApiCall("get", "/search/event", {"uid": "myuid", "sid": "mysid", "searchTerms" : "hello", "order": "asc"}, 200, '{"result": {}}');
  475. this.client.attachPresence(Factories.createPresence()).search({query: 'hello'}, {order: "asc"}, function(err, result) {
  476. start();
  477. });
  478. });
  479. jackTest("complex search events in all meetings", function() {
  480. stop();
  481. addUceApiCall("get", "/search/event", {"uid": "myuid", "sid": "mysid", "searchTerms" : "type:internal.meeting.add,chat.message.new start:42 end:44 hello"}, 200, '{"result": {}}');
  482. this.client.attachPresence(Factories.createPresence()).search({type: ["internal.meeting.add","chat.message.new"],
  483. start: 42,
  484. end: 44,
  485. query: 'hello'}, function(err, result) {
  486. start();
  487. });
  488. });
  489. jackTest("search events in a meeting", function() {
  490. stop();
  491. addUceApiCall("get", "/search/event", {"uid": "myuid", "sid": "mysid", "searchTerms" : "location:demo hello"}, 200, '{"result": {}}');
  492. this.client.attachPresence(Factories.createPresence()).meeting('demo').search({query: 'hello'}, function(err, result) {
  493. start();
  494. equals(null, err);
  495. same(result, {});
  496. });
  497. });
  498. jackTest("search events in a meeting with options", function() {
  499. stop();
  500. addUceApiCall("get", "/search/event", {"uid": "myuid", "sid": "mysid", "searchTerms" : "location:demo hello", "order": "asc"}, 200, '{"result": {}}');
  501. this.client.attachPresence(Factories.createPresence()).meeting('demo').search({query: 'hello'}, {order: "asc"}, function(err, result) {
  502. start();
  503. equals(null, err);
  504. same(result, {});
  505. });
  506. });
  507. jackTest("complex search events in a meeting", function() {
  508. stop();
  509. addUceApiCall("get", "/search/event", {"uid": "myuid", "sid": "mysid", "searchTerms" : "type:internal.meeting.add,chat.message.new start:42 end:44 location:demo hello"}, 200, '{"result": {}}');
  510. this.client.attachPresence(Factories.createPresence()).meeting('demo').search({type: ["internal.meeting.add","chat.message.new"],
  511. start: 42,
  512. end: 44,
  513. query: 'hello'}, function(err, result) {
  514. start();
  515. });
  516. });
  517. module("ucejs.userAccess", {
  518. setup:function() {
  519. this.client = uce.createClient();
  520. }
  521. });
  522. jackTest("user.addRole", function() {
  523. stop();
  524. addUceApiCall("post", "/user/otheruid/roles", {"uid": "myuid",
  525. "sid": "mysid",
  526. "role": "newrole",
  527. "location": "testmeeting"},
  528. 201, '{"result":"created"}');
  529. this.client
  530. .attachPresence(Factories.createPresence())
  531. .user.addRole("otheruid",
  532. "newrole",
  533. "testmeeting",
  534. function(err, result) {
  535. start();
  536. equals(err, null);
  537. same(result.result, "created");
  538. });
  539. });
  540. jackTest("user.deleteRole", function() {
  541. stop();
  542. addUceApiCall("post", "/user/otheruid/roles/newrole/testmeeting",
  543. {uid: "myuid",
  544. sid: "mysid",
  545. _method: "delete"},
  546. 200, '{"result":"ok"}');
  547. this.client.attachPresence(Factories.createPresence())
  548. .user.delRole("otheruid",
  549. "newrole",
  550. "testmeeting",
  551. function(err, result) {
  552. start();
  553. equals(err, null);
  554. same(result.result, "ok");
  555. });
  556. });
  557. jackTest("user.can", function() {
  558. stop();
  559. addUceApiCall("get", "/user/otheruid/can/action/object/mymeeting",
  560. {"conditions": {'condition_1': 'value'},
  561. "uid": "myuid",
  562. "sid": "mysid"}, 200, '{"result":"true"}');
  563. this.client.attachPresence(Factories.createPresence()).user.can("otheruid", "action", "object", {'condition_1': 'value'}, "mymeeting", function(err, result) {
  564. start();
  565. equals(err, null);
  566. same(result, true);
  567. });
  568. });
  569. jackTest("meeting.can", function() {
  570. stop();
  571. addUceApiCall("get", "/user/otheruid/can/action/object/mymeeting",
  572. {"conditions": {'condition_1': 'value'},
  573. "uid": "myuid",
  574. "sid": "mysid"}, 200, '{"result":"true"}');
  575. this.client.attachPresence(Factories.createPresence()).
  576. meeting('mymeeting').can("otheruid", "action", "object", {'condition_1': 'value'}, function(err, result) {
  577. start();
  578. equals(err, null);
  579. ok(result);
  580. });
  581. });
  582. jackTest("meeting.canCurrentUser", function() {
  583. stop();
  584. addUceApiCall("get", "/user/myuid/can/action/object/mymeeting",
  585. {"conditions": {'condition_1': 'value'},
  586. "uid": "myuid",
  587. "sid": "mysid"}, 200, '{"result":"true"}');
  588. this.client.attachPresence(Factories.createPresence()).
  589. meeting('mymeeting').canCurrentUser("action", "object", {'condition_1': 'value'}, function(err, result) {
  590. start();
  591. equals(err, null);
  592. ok(result);
  593. });
  594. });
  595. module("ucejs.role", {
  596. setup:function() {
  597. this.client = uce.createClient();
  598. }
  599. });
  600. jackTest("role.add", function() {
  601. stop();
  602. addUceApiCall("post", "/role",
  603. {"name": "newrole",
  604. "uid": "myuid",
  605. "sid": "mysid"}, 201, '{"result":"created"}');
  606. this.client.attachPresence(Factories.createPresence())
  607. .role.add("newrole", function(err, result) {
  608. start();
  609. equals(err, null);
  610. same(result.result, "created");
  611. });
  612. });
  613. jackTest("role.delete", function() {
  614. stop();
  615. addUceApiCall("post", "/role/newrole",
  616. {"uid": "myuid",
  617. "sid": "mysid",
  618. "_method": "delete"}, 200, '{"result":"ok"}');
  619. this.client.attachPresence(Factories.createPresence())
  620. .role.del("newrole", function(err, result) {
  621. start();
  622. equals(err, null);
  623. same(result.result, "ok");
  624. });
  625. });
  626. jackTest("role.addAccess", function() {
  627. stop();
  628. addUceApiCall("post", "/role/myrole/acl",
  629. {"action": "access_action",
  630. "object": "access_object",
  631. "conditions": {'a': 'b', 'c': 'd'},
  632. "uid": "myuid",
  633. "sid": "mysid"}, 201, '{"result":"created"}');
  634. this.client.attachPresence(Factories.createPresence())
  635. .role.addAccess("myrole", "access_action", "access_object", {'a': 'b', 'c': 'd'},
  636. function(err, result) {
  637. start();
  638. equals(err, null);
  639. same(result.result, "created");
  640. });
  641. });
  642. jackTest("role.deleteAccess", function() {
  643. stop();
  644. addUceApiCall("post", "/role/myrole/acl/access_action/access_object",
  645. {"conditions": {'a': 'b', 'c': 'd'},
  646. "uid": "myuid",
  647. "sid": "mysid",
  648. "_method": "delete"}, 200, '{"result":"ok"}');
  649. this.client.attachPresence(Factories.createPresence())
  650. .role.delAccess("myrole", "access_action", "access_object", {'a': 'b', 'c': 'd'},
  651. function(err, result) {
  652. start();
  653. equals(err, null);
  654. same(result.result, "ok");
  655. });
  656. });
  657. module("ucejs.replay", {
  658. setup:function() {
  659. this.meeting = Factories.getDefaultMeeting();
  660. },
  661. teardown: function() {
  662. this.meeting.stopReplay();
  663. }
  664. });
  665. test("start orchestrator", function() {
  666. expect(2);
  667. stop();
  668. var that = this;
  669. this.meeting.bind("chuck_norris", function(event) {
  670. start();
  671. equal(event.type, "chuck_norris");
  672. equal(that.meeting.getCurrentReplay(), 100);
  673. }).startReplay(0, [{"type": "chuck_norris", "datetime":"14"},
  674. {"type": "bruce_lee", "datetime":"42"}]);
  675. });
  676. test("temporize events", function() {
  677. expect(4);
  678. stop();
  679. var called = 0;
  680. this.meeting.bind(function(event) {
  681. called++;
  682. }).startReplay(0, [{"type": "chuck_norris", "datetime":"1000"},
  683. {"type": "jacky_chan", "datetime":"3000"},
  684. {"type": "bruce_lee", "datetime":"5000"}]);
  685. // no events
  686. setTimeout(function() {
  687. equals(called, 0);
  688. }, 900);
  689. // chuck_norris == aie
  690. setTimeout(function() {
  691. equals(called, 1);
  692. }, 2000);
  693. // chuck_norris + jacky_chan == outch
  694. setTimeout(function() {
  695. equals(called, 2);
  696. }, 4000);
  697. // chuck_norris + jacky_chan + bruce_less == Armageddon
  698. setTimeout(function() {
  699. start();
  700. equals(called, 3); // everyone is dead ?
  701. }, 6500);
  702. });
  703. test("can stop orchestrator", function() {
  704. expect(2);
  705. stop();
  706. var called = 0, that = this;
  707. this.meeting.bind(function(event) {
  708. called++;
  709. }).startReplay(0, [{"type": "chuck_norris", "datetime":"1000"},
  710. {"type": "bruce_lee", "datetime":"2000"}]);
  711. // no events
  712. setTimeout(function() {
  713. that.meeting.stopReplay();
  714. equals(called, 1);
  715. }, 1500);
  716. setTimeout(function() {
  717. start();
  718. equals(called, 1);
  719. }, 2500);
  720. });
  721. test("can jump to a specific datetime in the future", function() {
  722. stop();
  723. var called = 0, that = this;
  724. this.meeting.bind(function(event) {
  725. called++;
  726. }).startReplay(0, [{"type": "chuck_norris", "datetime":1000},
  727. {"type": "bruce_lee", "datetime":2000},
  728. {"type": "bruce_lee", "datetime":4000}]);
  729. setTimeout(function() {
  730. that.meeting.jumpToReplay(2000);
  731. }, 100);
  732. setTimeout(function() {
  733. start();
  734. equals(called, 3);
  735. }, 2500);
  736. });
  737. test("can jump to a specific datetime in the past", function() {
  738. stop();
  739. var called = 0, that = this;
  740. this.meeting.bind(function(event) {
  741. called++;
  742. }).startReplay(0, [{"type": "chuck_norris", "datetime":1000},
  743. {"type": "bruce_lee", "datetime":2000},
  744. {"type": "bruce_lee", "datetime":2500}]);
  745. setTimeout(function() {
  746. that.meeting.jumpToReplay(100);
  747. equal(called, 1);
  748. }, 1500);
  749. setTimeout(function() {
  750. start();
  751. equals(called, 4);
  752. }, 4500);
  753. });