Статистика для дашборда #7
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
-module(api_test_runner).
|
||||
|
||||
-include("records.hrl").
|
||||
|
||||
-export([run_all/0, run/1]).
|
||||
-export([http_post/2, http_post/3, http_get/1, http_get/2, http_put/3, http_delete/2]).
|
||||
-export([extract_json/2, extract_json/3, assert_status/2]).
|
||||
@@ -10,8 +13,8 @@
|
||||
-define(ADMIN_URL, "http://localhost:8445").
|
||||
|
||||
%% ============ Глобальные переменные для тестов ============
|
||||
-define(ADMIN_EMAIL, <<"global_admin@test.com">>).
|
||||
-define(ADMIN_PASSWORD, <<"admin123">>).
|
||||
-define(ADMIN_EMAIL, <<"admin@eventhub.local">>).
|
||||
-define(ADMIN_PASSWORD, <<"123456">>).
|
||||
-define(USER_EMAIL, <<"global_user@test.com">>).
|
||||
-define(USER_PASSWORD, <<"user123">>).
|
||||
|
||||
@@ -21,27 +24,29 @@ init_global_users() ->
|
||||
undefined ->
|
||||
io:format("~n=== Initializing global test users ===~n"),
|
||||
|
||||
% Создаём или логиним админа
|
||||
AdminToken = register_and_login(?ADMIN_EMAIL, ?ADMIN_PASSWORD),
|
||||
{ok, {{_, 200, _}, _, MeResp}} = http_get("/v1/user/me", AdminToken),
|
||||
#{<<"id">> := AdminId, <<"role">> := Role} = jsx:decode(list_to_binary(MeResp), [return_maps]),
|
||||
|
||||
io:format("Admin ID: ~s, Current role: ~s~n", [AdminId, Role]),
|
||||
|
||||
% Проверяем, что админ действительно админ
|
||||
case Role of
|
||||
<<"admin">> ->
|
||||
io:format("✓ Admin already has admin role~n"),
|
||||
% ---------- АДМИНИСТРАТОР ----------
|
||||
% Проверяем, существует ли админ в таблице admin
|
||||
case core_admin:get_by_email(?ADMIN_EMAIL) of
|
||||
{ok, Admin} ->
|
||||
io:format("Admin already exists: ~s~n", [Admin#admin.id]),
|
||||
ok;
|
||||
_ ->
|
||||
io:format("⚠ Admin role is '~s', attempting to promote...~n", [Role]),
|
||||
promote_to_admin(AdminToken, AdminId)
|
||||
{error, not_found} ->
|
||||
% Создаём суперадмина напрямую
|
||||
{ok, Admin} = core_admin:create(?ADMIN_EMAIL, ?ADMIN_PASSWORD, superadmin),
|
||||
io:format("Admin created: ~s~n", [Admin#admin.id])
|
||||
end,
|
||||
|
||||
% Логинимся через админский API
|
||||
LoginBody = jsx:encode(#{<<"email">> => ?ADMIN_EMAIL, <<"password">> => ?ADMIN_PASSWORD}),
|
||||
{ok, {{_, 200, _}, _, LoginResp}} = httpc:request(post,
|
||||
{?ADMIN_URL ++ "/v1/admin/login", [], "application/json", LoginBody}, [], []),
|
||||
#{<<"token">> := AdminToken, <<"user">> := #{<<"id">> := AdminId}} =
|
||||
jsx:decode(list_to_binary(LoginResp), [return_maps]),
|
||||
|
||||
put(admin_token, AdminToken),
|
||||
put(admin_id, AdminId),
|
||||
|
||||
% Создаём или логиним обычного пользователя
|
||||
% ---------- ПОЛЬЗОВАТЕЛЬ ----------
|
||||
UserToken = register_and_login(?USER_EMAIL, ?USER_PASSWORD),
|
||||
{ok, {{_, 200, _}, _, UserMeResp}} = http_get("/v1/user/me", UserToken),
|
||||
#{<<"id">> := UserId} = jsx:decode(list_to_binary(UserMeResp), [return_maps]),
|
||||
@@ -49,7 +54,7 @@ init_global_users() ->
|
||||
put(user_token, UserToken),
|
||||
put(user_id, UserId),
|
||||
|
||||
io:format("User ID: ~s~n", [UserId]),
|
||||
io:format("Admin ID: ~s, User ID: ~s~n", [AdminId, UserId]),
|
||||
io:format("=== Global users initialized ===~n~n"),
|
||||
ok;
|
||||
_ ->
|
||||
@@ -57,32 +62,6 @@ init_global_users() ->
|
||||
ok
|
||||
end.
|
||||
|
||||
%% Попытка повысить роль через разные методы
|
||||
promote_to_admin(AdminToken, AdminId) ->
|
||||
io:format("Attempting to promote user ~s to admin...~n", [AdminId]),
|
||||
|
||||
% Метод 1: Прямое обновление через core_user (если доступно)
|
||||
try
|
||||
{ok, _User} = core_user:get_by_id(AdminId),
|
||||
core_user:update(AdminId, [{role, admin}]),
|
||||
io:format("✓ Promoted via core_user~n")
|
||||
catch
|
||||
_:_ ->
|
||||
io:format(" Method 1 (core_user) failed~n")
|
||||
end,
|
||||
|
||||
% Проверяем, сработало ли
|
||||
{ok, {{_, 200, _}, _, CheckResp}} = http_get("/v1/user/me", AdminToken),
|
||||
#{<<"role">> := NewRole} = jsx:decode(list_to_binary(CheckResp), [return_maps]),
|
||||
|
||||
case NewRole of
|
||||
<<"admin">> ->
|
||||
io:format("✓ User is now admin~n");
|
||||
_ ->
|
||||
io:format("⚠ WARNING: User still has role '~s'~n", [NewRole]),
|
||||
io:format(" Some admin tests may fail~n")
|
||||
end.
|
||||
|
||||
get_admin_token() ->
|
||||
init_global_users(),
|
||||
get(admin_token).
|
||||
|
||||
Reference in New Issue
Block a user