fix: gate calendar reviews on confirmed booking. Refs EventHub/EventHubFront#8

This commit is contained in:
2026-07-20 21:08:12 +03:00
parent dcb5163946
commit 4932f9abae
3 changed files with 32 additions and 1 deletions
Regular → Executable
+16 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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(),