fix: gate calendar reviews on confirmed booking. Refs EventHub/EventHubFront#8
This commit is contained in:
Regular → Executable
+16
-1
@@ -216,7 +216,22 @@ can_review(UserId, TargetType, TargetId) ->
|
||||
{ok, false}
|
||||
end;
|
||||
calendar ->
|
||||
{ok, true};
|
||||
case core_booking:list_by_user(UserId) of
|
||||
{ok, Bookings} ->
|
||||
Has = lists:any(
|
||||
fun(B) ->
|
||||
B#booking.status =:= confirmed andalso
|
||||
case core_event:get_by_id(B#booking.event_id) of
|
||||
{ok, Event} -> Event#event.calendar_id =:= TargetId;
|
||||
_ -> false
|
||||
end
|
||||
end,
|
||||
Bookings
|
||||
),
|
||||
{ok, Has};
|
||||
_ ->
|
||||
{ok, false}
|
||||
end;
|
||||
_ ->
|
||||
{ok, false}
|
||||
end.
|
||||
|
||||
Regular → Executable
+5
@@ -324,9 +324,14 @@ format_event(Event) ->
|
||||
#location{address = Addr, lat = Lat, lon = Lon} ->
|
||||
#{address => Addr, lat => Lat, lon => Lon}
|
||||
end,
|
||||
CalendarTitle = case core_calendar:get_by_id(Event#event.calendar_id) of
|
||||
{ok, Cal} -> Cal#calendar.title;
|
||||
_ -> null
|
||||
end,
|
||||
#{
|
||||
id => Event#event.id,
|
||||
calendar_id => Event#event.calendar_id,
|
||||
calendar_title => CalendarTitle,
|
||||
title => Event#event.title,
|
||||
description => Event#event.description,
|
||||
event_type => Event#event.event_type,
|
||||
|
||||
Regular → Executable
+11
@@ -21,6 +21,7 @@ logic_review_test_() ->
|
||||
[
|
||||
{"Create review for event", fun test_create_event_review/0},
|
||||
{"Create review for calendar", fun test_create_calendar_review/0},
|
||||
{"Cannot review calendar without booking", fun test_cannot_review_calendar_without_booking/0},
|
||||
{"Cannot review without booking", fun test_cannot_review_without_booking/0},
|
||||
{"Cannot review twice", fun test_cannot_review_twice/0},
|
||||
{"Update own review", fun test_update_own_review/0},
|
||||
@@ -74,10 +75,20 @@ test_create_calendar_review() ->
|
||||
OwnerId = create_test_user(),
|
||||
ReviewerId = create_test_user(),
|
||||
CalendarId = create_test_calendar(OwnerId),
|
||||
EventId = create_test_event(CalendarId),
|
||||
create_booking(ReviewerId, EventId),
|
||||
|
||||
{ok, Review} = logic_review:create_review(ReviewerId, calendar, CalendarId, 4, <<"Nice">>),
|
||||
?assertEqual(4, Review#review.rating).
|
||||
|
||||
test_cannot_review_calendar_without_booking() ->
|
||||
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, calendar, CalendarId, 4, <<"Nope">>).
|
||||
|
||||
test_cannot_review_without_booking() ->
|
||||
OwnerId = create_test_user(),
|
||||
UserId = create_test_user(),
|
||||
|
||||
Reference in New Issue
Block a user