%%%------------------------------------------------------------------- %%% @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").