X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/aebacc88de18c24c583a12b589eb98cf0b826627..c50e4f50c4fef0b11970202d3c7f95cdc5b620ba:/test/controllers/api/changeset_comments_controller_test.rb diff --git a/test/controllers/api/changeset_comments_controller_test.rb b/test/controllers/api/changeset_comments_controller_test.rb index e456a3ca4..ba4200d3f 100644 --- a/test/controllers/api/changeset_comments_controller_test.rb +++ b/test/controllers/api/changeset_comments_controller_test.rb @@ -5,6 +5,14 @@ module Api ## # test all routes which lead to this controller def test_routes + assert_routing( + { :path => "/api/0.6/changeset_comments", :method => :get }, + { :controller => "api/changeset_comments", :action => "index" } + ) + assert_routing( + { :path => "/api/0.6/changeset_comments.json", :method => :get }, + { :controller => "api/changeset_comments", :action => "index", :format => "json" } + ) assert_routing( { :path => "/api/0.6/changeset/1/comment", :method => :post }, { :controller => "api/changeset_comments", :action => "create", :id => "1" } @@ -31,6 +39,46 @@ module Api ) end + def test_index + user1 = create(:user) + user2 = create(:user) + changeset1 = create(:changeset, :closed, :user => user2) + comment11 = create(:changeset_comment, :changeset => changeset1, :author => user1, :created_at => "2023-01-01", :body => "changeset 1 question") + comment12 = create(:changeset_comment, :changeset => changeset1, :author => user2, :created_at => "2023-02-01", :body => "changeset 1 answer") + changeset2 = create(:changeset, :closed, :user => user1) + comment21 = create(:changeset_comment, :changeset => changeset2, :author => user1, :created_at => "2023-03-01", :body => "changeset 2 note") + comment22 = create(:changeset_comment, :changeset => changeset2, :author => user1, :created_at => "2023-04-01", :body => "changeset 2 extra note") + comment23 = create(:changeset_comment, :changeset => changeset2, :author => user2, :created_at => "2023-05-01", :body => "changeset 2 review") + + get api_changeset_comments_path + assert_response :success + assert_comments_in_order [comment23, comment22, comment21, comment12, comment11] + + get api_changeset_comments_path(:limit => 3) + assert_response :success + assert_comments_in_order [comment23, comment22, comment21] + + get api_changeset_comments_path(:from => "2023-03-15T00:00:00Z") + assert_response :success + assert_comments_in_order [comment23, comment22] + + get api_changeset_comments_path(:from => "2023-01-15T00:00:00Z", :to => "2023-04-15T00:00:00Z") + assert_response :success + assert_comments_in_order [comment22, comment21, comment12] + + get api_changeset_comments_path(:user => user1.id) + assert_response :success + assert_comments_in_order [comment22, comment21, comment11] + + get api_changeset_comments_path(:from => "2023-03-15T00:00:00Z", :format => "json") + assert_response :success + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal 2, js["comments"].count + assert_equal comment23.id, js["comments"][0]["id"] + assert_equal comment22.id, js["comments"][1]["id"] + end + def test_create_by_unauthorized assert_no_difference "ChangesetComment.count" do post changeset_comment_path(create(:changeset, :closed), :text => "This is a comment") @@ -422,5 +470,20 @@ module Api assert_response :success assert comment.reload.visible end + + private + + ## + # check that certain comments exist in the output in the specified order + def assert_comments_in_order(comments) + assert_dom "osm > comment", comments.size do |dom_comments| + comments.zip(dom_comments).each do |comment, dom_comment| + assert_dom dom_comment, "> @id", comment.id.to_s + assert_dom dom_comment, "> @uid", comment.author.id.to_s + assert_dom dom_comment, "> @user", comment.author.display_name + assert_dom dom_comment, "> text", comment.body + end + end + end end end