This commit is contained in:
2026-04-21 10:15:17 +03:00
parent 19f82768e4
commit ee8928fa5f
13 changed files with 1472 additions and 1 deletions

131
test/core_review_tests.erl Normal file
View File

@@ -0,0 +1,131 @@
-module(core_review_tests).
-include_lib("eunit/include/eunit.hrl").
-include("records.hrl").
setup() ->
mnesia:start(),
mnesia:create_table(review, [
{attributes, record_info(fields, review)},
{ram_copies, [node()]}
]),
ok.
cleanup(_) ->
mnesia:delete_table(review),
mnesia:stop(),
ok.
core_review_test_() ->
{foreach,
fun setup/0,
fun cleanup/1,
[
{"Create review test", fun test_create_review/0},
{"Get review by id test", fun test_get_by_id/0},
{"List reviews by target test", fun test_list_by_target/0},
{"List reviews by user test", fun test_list_by_user/0},
{"Update review test", fun test_update_review/0},
{"Delete review test", fun test_delete_review/0},
{"Hide/unhide review test", fun test_hide_unhide/0},
{"Average rating test", fun test_average_rating/0},
{"Has user reviewed test", fun test_has_user_reviewed/0}
]}.
test_create_review() ->
UserId = <<"user123">>,
TargetType = event,
TargetId = <<"event123">>,
Rating = 5,
Comment = <<"Great event!">>,
{ok, Review} = core_review:create(UserId, TargetType, TargetId, Rating, Comment),
?assertEqual(UserId, Review#review.user_id),
?assertEqual(TargetType, Review#review.target_type),
?assertEqual(TargetId, Review#review.target_id),
?assertEqual(Rating, Review#review.rating),
?assertEqual(Comment, Review#review.comment),
?assertEqual(visible, Review#review.status),
?assert(is_binary(Review#review.id)).
test_get_by_id() ->
UserId = <<"user123">>,
{ok, Review} = core_review:create(UserId, event, <<"ev1">>, 4, <<"Good">>),
{ok, Found} = core_review:get_by_id(Review#review.id),
?assertEqual(Review#review.id, Found#review.id),
{error, not_found} = core_review:get_by_id(<<"nonexistent">>).
test_list_by_target() ->
UserId1 = <<"user1">>,
UserId2 = <<"user2">>,
EventId = <<"event123">>,
{ok, _} = core_review:create(UserId1, event, EventId, 5, <<"Awesome">>),
{ok, _} = core_review:create(UserId2, event, EventId, 3, <<"Okay">>),
{ok, _} = core_review:create(UserId1, calendar, <<"cal1">>, 4, <<"Nice">>),
{ok, Reviews} = core_review:list_by_target(event, EventId),
?assertEqual(2, length(Reviews)).
test_list_by_user() ->
UserId1 = <<"user1">>,
UserId2 = <<"user2">>,
{ok, _} = core_review:create(UserId1, event, <<"ev1">>, 5, <<"">>),
{ok, _} = core_review:create(UserId1, event, <<"ev2">>, 4, <<"">>),
{ok, _} = core_review:create(UserId2, event, <<"ev3">>, 3, <<"">>),
{ok, Reviews} = core_review:list_by_user(UserId1),
?assertEqual(2, length(Reviews)).
test_update_review() ->
UserId = <<"user123">>,
{ok, Review} = core_review:create(UserId, event, <<"ev1">>, 3, <<"Old">>),
timer:sleep(2000),
Updates = [{rating, 5}, {comment, <<"Updated!">>}],
{ok, Updated} = core_review:update(Review#review.id, Updates),
?assertEqual(5, Updated#review.rating),
?assertEqual(<<"Updated!">>, Updated#review.comment),
?assert(Updated#review.updated_at > Review#review.updated_at).
test_delete_review() ->
UserId = <<"user123">>,
{ok, Review} = core_review:create(UserId, event, <<"ev1">>, 4, <<"">>),
{ok, deleted} = core_review:delete(Review#review.id),
{error, not_found} = core_review:get_by_id(Review#review.id).
test_hide_unhide() ->
UserId = <<"user123">>,
{ok, Review} = core_review:create(UserId, event, <<"ev1">>, 4, <<"">>),
{ok, Hidden} = core_review:hide(Review#review.id),
?assertEqual(hidden, Hidden#review.status),
{ok, Unhidden} = core_review:unhide(Review#review.id),
?assertEqual(visible, Unhidden#review.status).
test_average_rating() ->
UserId1 = <<"user1">>,
UserId2 = <<"user2">>,
EventId = <<"event123">>,
{ok, _} = core_review:create(UserId1, event, EventId, 5, <<"">>),
{ok, _} = core_review:create(UserId2, event, EventId, 3, <<"">>),
{Avg, Count} = core_review:get_average_rating(event, EventId),
?assertEqual(4.0, Avg),
?assertEqual(2, Count).
test_has_user_reviewed() ->
UserId = <<"user123">>,
EventId = <<"event123">>,
?assertNot(core_review:has_user_reviewed(UserId, event, EventId)),
{ok, _} = core_review:create(UserId, event, EventId, 5, <<"">>),
?assert(core_review:has_user_reviewed(UserId, event, EventId)).