Files
EventHubBack/test/api/admins/admin_moderation_tests.erl

133 lines
5.2 KiB
Erlang

%%%-------------------------------------------------------------------
%%% @doc Тесты административного API для модерации сущностей.
%%%
%%% Покрывает эндпоинты:
%%% PUT /v1/admin/:target_type/:id
%%%
%%% Проверяет:
%%% - заморозку/разморозку календаря
%%% - заморозку/разморозку события
%%% - скрытие/раскрытие отзыва
%%% - блокировку/разблокировку пользователя
%%% @end
%%%-------------------------------------------------------------------
-module(admin_moderation_tests).
-include_lib("eunit/include/eunit.hrl").
-export([test/0]).
%%%===================================================================
%%% Главная тестовая функция
%%%===================================================================
-spec test() -> ok.
test() ->
ct:pal("=== Admin Moderation Tests ==="),
Token = api_test_runner:get_admin_token(),
UserToken = api_test_runner:get_user_token(),
% Создаём календарь и событие
CalId = api_test_runner:create_calendar(UserToken, #{title => <<"ModTestCal">>}),
EventId = api_test_runner:create_event(UserToken, CalId, #{
title => <<"Event to moderate">>,
start_time => api_test_runner:future_date(),
duration => 60
}),
% Создаём пользователя для блокировки
UserEmail = api_test_runner:unique_email(<<"moduser">>),
UserTok = api_test_runner:register_and_login(UserEmail, <<"pass">>),
#{<<"id">> := UserId} = api_test_runner:client_get(<<"/v1/user/me">>, UserTok),
% Создаём отзыв (требуется участие)
#{<<"id">> := BookingId} = api_test_runner:client_post(
<<"/v1/events/", EventId/binary, "/bookings">>, UserTok, #{}),
api_test_runner:client_put(<<"/v1/bookings/", BookingId/binary>>, UserToken,
#{action => <<"confirm">>}),
#{<<"id">> := ReviewId} = api_test_runner:client_post(<<"/v1/reviews">>, UserTok, #{
target_type => <<"event">>,
target_id => EventId,
rating => 3,
comment => <<"Moderate me">>
}),
% Тесты модерации
test_freeze_calendar(Token, CalId),
test_unfreeze_calendar(Token, CalId),
test_freeze_event(Token, EventId),
test_unfreeze_event(Token, EventId),
test_hide_review(Token, ReviewId),
test_unhide_review(Token, ReviewId),
test_block_user(Token, UserId),
test_unblock_user(Token, UserId),
ct:pal("=== All admin moderation tests passed ==="),
ok.
%%%===================================================================
%%% Тестовые функции
%%%===================================================================
test_freeze_calendar(Token, Id) ->
ct:pal(" TEST: Freeze calendar"),
Path = <<"/v1/admin/calendar/", Id/binary>>,
Body = #{<<"action">> => <<"freeze">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"frozen">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_unfreeze_calendar(Token, Id) ->
ct:pal(" TEST: Unfreeze calendar"),
Path = <<"/v1/admin/calendar/", Id/binary>>,
Body = #{<<"action">> => <<"unfreeze">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"active">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_freeze_event(Token, Id) ->
ct:pal(" TEST: Freeze event"),
Path = <<"/v1/admin/event/", Id/binary>>,
Body = #{<<"action">> => <<"freeze">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"frozen">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_unfreeze_event(Token, Id) ->
ct:pal(" TEST: Unfreeze event"),
Path = <<"/v1/admin/event/", Id/binary>>,
Body = #{<<"action">> => <<"unfreeze">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"active">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_hide_review(Token, ReviewId) ->
ct:pal(" TEST: Hide review"),
Path = <<"/v1/admin/review/", ReviewId/binary>>,
Body = #{<<"action">> => <<"hide">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"hidden">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_unhide_review(Token, ReviewId) ->
ct:pal(" TEST: Unhide review"),
Path = <<"/v1/admin/review/", ReviewId/binary>>,
Body = #{<<"action">> => <<"unhide">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"visible">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_block_user(Token, UserId) ->
ct:pal(" TEST: Block user"),
Path = <<"/v1/admin/user/", UserId/binary>>,
Body = #{<<"action">> => <<"block">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"blocked">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").
test_unblock_user(Token, UserId) ->
ct:pal(" TEST: Unblock user"),
Path = <<"/v1/admin/user/", UserId/binary>>,
Body = #{<<"action">> => <<"unblock">>, <<"reason">> => <<"Test">>},
Resp = api_test_runner:admin_put(Path, Token, Body),
?assertEqual(<<"active">>, maps:get(<<"status">>, Resp)),
ct:pal(" OK").