-module(core_report_tests). -include_lib("eunit/include/eunit.hrl"). -include("records.hrl"). -define(TABLES, [report]). setup() -> eh_test_support:start_mnesia(), eh_test_support:ensure_tables(?TABLES), ok. cleanup(_) -> eh_test_support:delete_tables(?TABLES), eh_test_support:stop_mnesia(), ok. core_report_test_() -> {foreach, fun setup/0, fun cleanup/1, [ {"Create report test", fun test_create_report/0}, {"Get report by id test", fun test_get_by_id/0}, {"List reports by target test", fun test_list_by_target/0}, {"List reports by reporter test", fun test_list_by_reporter/0}, {"Update report status test", fun test_update_status/0}, {"Get count by target test", fun test_get_count_by_target/0} ]}. test_create_report() -> {ok, Report} = core_report:create(<<"user123">>, event, <<"event123">>, <<"Inappropriate content">>), ?assertEqual(<<"user123">>, Report#report.reporter_id), ?assertEqual(event, Report#report.target_type), ?assertEqual(<<"event123">>, Report#report.target_id), ?assertEqual(<<"Inappropriate content">>, Report#report.reason), ?assertEqual(pending, Report#report.status), ?assert(is_binary(Report#report.id)). test_get_by_id() -> {ok, Report} = core_report:create(<<"user123">>, event, <<"ev1">>, <<"Bad">>), {ok, Found} = core_report:get_by_id(Report#report.id), ?assertEqual(Report#report.id, Found#report.id), {error, not_found} = core_report:get_by_id(<<"nonexistent">>). test_list_by_target() -> EventId = <<"event123">>, {ok, _} = core_report:create(<<"user1">>, event, EventId, <<"Reason 1">>), {ok, _} = core_report:create(<<"user2">>, event, EventId, <<"Reason 2">>), {ok, _} = core_report:create(<<"user1">>, calendar, <<"cal1">>, <<"Reason 3">>), Reports = core_report:list_by_target(event, EventId), ?assertEqual(2, length(Reports)). test_list_by_reporter() -> {ok, _} = core_report:create(<<"user1">>, event, <<"ev1">>, <<"">>), {ok, _} = core_report:create(<<"user1">>, event, <<"ev2">>, <<"">>), {ok, _} = core_report:create(<<"user2">>, event, <<"ev3">>, <<"">>), Reports = core_report:list_by_reporter(<<"user1">>), ?assertEqual(2, length(Reports)). test_update_status() -> {ok, Report} = core_report:create(<<"user123">>, event, <<"ev1">>, <<"">>), {ok, Updated} = core_report:update_status(Report#report.id, reviewed, <<"admin123">>), ?assertEqual(reviewed, Updated#report.status), ?assertEqual(<<"admin123">>, Updated#report.resolved_by), ?assert(Updated#report.resolved_at =/= undefined). test_get_count_by_target() -> EventId = <<"event123">>, ?assertEqual(0, core_report:get_count_by_target(event, EventId)), {ok, _} = core_report:create(<<"user1">>, event, EventId, <<"">>), ?assertEqual(1, core_report:get_count_by_target(event, EventId)), {ok, _} = core_report:create(<<"user2">>, event, EventId, <<"">>), ?assertEqual(2, core_report:get_count_by_target(event, EventId)).