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,22 +2,16 @@
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
-include("records.hrl").
|
||||
|
||||
-define(TABLES, [user, admin, calendar, event, booking, review]).
|
||||
|
||||
setup() ->
|
||||
mnesia:start(),
|
||||
mnesia:create_table(user, [{attributes, record_info(fields, user)}, {ram_copies, [node()]}]),
|
||||
mnesia:create_table(calendar, [{attributes, record_info(fields, calendar)}, {ram_copies, [node()]}]),
|
||||
mnesia:create_table(event, [{attributes, record_info(fields, event)}, {ram_copies, [node()]}]),
|
||||
mnesia:create_table(booking, [{attributes, record_info(fields, booking)}, {ram_copies, [node()]}]),
|
||||
mnesia:create_table(review, [{attributes, record_info(fields, review)}, {ram_copies, [node()]}]),
|
||||
eh_test_support:start_mnesia(),
|
||||
eh_test_support:ensure_tables(?TABLES),
|
||||
ok.
|
||||
|
||||
cleanup(_) ->
|
||||
mnesia:delete_table(review),
|
||||
mnesia:delete_table(booking),
|
||||
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.
|
||||
|
||||
logic_review_test_() ->
|
||||
@@ -36,29 +30,35 @@ logic_review_test_() ->
|
||||
{"Rating updates target", fun test_rating_updates_target/0}
|
||||
]}.
|
||||
|
||||
create_test_user(Role) ->
|
||||
create_test_user() ->
|
||||
UserId = base64:encode(crypto:strong_rand_bytes(16), #{mode => urlsafe, padding => false}),
|
||||
User = #user{id = UserId, email = <<UserId/binary, "@test.com">>, 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),
|
||||
{ok, Event} = core_event:create(CalendarId, <<"Event">>, eh_test_support:future_start(), 60),
|
||||
Event#event.id.
|
||||
|
||||
create_booking(UserId, EventId) ->
|
||||
{ok, Booking} = core_booking:create(EventId, UserId),
|
||||
core_booking:update_status(Booking#booking.id, confirmed),
|
||||
{ok, Booking} = core_booking:create(EventId, UserId, pending),
|
||||
Now = calendar:universal_time(),
|
||||
{ok, _} = core_booking:update(Booking#booking.id,
|
||||
[{status, confirmed}, {confirmed_at, Now}]),
|
||||
Booking#booking.id.
|
||||
|
||||
test_create_event_review() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ParticipantId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
ParticipantId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ParticipantId, EventId),
|
||||
@@ -66,30 +66,29 @@ test_create_event_review() ->
|
||||
{ok, Review} = logic_review:create_review(ParticipantId, event, EventId, 5, <<"Great!">>),
|
||||
?assertEqual(5, Review#review.rating),
|
||||
|
||||
% Проверяем, что рейтинг события обновился
|
||||
{ok, Event} = core_event:get_by_id(EventId),
|
||||
?assertEqual(5.0, Event#event.rating_avg),
|
||||
?assertEqual(1, Event#event.rating_count).
|
||||
|
||||
test_create_calendar_review() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ReviewerId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
ReviewerId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
|
||||
{ok, Review} = logic_review:create_review(ReviewerId, calendar, CalendarId, 4, <<"Nice">>),
|
||||
?assertEqual(4, Review#review.rating).
|
||||
|
||||
test_cannot_review_without_booking() ->
|
||||
OwnerId = create_test_user(user),
|
||||
UserId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
UserId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
|
||||
{error, cannot_review} = logic_review:create_review(UserId, event, EventId, 5, <<"">>).
|
||||
|
||||
test_cannot_review_twice() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ParticipantId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
ParticipantId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ParticipantId, EventId),
|
||||
@@ -98,8 +97,8 @@ test_cannot_review_twice() ->
|
||||
{error, already_reviewed} = logic_review:create_review(ParticipantId, event, EventId, 4, <<"">>).
|
||||
|
||||
test_update_own_review() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ParticipantId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
ParticipantId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ParticipantId, EventId),
|
||||
@@ -109,9 +108,9 @@ test_update_own_review() ->
|
||||
?assertEqual(5, Updated#review.rating).
|
||||
|
||||
test_cannot_update_others() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ParticipantId = create_test_user(user),
|
||||
OtherId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
ParticipantId = create_test_user(),
|
||||
OtherId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ParticipantId, EventId),
|
||||
@@ -120,8 +119,8 @@ test_cannot_update_others() ->
|
||||
{error, access_denied} = logic_review:update_review(OtherId, Review#review.id, [{rating, 5}]).
|
||||
|
||||
test_delete_own_review() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ParticipantId = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
ParticipantId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ParticipantId, EventId),
|
||||
@@ -130,9 +129,9 @@ test_delete_own_review() ->
|
||||
{ok, deleted} = logic_review:delete_review(ParticipantId, Review#review.id).
|
||||
|
||||
test_admin_hide_review() ->
|
||||
OwnerId = create_test_user(user),
|
||||
ParticipantId = create_test_user(user),
|
||||
AdminId = create_test_user(admin),
|
||||
OwnerId = create_test_user(),
|
||||
ParticipantId = create_test_user(),
|
||||
AdminId = create_test_admin(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ParticipantId, EventId),
|
||||
@@ -142,9 +141,9 @@ test_admin_hide_review() ->
|
||||
?assertEqual(hidden, Hidden#review.status).
|
||||
|
||||
test_rating_updates_target() ->
|
||||
OwnerId = create_test_user(user),
|
||||
P1 = create_test_user(user),
|
||||
P2 = create_test_user(user),
|
||||
OwnerId = create_test_user(),
|
||||
P1 = create_test_user(),
|
||||
P2 = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(P1, EventId),
|
||||
@@ -158,4 +157,4 @@ test_rating_updates_target() ->
|
||||
{ok, _} = logic_review:create_review(P2, event, EventId, 3, <<"">>),
|
||||
{ok, Event2} = core_event:get_by_id(EventId),
|
||||
?assertEqual(4.0, Event2#event.rating_avg),
|
||||
?assertEqual(2, Event2#event.rating_count).
|
||||
?assertEqual(2, Event2#event.rating_count).
|
||||
|
||||
Reference in New Issue
Block a user