Рефакторинг обработчиков. Часть 3 #21
This commit is contained in:
77
test/api/admins/admin_stats_tests.erl
Normal file
77
test/api/admins/admin_stats_tests.erl
Normal file
@@ -0,0 +1,77 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Тесты административного API для получения статистики.
|
||||
%%%
|
||||
%%% Покрывает эндпоинты:
|
||||
%%% GET /v1/admin/stats
|
||||
%%%
|
||||
%%% Проверяет:
|
||||
%%% - получение статистики для всех четырёх ролей администраторов
|
||||
%%% - для superadmin и admin – наличие ключевых метрик
|
||||
%%% - для moderator и support – ответ непустой
|
||||
%%% - работу с фильтром по датам (from, to)
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(admin_stats_tests).
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
-export([test/0]).
|
||||
|
||||
%%%===================================================================
|
||||
%%% Главная тестовая функция
|
||||
%%%===================================================================
|
||||
|
||||
-spec test() -> ok.
|
||||
test() ->
|
||||
ct:pal("=== Admin Stats Tests ==="),
|
||||
|
||||
SuperToken = api_test_runner:get_superadmin_token(),
|
||||
AdminToken = api_test_runner:get_admin_token(),
|
||||
ModerToken = api_test_runner:get_moderator_token(),
|
||||
SupportToken = api_test_runner:get_support_token(),
|
||||
|
||||
test_stats_for_role("Superadmin", SuperToken, strict),
|
||||
test_stats_for_role("Admin", AdminToken, strict),
|
||||
test_stats_for_role("Moderator", ModerToken, loose),
|
||||
test_stats_for_role("Support", SupportToken, loose),
|
||||
|
||||
test_stats_with_dates(SuperToken),
|
||||
|
||||
ct:pal("=== All admin stats tests passed ==="),
|
||||
ok.
|
||||
|
||||
%%%===================================================================
|
||||
%%% Тестовые функции
|
||||
%%%===================================================================
|
||||
|
||||
%% @doc Проверяет получение статистики для конкретной роли.
|
||||
%% strict – ожидаем ключи users_total/users и events_total/events
|
||||
%% loose – просто убеждаемся, что ответ непустой
|
||||
-spec test_stats_for_role(string(), binary(), strict | loose) -> ok.
|
||||
test_stats_for_role(RoleName, Token, Strictness) ->
|
||||
ct:pal(" TEST: Get stats for role ~s", [RoleName]),
|
||||
Stats = api_test_runner:admin_get(<<"/v1/admin/stats">>, Token),
|
||||
?assert(is_map(Stats)),
|
||||
case Strictness of
|
||||
strict ->
|
||||
HasUsers = maps:is_key(<<"users_total">>, Stats) orelse
|
||||
maps:is_key(<<"users">>, Stats),
|
||||
HasEvents = maps:is_key(<<"events_total">>, Stats) orelse
|
||||
maps:is_key(<<"events">>, Stats),
|
||||
?assert(HasUsers orelse HasEvents);
|
||||
loose ->
|
||||
?assert(map_size(Stats) > 0)
|
||||
end,
|
||||
ct:pal(" OK: ~p keys", [length(maps:keys(Stats))]).
|
||||
|
||||
%% @doc GET /v1/admin/stats?from=...&to=... – проверяет фильтрацию по датам.
|
||||
-spec test_stats_with_dates(binary()) -> ok.
|
||||
test_stats_with_dates(Token) ->
|
||||
ct:pal(" TEST: Get stats with date range"),
|
||||
From = <<"2026-01-01T00:00:00Z">>,
|
||||
To = <<"2026-12-31T23:59:59Z">>,
|
||||
Path = <<"/v1/admin/stats?from=", From/binary, "&to=", To/binary>>,
|
||||
Stats = api_test_runner:admin_get(Path, Token),
|
||||
?assert(is_map(Stats)),
|
||||
?assert(maps:is_key(<<"users_total">>, Stats) orelse
|
||||
maps:is_key(<<"users">>, Stats)),
|
||||
ct:pal(" OK").
|
||||
Reference in New Issue
Block a user