PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/ucengine/src/tests/ctl_tests.erl

http://github.com/AF83/ucengine
Erlang | 246 lines | 182 code | 36 blank | 28 comment | 0 complexity | dfe17e52102991b26593d5b48f4a3a31 MD5 | raw file
  1. %%
  2. %% U.C.Engine - Unified Collaboration Engine
  3. %% Copyright (C) 2011 af83
  4. %%
  5. %% This program is free software: you can redistribute it and/or modify
  6. %% it under the terms of the GNU Affero General Public License as published by
  7. %% the Free Software Foundation, either version 3 of the License, or
  8. %% (at your option) any later version.
  9. %%
  10. %% This program is distributed in the hope that it will be useful,
  11. %% but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. %% GNU Affero General Public License for more details.
  14. %%
  15. %% You should have received a copy of the GNU Affero General Public License
  16. %% along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. %%
  18. -module(ctl_tests).
  19. -include("uce.hrl").
  20. -include_lib("eunit/include/eunit.hrl").
  21. ctl_meeting_test_() ->
  22. { setup
  23. , fun fixtures:setup/0
  24. , fun fixtures:teardown/1
  25. , fun([Domain, _BaseUrl, _Testers]) ->
  26. [ ?_test(test_meeting_add(Domain))
  27. % TODO: Test the conflict case
  28. , ?_test(test_meeting_get(Domain))
  29. , ?_test(test_meeting_get_not_found(Domain))
  30. , ?_test(test_meeting_update(Domain))
  31. , ?_test(test_meeting_update_not_found(Domain))
  32. , ?_test(test_meeting_delete(Domain))
  33. , ?_test(test_meeting_delete_not_found(Domain))
  34. , ?_test(test_meeting_list(Domain))
  35. ]
  36. end
  37. }.
  38. ctl_user_test_() ->
  39. { setup
  40. , fun fixtures:setup/0
  41. , fun fixtures:teardown/1
  42. , fun([Domain, _BaseUrl, _Testers]) ->
  43. [ ?_test(test_user_add(Domain))
  44. % TODO: Test the conflict case
  45. , ?_test(test_user_get(Domain))
  46. , ?_test(test_user_get_not_found(Domain))
  47. , ?_test(test_user_update(Domain))
  48. , ?_test(test_user_update_not_found(Domain))
  49. , ?_test(test_user_add_role(Domain))
  50. , ?_test(test_user_delete_role(Domain))
  51. , ?_test(test_user_delete(Domain))
  52. , ?_test(test_user_delete_not_found(Domain))
  53. , ?_test(test_user_list(Domain))
  54. ]
  55. end
  56. }.
  57. ctl_roles_test_() ->
  58. { setup
  59. , fun fixtures:setup/0
  60. , fun fixtures:teardown/1
  61. , fun([Domain, _BaseUrl, _Testers]) ->
  62. [ ?_test(test_role_add(Domain))
  63. , ?_test(test_role_add_conflict(Domain))
  64. , ?_test(test_role_delete(Domain))
  65. , ?_test(test_role_delete_not_found(Domain))
  66. , ?_test(test_role_add_access(Domain))
  67. , ?_test(test_role_check_access(Domain))
  68. , ?_test(test_role_delete_access(Domain))
  69. ]
  70. end
  71. }.
  72. %%
  73. %% Meeting
  74. %%
  75. test_meeting_add(Domain) ->
  76. false = uce_meeting:exists(Domain, "newmeeting"),
  77. Params = [{"description", ""}],
  78. ok = uce_ctl:cmd({dummy, [Domain, "meeting", "add", "newmeeting"]}, Params),
  79. Expected = {ok, #uce_meeting{id="newmeeting",
  80. metadata=json_helpers:to_struct([{"description", ""}])}},
  81. ?assertEqual(Expected, uce_meeting:get(Domain, "newmeeting")).
  82. test_meeting_get(Domain) ->
  83. ?assertMatch({ok, _}, uce_ctl:cmd({dummy, [Domain, "meeting", "get", "testmeeting"]}, [])).
  84. test_meeting_get_not_found(Domain) ->
  85. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "meeting", "get", "meeting that doesn't exists"]}, [])).
  86. test_meeting_update(Domain) ->
  87. {ok, #uce_meeting{ id="testmeeting"
  88. , metadata={struct, [{"description", _Description}]}
  89. }} = uce_meeting:get(Domain, "testmeeting"),
  90. Params = [{"description", "A new description"}],
  91. ok = uce_ctl:cmd({dummy, [Domain, "meeting", "update", "testmeeting"]}, Params),
  92. Expected = {ok, #uce_meeting{ id="testmeeting"
  93. , metadata=json_helpers:to_struct([{"description", "A new description"}])
  94. }},
  95. ?assertMatch(Expected, uce_meeting:get(Domain, "testmeeting")).
  96. test_meeting_update_not_found(Domain) ->
  97. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "meeting", "update",
  98. "meeting that doesnt exists"]}, [])).
  99. test_meeting_delete(Domain) ->
  100. {ok, #uce_meeting{ id="testmeeting"
  101. , metadata={struct, [{"description", _Description}]}
  102. }} = uce_meeting:get(Domain, "testmeeting"),
  103. ok = uce_ctl:cmd({dummy, [Domain, "meeting", "delete", "testmeeting"]}, []),
  104. false = uce_meeting:exists(Domain, "testmeeting").
  105. test_meeting_delete_not_found(Domain) ->
  106. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "meeting", "delete", "meeting that doesn't exists"]}, [])).
  107. test_meeting_list(Domain) ->
  108. {ok, _} = uce_ctl:cmd({dummy, [Domain, "meeting", "list"]}, []).
  109. %%
  110. %% User
  111. %%
  112. test_user_add(Domain) ->
  113. ?assertMatch(false, uce_user:exists(Domain, "test.user@af83.com")),
  114. ?assertMatch(ok, uce_ctl:cmd({dummy, [Domain, "user", "add", "test.user@af83.com", "password", "pwd"]}, [])),
  115. ?assertMatch({ok, #uce_user{id=_,
  116. name="test.user@af83.com",
  117. auth="password",
  118. credential="pwd",
  119. metadata={struct, []}}}, uce_user:get_by_name(Domain, "test.user@af83.com")).
  120. test_user_get(Domain) ->
  121. {ok, _} = uce_ctl:cmd({dummy, [Domain, "user", "get", "participant.user@af83.com"]}, []).
  122. test_user_get_not_found(Domain) ->
  123. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "user", "get", "nobody@af83.com"]}, [])).
  124. test_user_update(Domain) ->
  125. {ok, #uce_user{id=Uid,
  126. name="anonymous.user@af83.com",
  127. auth="none"}} =
  128. uce_user:get_by_name(Domain, "anonymous.user@af83.com"),
  129. ok = uce_ctl:cmd({dummy, [Domain, "user", "update", "anonymous.user@af83.com", "password", "pwd"]}, []),
  130. {ok, #uce_user{id=Uid,
  131. name="anonymous.user@af83.com",
  132. auth="password",
  133. credential="pwd"}} =
  134. uce_user:get_by_name(Domain, "anonymous.user@af83.com").
  135. test_user_update_not_found(Domain) ->
  136. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "user", "update", "nobody@af83.com", "password", "passwd"]}, [])).
  137. test_user_add_role(Domain) ->
  138. Params = [{"location", "testmeeting"}],
  139. ok = uce_ctl:cmd({dummy, [Domain, "user", "role", "add", "anonymous.user@af83.com", "root"]}, Params),
  140. {ok, #uce_user{id=_Uid,
  141. auth="password",
  142. credential="pwd",
  143. roles=[{"root","testmeeting"}]}} =
  144. uce_user:get_by_name(Domain, "anonymous.user@af83.com").
  145. test_user_delete_role(Domain) ->
  146. {ok, #uce_user{id=_Uid,
  147. name="anonymous.user@af83.com",
  148. auth="password",
  149. credential="pwd",
  150. roles=[{"root","testmeeting"}]}} =
  151. uce_user:get_by_name(Domain, "anonymous.user@af83.com"),
  152. Params = [{"location", "testmeeting"}],
  153. ok = uce_ctl:cmd({dummy, [Domain, "user", "role", "delete", "anonymous.user@af83.com", "root"]}, Params),
  154. {ok, #uce_user{id=_Uid,
  155. auth="password",
  156. credential="pwd",
  157. roles=[]}} =
  158. uce_user:get_by_name(Domain, "anonymous.user@af83.com").
  159. test_user_delete(Domain) ->
  160. true = uce_user:exists(Domain, "participant.user@af83.com"),
  161. ok = uce_ctl:cmd({dummy, [Domain, "user", "delete", "participant.user@af83.com"]}, []),
  162. false = uce_user:exists(Domain, "participant.user@af83.com").
  163. test_user_delete_not_found(Domain) ->
  164. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "user", "delete", "nobody@af83.com"]}, [])).
  165. test_user_list(Domain) ->
  166. {ok, _} = uce_ctl:cmd({dummy, [Domain, "user", "list"]}, []).
  167. %%
  168. %% Roles
  169. %%
  170. test_role_add(Domain) ->
  171. {error, not_found} = (catch uce_role:get(Domain, "test_role")),
  172. ok = uce_ctl:cmd({dummy, [Domain, "role", "add", "test_role"]}, []),
  173. {ok, #uce_role{id="test_role", acl=[]}} = uce_role:get(Domain, "test_role").
  174. test_role_add_conflict(Domain) ->
  175. {error, conflict} = (catch uce_ctl:cmd({dummy, [Domain, "role", "add", "test_role"]}, [])),
  176. {ok, #uce_role{id="test_role", acl=[]}} = uce_role:get(Domain, "test_role").
  177. test_role_delete(Domain) ->
  178. {ok, #uce_role{id="test_role", acl=[]}} = uce_role:get(Domain, "test_role"),
  179. ok = uce_ctl:cmd({dummy, [Domain, "role", "delete", "test_role"]}, []),
  180. {error, not_found} = (catch uce_role:get(Domain, "test_role")).
  181. test_role_delete_not_found(Domain) ->
  182. {error, not_found} = (catch uce_ctl:cmd({dummy, [Domain, "role", "delete", "test_role"]}, [])).
  183. test_role_add_access(Domain) ->
  184. uce_role:add(Domain, #uce_role{id="test_role_2"}),
  185. Params = [ {"a", "b"}
  186. , {"c", "d"}],
  187. ok = uce_ctl:cmd({dummy, [Domain, "role", "access", "add", "test_role_2", "testaction", "testobject"]}, Params),
  188. {ok, #uce_role{id="test_role_2",
  189. acl=[#uce_access{object="testobject",
  190. action="testaction",
  191. conditions=[{"a", "b"}, {"c", "d"}]}]}} =
  192. uce_role:get(Domain, "test_role_2").
  193. test_role_check_access(Domain) ->
  194. {ok, Anonymous} = uce_user:get_by_name(Domain, "anonymous.user@af83.com"),
  195. AnonymousUid = Anonymous#uce_user.id,
  196. uce_user:add_role(Domain, AnonymousUid, {"test_role_2", ""}),
  197. Params = [ {"a", "b"}
  198. , {"c", "d"}],
  199. ok = uce_ctl:cmd({dummy, [Domain, "role", "access", "check", "anonymous.user@af83.com", "testobject", "testaction"]}, Params).
  200. test_role_delete_access(Domain) ->
  201. {ok, #uce_role{id="test_role_2",
  202. acl=[#uce_access{object="testobject",
  203. action="testaction",
  204. conditions=[{"a", "b"}, {"c", "d"}]}]}} =
  205. uce_role:get(Domain, "test_role_2"),
  206. Params = [ {"c", "d"}
  207. , {"a", "b"}],
  208. ok = uce_ctl:cmd({dummy, [Domain, "role", "access", "delete", "test_role_2", "testaction", "testobject"]}, Params),
  209. ?assertMatch({ok, #uce_role{id="test_role_2",
  210. acl=[]}}, uce_role:get(Domain, "test_role_2")).