From bd278a07fe3fd51c6dd42fbbdeb2e2f4c034e794 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Tue, 21 Nov 2023 13:08:50 +0300 Subject: [PATCH] Move query notes by user value to mixin --- app/controllers/api/notes_controller.rb | 15 ++--------- app/controllers/concerns/query_methods.rb | 27 +++++++++++++++++++ test/controllers/api/notes_controller_test.rb | 8 ++++++ 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/app/controllers/api/notes_controller.rb b/app/controllers/api/notes_controller.rb index 4b0c3be7c..af0c5e039 100644 --- a/app/controllers/api/notes_controller.rb +++ b/app/controllers/api/notes_controller.rb @@ -256,19 +256,8 @@ module Api @notes = bbox_condition(@notes) # Add any user filter - if params[:display_name] || params[:user] - if params[:display_name] - @user = User.find_by(:display_name => params[:display_name]) - - raise OSM::APIBadUserInput, "User #{params[:display_name]} not known" unless @user - else - @user = User.find_by(:id => params[:user]) - - raise OSM::APIBadUserInput, "User #{params[:user]} not known" unless @user - end - - @notes = @notes.joins(:comments).where(:note_comments => { :author_id => @user }) - end + user = query_conditions_user_value + @notes = @notes.joins(:comments).where(:note_comments => { :author_id => user }) if user # Add any text filter if params[:q] diff --git a/app/controllers/concerns/query_methods.rb b/app/controllers/concerns/query_methods.rb index 672a8c602..eb0684283 100644 --- a/app/controllers/concerns/query_methods.rb +++ b/app/controllers/concerns/query_methods.rb @@ -3,6 +3,33 @@ module QueryMethods private + ## + # Filter the resulting items by user + def query_conditions_user(items, filter_property) + user = query_conditions_user_value + items = items.where(filter_property => user) if user + items + end + + ## + # Get user value for query filtering by user + # Raises OSM::APIBadUserInput if user not found like notes api does, changesets api raises OSM::APINotFoundError instead + def query_conditions_user_value + if params[:display_name] || params[:user] + if params[:display_name] + user = User.find_by(:display_name => params[:display_name]) + + raise OSM::APIBadUserInput, "User #{params[:display_name]} not known" unless user + else + user = User.find_by(:id => params[:user]) + + raise OSM::APIBadUserInput, "User #{params[:user]} not known" unless user + end + + user + end + end + ## # Restrict the resulting items to those created during a particular time period # Using 'to' requires specifying 'from' as well for historical reasons diff --git a/test/controllers/api/notes_controller_test.rb b/test/controllers/api/notes_controller_test.rb index a2c9dc8a4..f1a0f766c 100644 --- a/test/controllers/api/notes_controller_test.rb +++ b/test/controllers/api/notes_controller_test.rb @@ -1066,6 +1066,14 @@ module Api assert_select "gpx", :count => 1 do assert_select "wpt", :count => 1 end + + user2 = create(:user) + get search_api_notes_path(:user => user2.id, :format => "xml") + assert_response :success + assert_equal "application/xml", @response.media_type + assert_select "osm", :count => 1 do + assert_select "note", :count => 0 + end end def test_search_by_time_success -- 2.39.5