Files
EventHubBack/test/unit/logic_moderation_tests.erl
T
aleksey e9d1a13900
CI / test (push) Failing after 37m9s
CI / deploy-ift (push) Has been skipped
CI / e2e-ift (push) Has been skipped
CI / deploy-stage (push) Has been skipped
CI / e2e-stage (push) Has been skipped
Добавить автомодерацию: политики, порог жалоб, settings/hits API и тесты.
Refs EventHub/EventHubBack#37
Refs EventHub/EventHubBack#38
Refs EventHub/EventHubBack#39
Refs EventHub/EventHubBack#40
2026-07-17 18:09:31 +03:00

141 lines
5.9 KiB
Erlang

-module(logic_moderation_tests).
-include_lib("eunit/include/eunit.hrl").
-include("records.hrl").
-define(TABLES, [user, admin, admin_audit, calendar, event, report, banned_word,
automod_settings, automod_hit, review]).
%% ----------------------------------------------------------------
%% Фикстуры
%% ----------------------------------------------------------------
setup() ->
eh_test_support:start_mnesia(),
eh_test_support:ensure_tables(?TABLES),
core_automod_settings:ensure_defaults(),
ok.
cleanup(_) ->
eh_test_support:delete_tables(?TABLES),
eh_test_support:stop_mnesia(),
ok.
%% ----------------------------------------------------------------
%% Тесты
%% ----------------------------------------------------------------
logic_moderation_test_() ->
{foreach, fun setup/0, fun cleanup/1, [
{"Create report test", fun test_create_report/0},
{"Get reports test", fun test_get_reports/0},
{"Resolve report test", fun test_resolve_report/0},
{"Add banned word test", fun test_add_banned_word/0},
{"Remove banned word test", fun test_remove_banned_word/0},
{"Auto freeze by reports test", fun test_auto_freeze/0},
{"Freeze/unfreeze calendar test", fun test_freeze_calendar/0},
{"Freeze/unfreeze event test", fun test_freeze_event/0},
{"Check content test", fun test_check_content/0}
]}.
%% ── Вспомогательные функции ──────────────────────────────
create_test_user() ->
UserId = base64:encode(crypto:strong_rand_bytes(16), #{mode => urlsafe, padding => false}),
User = eh_test_support:make_user(#{id => UserId, email => <<UserId/binary, "@test.com">>}),
mnesia:dirty_write(User),
UserId.
create_test_admin() ->
AdminId = base64:encode(crypto:strong_rand_bytes(16), #{mode => urlsafe, padding => false}),
Admin = eh_test_support:seed_admin(#{id => AdminId, email => <<AdminId/binary, "@admin.test">>}),
Admin#admin.id.
create_test_calendar(OwnerId) ->
{ok, Calendar} = core_calendar:create(OwnerId, <<"Test">>, <<"">>, manual),
Calendar#calendar.id.
create_test_event(CalendarId) ->
{ok, Event} = core_event:create(CalendarId, <<"Event">>,
eh_test_support:future_start(), 60),
Event#event.id.
%% ── Тесты ─────────────────────────────────────────────────
test_create_report() ->
ReporterId = create_test_user(),
OwnerId = create_test_user(),
CalendarId = create_test_calendar(OwnerId),
EventId = create_test_event(CalendarId),
{ok, Report} = logic_moderation:create_report(ReporterId, event, EventId, <<"Bad content">>),
?assertEqual(ReporterId, Report#report.reporter_id),
?assertEqual(pending, Report#report.status).
test_get_reports() ->
AdminId = create_test_admin(),
ReporterId = create_test_user(),
OwnerId = create_test_user(),
CalendarId = create_test_calendar(OwnerId),
EventId = create_test_event(CalendarId),
{ok, _} = logic_moderation:create_report(ReporterId, event, EventId, <<"">>),
Reports = logic_moderation:get_reports(AdminId),
?assertEqual(1, length(Reports)).
test_resolve_report() ->
AdminId = create_test_admin(),
ReporterId = create_test_user(),
OwnerId = create_test_user(),
CalendarId = create_test_calendar(OwnerId),
EventId = create_test_event(CalendarId),
{ok, Report} = logic_moderation:create_report(ReporterId, event, EventId, <<"">>),
{ok, Resolved} = logic_moderation:resolve_report(AdminId, Report#report.id, reviewed),
?assertEqual(reviewed, Resolved#report.status),
?assertEqual(AdminId, Resolved#report.resolved_by).
test_add_banned_word() ->
AdminId = create_test_admin(),
{ok, BW} = logic_moderation:add_banned_word(AdminId, <<"badword">>),
?assertEqual(<<"badword">>, BW#banned_word.word),
?assertEqual(AdminId, BW#banned_word.added_by).
test_remove_banned_word() ->
AdminId = create_test_admin(),
{ok, _} = logic_moderation:add_banned_word(AdminId, <<"badword">>),
{ok, deleted} = logic_moderation:remove_banned_word(AdminId, <<"badword">>),
?assertEqual([], core_banned_words:list_banned_words()).
test_auto_freeze() ->
Reporter1 = create_test_user(),
Reporter2 = create_test_user(),
Reporter3 = create_test_user(),
OwnerId = create_test_user(),
CalendarId = create_test_calendar(OwnerId),
EventId = create_test_event(CalendarId),
{ok, _} = logic_moderation:create_report(Reporter1, event, EventId, <<"">>),
{ok, _} = logic_moderation:create_report(Reporter2, event, EventId, <<"">>),
{ok, _} = logic_moderation:create_report(Reporter3, event, EventId, <<"">>),
{ok, Event} = core_event:get_by_id(EventId),
?assertEqual(frozen, Event#event.status).
test_freeze_calendar() ->
AdminId = create_test_admin(),
OwnerId = create_test_user(),
CalendarId = create_test_calendar(OwnerId),
{ok, Frozen} = logic_moderation:freeze_calendar(AdminId, CalendarId),
?assertEqual(frozen, Frozen#calendar.status),
{ok, Unfrozen} = logic_moderation:unfreeze_calendar(AdminId, CalendarId),
?assertEqual(active, Unfrozen#calendar.status).
test_freeze_event() ->
AdminId = create_test_admin(),
OwnerId = create_test_user(),
CalendarId = create_test_calendar(OwnerId),
EventId = create_test_event(CalendarId),
{ok, Frozen} = logic_moderation:freeze_event(AdminId, EventId),
?assertEqual(frozen, Frozen#event.status),
{ok, Unfrozen} = logic_moderation:unfreeze_event(AdminId, EventId),
?assertEqual(active, Unfrozen#event.status).
test_check_content() ->
AdminId = create_test_admin(),
{ok, _} = logic_moderation:add_banned_word(AdminId, <<"bad">>),
?assertNot(logic_moderation:check_content(<<"Hello">>)),
?assert(logic_moderation:check_content(<<"This is bad">>)),
?assertEqual(<<"Hello">>, logic_moderation:auto_moderate(<<"Hello">>)),
?assertEqual(<<"This is ***">>, logic_moderation:auto_moderate(<<"This is bad">>)).