Рефакторинг обработчиков. Часть 3 #21
This commit is contained in:
119
test/api/admins/admin_events_tests.erl
Normal file
119
test/api/admins/admin_events_tests.erl
Normal file
@@ -0,0 +1,119 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Тесты административного API для управления событиями.
|
||||
%%% Покрывает эндпоинты:
|
||||
%%% GET /v1/admin/events
|
||||
%%% GET /v1/admin/events/:id
|
||||
%%% PUT /v1/admin/events/:id
|
||||
%%% DELETE /v1/admin/events/:id
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(admin_events_tests).
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
-export([test/0]).
|
||||
|
||||
%%%===================================================================
|
||||
%%% EUnit test generator
|
||||
%%%===================================================================
|
||||
|
||||
test() ->
|
||||
ct:pal("=== Admin Events Tests ==="),
|
||||
Token = api_test_runner:get_admin_token(),
|
||||
UserToken = api_test_runner:get_user_token(),
|
||||
|
||||
%% Создаём тестовый календарь и два события
|
||||
CalId = api_test_runner:create_calendar(UserToken, #{title => <<"EventsTestCal">>}),
|
||||
Event1Id = api_test_runner:create_event(UserToken, CalId, #{
|
||||
title => <<"Test Event Alpha">>,
|
||||
start_time => api_test_runner:future_date(),
|
||||
duration => 60
|
||||
}),
|
||||
Event2Id = api_test_runner:create_event(UserToken, CalId, #{
|
||||
title => <<"Beta Event">>,
|
||||
start_time => api_test_runner:future_date(),
|
||||
duration => 60
|
||||
}),
|
||||
|
||||
%% Выполняем тесты
|
||||
test_list_events(Token, CalId, Event1Id, Event2Id),
|
||||
test_get_event(Token, Event1Id),
|
||||
test_update_event(Token, Event1Id),
|
||||
test_delete_event(Token, Event2Id),
|
||||
test_filter_events(Token, CalId),
|
||||
test_search_events(Token, CalId),
|
||||
test_event_pagination(Token, CalId),
|
||||
test_delete_event(Token, Event1Id),
|
||||
|
||||
ct:pal("=== All admin events tests passed ==="),
|
||||
ok.
|
||||
|
||||
%%%===================================================================
|
||||
%%% Тестовые функции
|
||||
%%%===================================================================
|
||||
|
||||
%% @doc GET /v1/admin/events – список событий (базовая проверка).
|
||||
test_list_events(Token, _CalId, _Event1Id, _Event2Id) ->
|
||||
ct:pal(" TEST: List all events"),
|
||||
Events = api_test_runner:admin_get(<<"/v1/admin/events">>, Token),
|
||||
?assert(is_list(Events)),
|
||||
?assert(length(Events) >= 2),
|
||||
ct:pal(" OK: ~p events found", [length(Events)]).
|
||||
|
||||
%% @doc GET /v1/admin/events/:id – получение события по ID.
|
||||
test_get_event(Token, EventId) ->
|
||||
ct:pal(" TEST: Get event by ID"),
|
||||
Path = <<"/v1/admin/events/", EventId/binary>>,
|
||||
Event = api_test_runner:admin_get(Path, Token),
|
||||
?assertEqual(EventId, maps:get(<<"id">>, Event)),
|
||||
?assertEqual(<<"active">>, maps:get(<<"status">>, Event)),
|
||||
ct:pal(" OK: ~s", [maps:get(<<"title">>, Event)]).
|
||||
|
||||
%% @doc PUT /v1/admin/events/:id – обновление события.
|
||||
test_update_event(Token, EventId) ->
|
||||
ct:pal(" TEST: Update event"),
|
||||
Path = <<"/v1/admin/events/", EventId/binary>>,
|
||||
Updates = #{<<"title">> => <<"Updated by admin">>, <<"description">> => <<"Test update">>},
|
||||
Updated = api_test_runner:admin_put(Path, Token, Updates),
|
||||
?assertEqual(<<"Updated by admin">>, maps:get(<<"title">>, Updated)),
|
||||
?assertEqual(<<"Test update">>, maps:get(<<"description">>, Updated)),
|
||||
ct:pal(" OK").
|
||||
|
||||
%% @doc DELETE /v1/admin/events/:id – удаление события.
|
||||
test_delete_event(Token, EventId) ->
|
||||
ct:pal(" TEST: Delete event"),
|
||||
Path = <<"/v1/admin/events/", EventId/binary>>,
|
||||
Deleted = api_test_runner:admin_delete(Path, Token),
|
||||
?assertEqual(<<"deleted">>, maps:get(<<"status">>, Deleted)),
|
||||
ct:pal(" OK").
|
||||
|
||||
%% @doc GET /v1/admin/events?status=active – фильтрация по статусу.
|
||||
test_filter_events(Token, CalId) ->
|
||||
ct:pal(" TEST: Filter events by status=active"),
|
||||
Path = <<"/v1/admin/events?calendar_id=", CalId/binary, "&status=active">>,
|
||||
Events = api_test_runner:admin_get(Path, Token),
|
||||
?assert(is_list(Events)),
|
||||
[?assertEqual(<<"active">>, maps:get(<<"status">>, E)) || E <- Events],
|
||||
ct:pal(" OK: ~p events", [length(Events)]).
|
||||
|
||||
%% @doc GET /v1/admin/events?q=... – поиск по подстроке.
|
||||
test_search_events(Token, CalId) ->
|
||||
ct:pal(" TEST: Search events by title substring"),
|
||||
Path = <<"/v1/admin/events?calendar_id=", CalId/binary, "&q=Updated">>,
|
||||
Events = api_test_runner:admin_get(Path, Token),
|
||||
?assert(is_list(Events)),
|
||||
?assert(length(Events) >= 1),
|
||||
[?assertNotEqual(nomatch, binary:match(maps:get(<<"title">>, E), <<"Updated">>)) || E <- Events],
|
||||
ct:pal(" OK: ~p results", [length(Events)]).
|
||||
|
||||
%% @doc GET /v1/admin/events?limit=...&offset=... – пагинация.
|
||||
test_event_pagination(Token, CalId) ->
|
||||
ct:pal(" TEST: Event pagination"),
|
||||
Base = <<"/v1/admin/events?calendar_id=", CalId/binary, "&status=all&sort=title&order=asc">>,
|
||||
Page1 = api_test_runner:admin_get(<<Base/binary, "&limit=1&offset=0">>, Token),
|
||||
?assertEqual(1, length(Page1)),
|
||||
Page2 = api_test_runner:admin_get(<<Base/binary, "&limit=1&offset=1">>, Token),
|
||||
?assertEqual(1, length(Page2)),
|
||||
Id1 = maps:get(<<"id">>, hd(Page1)),
|
||||
Id2 = maps:get(<<"id">>, hd(Page2)),
|
||||
?assertNotEqual(Id1, Id2),
|
||||
ct:pal(" OK").
|
||||
Reference in New Issue
Block a user