From 4932f9abaedb1bda5b50803b32a9bca6ee218191 Mon Sep 17 00:00:00 2001 From: Aleksey Sabilin Date: Mon, 20 Jul 2026 21:08:12 +0300 Subject: [PATCH] fix: gate calendar reviews on confirmed booking. Refs EventHub/EventHubFront#8 --- src/logic/logic_review.erl | 17 ++++++++++++++++- src/logic/logic_search.erl | 5 +++++ test/unit/logic_review_tests.erl | 11 +++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/logic/logic_review.erl mode change 100644 => 100755 src/logic/logic_search.erl mode change 100644 => 100755 test/unit/logic_review_tests.erl diff --git a/src/logic/logic_review.erl b/src/logic/logic_review.erl old mode 100644 new mode 100755 index b2ad569..5493b57 --- a/src/logic/logic_review.erl +++ b/src/logic/logic_review.erl @@ -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. diff --git a/src/logic/logic_search.erl b/src/logic/logic_search.erl old mode 100644 new mode 100755 index c50406f..e74c7d2 --- a/src/logic/logic_search.erl +++ b/src/logic/logic_search.erl @@ -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, diff --git a/test/unit/logic_review_tests.erl b/test/unit/logic_review_tests.erl old mode 100644 new mode 100755 index 48b5836..5f01c32 --- a/test/unit/logic_review_tests.erl +++ b/test/unit/logic_review_tests.erl @@ -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(),