Rewrite and expand EUnit suite; run unit tests in CI from shared test image. Refs EventHub/EventHubBack#36 [skip ci]
This commit is contained in:
@@ -2,34 +2,20 @@
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
-include("records.hrl").
|
||||
|
||||
-define(TABLES, [user, admin, calendar, event, report, banned_word]).
|
||||
|
||||
%% ----------------------------------------------------------------
|
||||
%% Фикстуры
|
||||
%% ----------------------------------------------------------------
|
||||
setup() ->
|
||||
catch mnesia:stop(),
|
||||
case mnesia:start() of
|
||||
{atomic, ok} -> ok;
|
||||
ok -> ok
|
||||
end,
|
||||
{atomic, ok} = mnesia:create_table(user, [
|
||||
{attributes, record_info(fields, user)}, {ram_copies, [node()]}]),
|
||||
{atomic, ok} = mnesia:create_table(calendar, [
|
||||
{attributes, record_info(fields, calendar)}, {ram_copies, [node()]}]),
|
||||
{atomic, ok} = mnesia:create_table(event, [
|
||||
{attributes, record_info(fields, event)}, {ram_copies, [node()]}]),
|
||||
{atomic, ok} = mnesia:create_table(report, [
|
||||
{attributes, record_info(fields, report)}, {ram_copies, [node()]}]),
|
||||
{atomic, ok} = mnesia:create_table(banned_word, [
|
||||
{attributes, record_info(fields, banned_word)}, {ram_copies, [node()]}]),
|
||||
eh_test_support:start_mnesia(),
|
||||
eh_test_support:ensure_tables(?TABLES),
|
||||
ok.
|
||||
|
||||
cleanup(_) ->
|
||||
mnesia:delete_table(banned_word),
|
||||
mnesia:delete_table(report),
|
||||
mnesia:delete_table(event),
|
||||
mnesia:delete_table(calendar),
|
||||
mnesia:delete_table(user),
|
||||
mnesia:stop().
|
||||
eh_test_support:delete_tables(?TABLES),
|
||||
eh_test_support:stop_mnesia(),
|
||||
ok.
|
||||
|
||||
%% ----------------------------------------------------------------
|
||||
%% Тесты
|
||||
@@ -48,33 +34,30 @@ logic_moderation_test_() ->
|
||||
]}.
|
||||
|
||||
%% ── Вспомогательные функции ──────────────────────────────
|
||||
create_test_user(Role) ->
|
||||
create_test_user() ->
|
||||
UserId = base64:encode(crypto:strong_rand_bytes(16), #{mode => urlsafe, padding => false}),
|
||||
User = #user{
|
||||
id = UserId,
|
||||
email = <<>>,
|
||||
password_hash = <<"hash">>,
|
||||
role = Role,
|
||||
status = active,
|
||||
created_at = calendar:universal_time(),
|
||||
updated_at = calendar:universal_time()
|
||||
},
|
||||
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">>,
|
||||
{{2026, 6, 1}, {10, 0, 0}}, 60),
|
||||
eh_test_support:future_start(), 60),
|
||||
Event#event.id.
|
||||
|
||||
%% ── Тесты ─────────────────────────────────────────────────
|
||||
test_create_report() ->
|
||||
ReporterId = create_test_user(user),
|
||||
OwnerId = create_test_user(user),
|
||||
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">>),
|
||||
@@ -82,19 +65,19 @@ test_create_report() ->
|
||||
?assertEqual(pending, Report#report.status).
|
||||
|
||||
test_get_reports() ->
|
||||
AdminId = create_test_user(admin),
|
||||
ReporterId = create_test_user(user),
|
||||
OwnerId = create_test_user(user),
|
||||
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, <<"">>),
|
||||
{ok, Reports} = logic_moderation:get_reports(AdminId),
|
||||
Reports = logic_moderation:get_reports(AdminId),
|
||||
?assertEqual(1, length(Reports)).
|
||||
|
||||
test_resolve_report() ->
|
||||
AdminId = create_test_user(admin),
|
||||
ReporterId = create_test_user(user),
|
||||
OwnerId = create_test_user(user),
|
||||
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, <<"">>),
|
||||
@@ -103,22 +86,22 @@ test_resolve_report() ->
|
||||
?assertEqual(AdminId, Resolved#report.resolved_by).
|
||||
|
||||
test_add_banned_word() ->
|
||||
AdminId = create_test_user(admin),
|
||||
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_user(admin),
|
||||
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(user),
|
||||
Reporter2 = create_test_user(user),
|
||||
Reporter3 = create_test_user(user),
|
||||
OwnerId = create_test_user(user),
|
||||
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, <<"">>),
|
||||
@@ -128,8 +111,8 @@ test_auto_freeze() ->
|
||||
?assertEqual(frozen, Event#event.status).
|
||||
|
||||
test_freeze_calendar() ->
|
||||
AdminId = create_test_user(admin),
|
||||
OwnerId = create_test_user(user),
|
||||
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),
|
||||
@@ -137,8 +120,8 @@ test_freeze_calendar() ->
|
||||
?assertEqual(active, Unfrozen#calendar.status).
|
||||
|
||||
test_freeze_event() ->
|
||||
AdminId = create_test_user(admin),
|
||||
OwnerId = create_test_user(user),
|
||||
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),
|
||||
@@ -147,9 +130,9 @@ test_freeze_event() ->
|
||||
?assertEqual(active, Unfrozen#event.status).
|
||||
|
||||
test_check_content() ->
|
||||
AdminId = create_test_user(admin),
|
||||
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">>)).
|
||||
?assertEqual(<<"This is ***">>, logic_moderation:auto_moderate(<<"This is bad">>)).
|
||||
|
||||
Reference in New Issue
Block a user