Files
EventHubBack/test/unit/admin_handler_user_by_id_tests.erl
T

127 lines
3.9 KiB
Erlang
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-module(admin_handler_user_by_id_tests).
-include_lib("eunit/include/eunit.hrl").
-include("records.hrl").
-define(TABLES, [admin, admin_audit, user, ticket]).
-define(ADMIN_ID, <<"adm_test_1">>).
-define(USER_ID, <<"user_by_id_1">>).
setup() ->
eh_test_support:start_mnesia(),
eh_test_support:ensure_tables(?TABLES),
eh_test_support:ensure_jwt(),
eh_test_support:seed_admin(#{id => ?ADMIN_ID}),
ok = mnesia:dirty_write(eh_test_support:make_user(#{
id => ?USER_ID,
email => <<"target@test.local">>,
nickname => <<"target">>,
status => active
})),
ok.
cleanup(_) ->
eh_test_support:unload_cowboy(),
eh_test_support:delete_tables(?TABLES),
eh_test_support:stop_mnesia(),
ok.
admin_user_by_id_test_() ->
{foreach, fun setup/0, fun cleanup/1, [
{"GET success", fun test_get/0},
{"GET not found", fun test_get_not_found/0},
{"PUT update status", fun test_update/0},
{"PUT not found", fun test_update_not_found/0},
{"DELETE soft delete", fun test_delete/0},
{"DELETE not found", fun test_delete_not_found/0},
{"GET unauthorized", fun test_unauthorized/0},
{"PATCH method not allowed", fun test_wrong_method/0}
]}.
test_get() ->
{Status, _, Body} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"GET">>,
path => <<"/v1/admin/users/", ?USER_ID/binary>>,
bindings => #{id => ?USER_ID},
auth => ?ADMIN_ID
}),
?assertEqual(200, Status),
Result = jsx:decode(Body, [return_maps]),
?assertEqual(?USER_ID, maps:get(<<"id">>, Result)),
?assertEqual(<<"target@test.local">>, maps:get(<<"email">>, Result)).
test_get_not_found() ->
{Status, _, _} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"GET">>,
path => <<"/v1/admin/users/missing">>,
bindings => #{id => <<"missing">>},
auth => ?ADMIN_ID
}),
?assertEqual(404, Status).
test_update() ->
{Status, _, Body} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"PUT">>,
path => <<"/v1/admin/users/", ?USER_ID/binary>>,
bindings => #{id => ?USER_ID},
auth => ?ADMIN_ID,
body => jsx:encode(#{
<<"status">> => <<"frozen">>,
<<"reason">> => <<"abuse">>
})
}),
?assertEqual(200, Status),
Result = jsx:decode(Body, [return_maps]),
?assertEqual(<<"frozen">>, maps:get(<<"status">>, Result)),
?assertEqual(<<"abuse">>, maps:get(<<"reason">>, Result)),
Audits = core_admin_audit:list(),
?assert(length(Audits) >= 1).
test_update_not_found() ->
{Status, _, _} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"PUT">>,
path => <<"/v1/admin/users/missing">>,
bindings => #{id => <<"missing">>},
auth => ?ADMIN_ID,
body => jsx:encode(#{<<"status">> => <<"frozen">>})
}),
?assertEqual(404, Status).
test_delete() ->
{Status, _, Body} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"DELETE">>,
path => <<"/v1/admin/users/", ?USER_ID/binary>>,
bindings => #{id => ?USER_ID},
auth => ?ADMIN_ID
}),
?assertEqual(200, Status),
#{<<"status">> := <<"deleted">>} = jsx:decode(Body, [return_maps]),
{ok, User} = core_user:get_by_id(?USER_ID),
?assertEqual(deleted, User#user.status).
test_delete_not_found() ->
{Status, _, _} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"DELETE">>,
path => <<"/v1/admin/users/missing">>,
bindings => #{id => <<"missing">>},
auth => ?ADMIN_ID
}),
?assertEqual(404, Status).
test_unauthorized() ->
{Status, _, _} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"GET">>,
path => <<"/v1/admin/users/", ?USER_ID/binary>>,
bindings => #{id => ?USER_ID},
auth => none
}),
?assertEqual(401, Status).
test_wrong_method() ->
{Status, _, _} = eh_test_support:call(admin_handler_user_by_id, #{
method => <<"PATCH">>,
path => <<"/v1/admin/users/", ?USER_ID/binary>>,
bindings => #{id => ?USER_ID},
auth => ?ADMIN_ID
}),
?assertEqual(405, Status).