Improve tests
diff --git a/test/couchdb_peruser_test.erl b/test/couchdb_peruser_test.erl
index bfbf652..243c8fd 100644
--- a/test/couchdb_peruser_test.erl
+++ b/test/couchdb_peruser_test.erl
@@ -37,6 +37,9 @@
set_config("couchdb_peruser", "enable", "false"),
set_config("couchdb_peruser", "delete_dbs", "false"),
do_request(delete, get_base_url() ++ "/" ++ ?b2l(TestAuthDb)),
+ lists:foreach(fun (DbName) ->
+ delete_db(DbName)
+ end, all_dbs()),
config:delete("admins", ?ADMIN_USERNAME).
set_config(Section, Key, Value) ->
@@ -54,6 +57,12 @@
{"Content-Type", "application/json"}],
{ok, _, _, _} = test_request:request(Method, Url, Headers, Body).
+create_db(DbName) ->
+ {ok, _, _, _} = do_request(put, get_cluster_base_url() ++ "/" ++ ?b2l(DbName)).
+
+delete_db(DbName) ->
+ {ok, _, _, _} = do_request(delete, get_cluster_base_url() ++ "/" ++ ?b2l(DbName)).
+
create_user(AuthDb, Name) ->
Body = "{\"name\":\"" ++ Name ++
"\",\"type\":\"user\",\"roles\":[],\"password\":\"secret\"}",
@@ -61,7 +70,7 @@
get_base_url(), "/", ?b2l(AuthDb), "/org.couchdb.user:", Name]),
{ok, 201, _, _} = do_request(put, Url, Body),
% let's proceed after giving couchdb_peruser some time to create the user db
- timer:sleep(50).
+ timer:sleep(1000).
delete_user(AuthDb, Name) ->
Url = lists:concat([get_base_url(), "/", ?b2l(AuthDb),
@@ -71,7 +80,20 @@
Rev = proplists:get_value(<<"_rev">>, DocProps),
{ok, 200, _, _} = do_request(delete, Url ++ "?rev=" ++ ?b2l(Rev)),
% let's proceed after giving couchdb_peruser some time to delete the user db
- timer:sleep(50).
+ timer:sleep(1000).
+
+get_security(DbName) ->
+ Url = lists:concat([
+ get_cluster_base_url(), "/", ?b2l(DbName), "/_security"]),
+ {ok, 200, _, Body} = do_request(get, Url),
+ {SecurityProperties} = jiffy:decode(Body),
+ SecurityProperties.
+
+set_security(DbName, SecurityProperties) ->
+ Url = lists:concat([
+ get_cluster_base_url(), "/", ?b2l(DbName), "/_security"]),
+ Body = jiffy:encode({SecurityProperties}),
+ {ok, 200, _, _} = do_request(put, Url, Body).
all_dbs() ->
{ok, 200, _, Body} = do_request(get, get_cluster_base_url() ++ "/_all_dbs"),
@@ -129,6 +151,56 @@
create_user(TestAuthDb, User),
?_assert(not lists:member(UserDbName, all_dbs())).
+should_assign_user_to_db_admins(TestAuthDb) ->
+ User = "qux",
+ UserDbName = <<"userdb-717578">>,
+ create_user(TestAuthDb, User),
+ ?_assertEqual(
+ {[{<<"names">>,[<<"qux">>]}]},
+ proplists:get_value(<<"admins">>, get_security(UserDbName))).
+
+should_assign_user_to_db_members(TestAuthDb) ->
+ User = "qux",
+ UserDbName = <<"userdb-717578">>,
+ create_user(TestAuthDb, User),
+ ?_assertEqual(
+ {[{<<"names">>,[<<"qux">>]}]},
+ proplists:get_value(<<"members">>, get_security(UserDbName))).
+
+should_not_remove_existing_db_admins(TestAuthDb) ->
+ User = "qux",
+ UserDbName = <<"userdb-717578">>,
+ SecurityProperties = [
+ {<<"admins">>,{[{<<"names">>,[<<"foo">>,<<"bar">>]}]}},
+ {<<"members">>,{[{<<"names">>,[<<"baz">>,<<"pow">>]}]}}
+ ],
+ create_db(UserDbName),
+ set_security(UserDbName, SecurityProperties),
+ create_user(TestAuthDb, User),
+ {AdminProperties} = proplists:get_value(<<"admins">>,
+ get_security(UserDbName)),
+ AdminNames = proplists:get_value(<<"names">>, AdminProperties),
+ ?_assert(lists:member(<<"foo">>, AdminNames)),
+ ?_assert(lists:member(<<"bar">>, AdminNames)),
+ ?_assert(lists:member(<<"qux">>, AdminNames)).
+
+should_not_remove_existing_db_members(TestAuthDb) ->
+ User = "qux",
+ UserDbName = <<"userdb-717578">>,
+ SecurityProperties = [
+ {<<"admins">>,{[{<<"names">>,[<<"pow">>,<<"wow">>]}]}},
+ {<<"members">>,{[{<<"names">>,[<<"pow">>,<<"wow">>]}]}}
+ ],
+ create_db(UserDbName),
+ set_security(UserDbName, SecurityProperties),
+ create_user(TestAuthDb, User),
+ {MemberProperties} = proplists:get_value(<<"members">>,
+ get_security(UserDbName)),
+ MemberNames = proplists:get_value(<<"names">>, MemberProperties),
+ ?_assert(lists:member(<<"pow">>, MemberNames)),
+ ?_assert(lists:member(<<"wow">>, MemberNames)),
+ ?_assert(lists:member(<<"qux">>, MemberNames)).
+
couchdb_peruser_test_() ->
{
"couchdb_peruser test",
@@ -142,7 +214,11 @@
fun should_create_user_db/1,
fun should_not_delete_user_db/1,
fun should_delete_user_db/1,
- fun should_reflect_config_changes/1
+ fun should_reflect_config_changes/1,
+ fun should_assign_user_to_db_admins/1,
+ fun should_assign_user_to_db_members/1,
+ fun should_not_remove_existing_db_admins/1,
+ fun should_not_remove_existing_db_members/1
]
}
}