Добавлены эндпойнты admin/v1/events и admin/v1/events/:id #20

This commit is contained in:
2026-05-08 19:02:35 +03:00
parent 393cf00631
commit 1132341b92
9 changed files with 456 additions and 3 deletions

View File

@@ -109,6 +109,7 @@ test() ->
}),
{ok, {{_, 201, _}, _, TicketResp}} = httpc:request(post, {AdminURL ++ "/v1/admin/tickets", [{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}], "application/json", TicketBody}, [], []),
#{<<"id">> := TicketId} = jsx:decode(list_to_binary(TicketResp), [return_maps]),
ct:pal(" OK (TicketId: ~p)~n", [TicketId]),
ct:pal("OK~n"),
%% TEST 13: Get ticket by ID
@@ -260,5 +261,76 @@ test() ->
{ok, {{_, 405, _}, _, _}} = httpc:request(post, {AdminURL ++ "/v1/admin/reviews", [{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}], "application/json", <<"{}">>}, [], []),
ct:pal("OK~n"),
%% ========================================================
%% Admin Events tests
%% ========================================================
FutureDate = api_SUITE:future_date(),
FutureDateStr = binary_to_list(FutureDate),
%% TEST 28: List all events (GET /v1/admin/events)
ct:pal(" TEST 28: List all events... "),
{ok, {{_, 200, _}, _, EventsListResp}} =
httpc:request(get, {AdminURL ++ "/v1/admin/events",
[{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}]},
[], []),
EventsList = jsx:decode(list_to_binary(EventsListResp), [return_maps]),
true = is_list(EventsList),
ct:pal(" OK (count: ~p)~n", [length(EventsList)]),
%% TEST 29: List events with date filters
ct:pal(" TEST 29: List events with date filters... "),
FilterEventsURL = AdminURL ++ "/v1/admin/events?from=" ++ FutureDateStr ++
"&to=" ++ FutureDateStr,
{ok, {{_, 200, _}, _, FilteredEventsResp}} =
httpc:request(get, {FilterEventsURL,
[{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}]},
[], []),
FilteredEventsList = jsx:decode(list_to_binary(FilteredEventsResp), [return_maps]),
true = is_list(FilteredEventsList),
ct:pal(" OK (filtered count: ~p)~n", [length(FilteredEventsList)]),
%% TEST 30: Get event by ID (GET /v1/admin/events/:id)
ct:pal(" TEST 30: Get event by ID... "),
{ok, {{_, 200, _}, _, EventByIdResp}} =
httpc:request(get, {AdminURL ++ "/v1/admin/events/" ++ binary_to_list(EventId),
[{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}]},
[], []),
#{<<"id">> := EventId} = jsx:decode(list_to_binary(EventByIdResp), [return_maps]),
ct:pal(" OK (id: ~s)~n", [binary_to_list(EventId)]),
%% TEST 31: Update event by ID (PUT /v1/admin/events/:id)
ct:pal(" TEST 31: Update event by ID... "),
UpdateEventBody = jsx:encode(#{
<<"title">> => <<"Updated by admin">>,
<<"description">> => <<"Admin test update">>
}),
{ok, {{_, 200, _}, _, UpdateEventResp}} =
httpc:request(put, {AdminURL ++ "/v1/admin/events/" ++ binary_to_list(EventId),
[{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}],
"application/json", UpdateEventBody},
[], []),
#{<<"title">> := <<"Updated by admin">>} =
jsx:decode(list_to_binary(UpdateEventResp), [return_maps]),
ct:pal(" OK~n"),
%% TEST 32: Delete event by ID (DELETE /v1/admin/events/:id)
ct:pal(" TEST 32: Delete event by ID... "),
{ok, {{_, 200, _}, _, DeleteResp}} =
httpc:request(delete, {AdminURL ++ "/v1/admin/events/" ++ binary_to_list(EventId),
[{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}]},
[], []),
#{<<"status">> := <<"deleted">>} = jsx:decode(list_to_binary(DeleteResp), [return_maps]),
ct:pal(" OK (status deleted)~n"),
%% TEST 33: Method not allowed (POST /v1/admin/events → 405)
ct:pal(" TEST 33: POST method not allowed... "),
{ok, {{_, 405, _}, _, _}} =
httpc:request(post, {AdminURL ++ "/v1/admin/events",
[{"Authorization", "Bearer " ++ binary_to_list(AdminToken)}],
"application/json", <<"{}">>},
[], []),
ct:pal("OK~n"),
ct:pal("~n✅ Admin API tests passed!~n"),
{?MODULE, ok}.

View File

@@ -5,6 +5,7 @@
-export([unique_email/1, register_and_login/2, create_calendar/2, create_event/3]).
-export([get_admin_token/0, get_admin_id/0, get_user_token/0, get_user_id/0, get_admin_url/0, get_base_url/0, get_admin_ws_url/0, get_base_ws_url/0]).
-export([wait_for_server/0]).
-export([format_datetime/1]).
-define(BASE_URL, base_url()).
-define(ADMIN_URL, admin_base_url()).
@@ -259,4 +260,10 @@ wait_for_server(Attempts) ->
case httpc:request(get, {?BASE_URL ++ "/health", []}, ssl_opts(), [{timeout, 1000}]) of
{ok, {{_, 200, _}, _, _}} -> ok;
_ -> timer:sleep(1000), wait_for_server(Attempts - 1)
end.
end.
format_datetime({{Year, Month, Day}, {Hour, Minute, Second}}) ->
iolist_to_binary(
io_lib:format("~4..0B-~2..0B-~2..0BT~2..0B:~2..0B:~2..0BZ",
[Year, Month, Day, Hour, Minute, Second])
).

View File

@@ -17,6 +17,7 @@ test() ->
stacktrace => <<"Something broke">>},
Token),
<<"id">>),
ct:pal(" OK (TicketId: ~p)~n", [TicketId]),
io:format("OK~n"),
%% TEST 2: Get my tickets (user)