Статистика для дашборда, расширенная #7
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
-module(api_admin_tests).
|
||||
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
-export([test/0]).
|
||||
|
||||
test() ->
|
||||
@@ -25,17 +27,23 @@ test() ->
|
||||
|
||||
%% TEST 3: Admin stats (superadmin)
|
||||
io:format(" TEST 3: Admin stats (superadmin)... "),
|
||||
% Логинимся под суперадмином (данные из api_test_runner)
|
||||
LoginBody = jsx:encode(#{<<"email">> => <<"admin@eventhub.local">>, <<"password">> => <<"123456">>}),
|
||||
{ok, {{_, 200, _}, _, LoginResp}} = httpc:request(post,
|
||||
{AdminURL ++ "/v1/admin/login", [], "application/json", LoginBody}, [], []),
|
||||
#{<<"token">> := SuperToken} = jsx:decode(list_to_binary(LoginResp), [return_maps]),
|
||||
|
||||
% Запрашиваем статистику
|
||||
{ok, {{_, 200, _}, _, StatsResp}} = httpc:request(get,
|
||||
% Без дат
|
||||
{ok, {{_, 200, _}, _, StatsResp1}} = httpc:request(get,
|
||||
{AdminURL ++ "/v1/admin/stats", [{"Authorization", "Bearer " ++ binary_to_list(SuperToken)}]}, [], []),
|
||||
Stats = jsx:decode(list_to_binary(StatsResp), [return_maps]),
|
||||
io:format(" OK (keys: ~p)~n", [maps:keys(Stats)]),
|
||||
Stats1 = jsx:decode(list_to_binary(StatsResp1), [return_maps]),
|
||||
io:format(" OK (keys: ~p)~n", [maps:keys(Stats1)]),
|
||||
|
||||
% С датами
|
||||
{ok, {{_, 200, _}, _, StatsResp2}} = httpc:request(get,
|
||||
{AdminURL ++ "/v1/admin/stats?from=2026-01-01T00:00:00&to=2026-12-31T23:59:59",
|
||||
[{"Authorization", "Bearer " ++ binary_to_list(SuperToken)}]}, [], []),
|
||||
Stats2 = jsx:decode(list_to_binary(StatsResp2), [return_maps]),
|
||||
io:format(" (with dates, keys: ~p)~n", [maps:keys(Stats2)]),
|
||||
|
||||
%% TEST 4: List users
|
||||
io:format(" TEST 4: List users... "),
|
||||
|
||||
@@ -22,15 +22,17 @@ cleanup(_) ->
|
||||
admin_stats_test_() ->
|
||||
{setup, fun setup/0, fun cleanup/1, [
|
||||
{"GET /admin/stats as superadmin returns 200 with system metrics", fun test_superadmin/0},
|
||||
{"GET /admin/stats as superadmin with date filter", fun test_superadmin_dates/0},
|
||||
{"GET /admin/stats as moderator returns 200 with own metrics", fun test_moderator/0},
|
||||
{"GET /admin/stats as support returns 200 with assigned tickets", fun test_support/0},
|
||||
{"GET /admin/stats with non‑admin token returns 403", fun test_forbidden/0},
|
||||
{"POST /admin/stats returns 405", fun test_wrong_method/0}
|
||||
]}.
|
||||
|
||||
%% --- Суперадмин ---
|
||||
%% --- Суперадмин (без дат) ---
|
||||
test_superadmin() ->
|
||||
ok = meck:expect(cowboy_req, method, fun(_) -> <<"GET">> end),
|
||||
ok = meck:expect(cowboy_req, parse_qs, fun(_) -> [] end),
|
||||
ok = meck:expect(handler_auth, authenticate,
|
||||
fun(Req) -> {ok, <<"adm1">>, Req} end),
|
||||
ok = meck:expect(admin_utils, is_admin, fun(_) -> true end),
|
||||
@@ -41,9 +43,26 @@ test_superadmin() ->
|
||||
{ok, _, _} = admin_handler_stats:init(req, []),
|
||||
?assertEqual(200, erase(test_reply)).
|
||||
|
||||
%% --- Суперадмин (с датами) ---
|
||||
test_superadmin_dates() ->
|
||||
ok = meck:expect(cowboy_req, method, fun(_) -> <<"GET">> end),
|
||||
ok = meck:expect(cowboy_req, parse_qs, fun(_) ->
|
||||
[{<<"from">>, <<"2026-01-01T00:00:00">>}, {<<"to">>, <<"2026-06-01T00:00:00">>}]
|
||||
end),
|
||||
ok = meck:expect(handler_auth, authenticate,
|
||||
fun(Req) -> {ok, <<"adm1">>, Req} end),
|
||||
ok = meck:expect(admin_utils, is_admin, fun(_) -> true end),
|
||||
ok = meck:expect(core_admin, get_by_id,
|
||||
fun(<<"adm1">>) -> {ok, #admin{id = <<"adm1">>, role = superadmin}} end),
|
||||
ok = meck:expect(logic_stats, get_stats,
|
||||
fun(superadmin, _, _, _) -> #{users => 10} end),
|
||||
{ok, _, _} = admin_handler_stats:init(req, []),
|
||||
?assertEqual(200, erase(test_reply)).
|
||||
|
||||
%% --- Модератор ---
|
||||
test_moderator() ->
|
||||
ok = meck:expect(cowboy_req, method, fun(_) -> <<"GET">> end),
|
||||
ok = meck:expect(cowboy_req, parse_qs, fun(_) -> [] end),
|
||||
ok = meck:expect(handler_auth, authenticate,
|
||||
fun(Req) -> {ok, <<"mod1">>, Req} end),
|
||||
ok = meck:expect(admin_utils, is_admin, fun(_) -> true end),
|
||||
@@ -57,6 +76,7 @@ test_moderator() ->
|
||||
%% --- Поддержка ---
|
||||
test_support() ->
|
||||
ok = meck:expect(cowboy_req, method, fun(_) -> <<"GET">> end),
|
||||
ok = meck:expect(cowboy_req, parse_qs, fun(_) -> [] end),
|
||||
ok = meck:expect(handler_auth, authenticate,
|
||||
fun(Req) -> {ok, <<"sup1">>, Req} end),
|
||||
ok = meck:expect(admin_utils, is_admin, fun(_) -> true end),
|
||||
|
||||
Reference in New Issue
Block a user