79 lines
2.9 KiB
Erlang
79 lines
2.9 KiB
Erlang
%%%-------------------------------------------------------------------
|
|
%%% @doc Тесты административного API для аудита.
|
|
%%%
|
|
%%% Покрывает эндпоинты:
|
|
%%% GET /v1/admin/audit
|
|
%%%
|
|
%%% Проверяет:
|
|
%%% - получение списка записей аудита
|
|
%%% - фильтрацию по admin_id
|
|
%%% - пагинацию
|
|
%%% @end
|
|
%%%-------------------------------------------------------------------
|
|
-module(admin_audit_tests).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
-export([test/0]).
|
|
|
|
-spec test() -> ok.
|
|
test() ->
|
|
ct:pal("=== Admin Audit Tests ==="),
|
|
UserToken = api_test_runner:get_user_token(),
|
|
#{<<"id">> := UserId} = api_test_runner:client_get(<<"/v1/user/me">>, UserToken),
|
|
AdminToken = api_test_runner:get_admin_token(),
|
|
SuperToken = api_test_runner:get_superadmin_token(),
|
|
|
|
% Создаём тестовую запись аудита
|
|
Me = api_test_runner:admin_get(<<"/v1/admin/me">>, AdminToken),
|
|
AdminId = maps:get(<<"id">>, Me),
|
|
|
|
Path = <<"/v1/admin/user/", UserId/binary>>,
|
|
Body = #{<<"action">> => <<"block">>, <<"reason">> => <<"Test">>},
|
|
api_test_runner:admin_put(Path, AdminToken, Body),
|
|
ct:sleep(200),
|
|
Body2 = #{<<"action">> => <<"unblock">>, <<"reason">> => <<"Test">>},
|
|
api_test_runner:admin_put(Path, AdminToken, Body2),
|
|
|
|
test_list_audit(SuperToken),
|
|
test_filter_audit(SuperToken, AdminId),
|
|
test_audit_pagination(SuperToken),
|
|
test_list_admin_forbidden(AdminToken),
|
|
|
|
ct:pal("=== All admin audit tests passed ==="),
|
|
ok.
|
|
|
|
test_list_audit(Token) ->
|
|
ct:pal(" TEST: List all audit records"),
|
|
Records = api_test_runner:admin_get(<<"/v1/admin/audit">>, Token),
|
|
?assert(is_list(Records)),
|
|
?assert(length(Records) >= 1),
|
|
ct:pal(" OK: ~p records", [length(Records)]).
|
|
|
|
test_filter_audit(Token, AdminId) ->
|
|
ct:pal(" TEST: Filter audit by admin_id"),
|
|
Records = api_test_runner:admin_get(<<"/v1/admin/audit?admin_id=", AdminId/binary>>, Token),
|
|
?assert(is_list(Records)),
|
|
[?assertEqual(AdminId, maps:get(<<"admin_id">>, R)) || R <- Records],
|
|
ct:pal(" OK: ~p records", [length(Records)]).
|
|
|
|
test_audit_pagination(Token) ->
|
|
ct:pal(" TEST: Audit pagination"),
|
|
Page1 = api_test_runner:admin_get(<<"/v1/admin/audit?limit=1&offset=0">>, Token),
|
|
?assert(length(Page1) >= 1),
|
|
Page2 = api_test_runner:admin_get(<<"/v1/admin/audit?limit=1&offset=1">>, Token),
|
|
?assert(length(Page2) >= 0),
|
|
case {Page1, Page2} of
|
|
{[First|_], [Second|_]} ->
|
|
Id1 = maps:get(<<"id">>, First),
|
|
Id2 = maps:get(<<"id">>, Second),
|
|
?assertNotEqual(Id1, Id2);
|
|
_ -> ok
|
|
end,
|
|
ct:pal(" OK").
|
|
|
|
-spec test_list_admin_forbidden(binary()) -> ok.
|
|
test_list_admin_forbidden(Token) ->
|
|
ct:pal(" TEST: List audit as non-superadmin (403)"),
|
|
Resp = api_test_runner:admin_request(get, <<"/v1/admin/audit">>, Token),
|
|
?assertMatch({ok, 403, _, _}, Resp),
|
|
ct:pal(" OK: got 403"). |