Stage 5
This commit is contained in:
131
test/core_review_tests.erl
Normal file
131
test/core_review_tests.erl
Normal 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)).
|
||||
Reference in New Issue
Block a user