131 lines
4.2 KiB
Erlang
131 lines
4.2 KiB
Erlang
-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)). |