Рефакторинг обработчиков. Часть 3 #21
This commit is contained in:
79
test/api/admins/admin_audit_tests.erl
Normal file
79
test/api/admins/admin_audit_tests.erl
Normal file
@@ -0,0 +1,79 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @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").
|
||||
Reference in New Issue
Block a user