X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/7e5cbe87ed37f9cba8224fa4049047d7f981f66a..c65f808244a5042c5b437b5f3ea8dcc6d8513002:/test/controllers/api/changesets_controller_test.rb
diff --git a/test/controllers/api/changesets_controller_test.rb b/test/controllers/api/changesets_controller_test.rb
index af5cabbaa..7f2cd0abb 100644
--- a/test/controllers/api/changesets_controller_test.rb
+++ b/test/controllers/api/changesets_controller_test.rb
@@ -272,7 +272,7 @@ module Api
js = ActiveSupport::JSON.decode(@response.body)
assert_not_nil js
assert_equal(-5, js["changeset"]["min_lat"])
- assert_equal 5, js["changeset"]["min_lon"]
+ assert_equal 5, js["changeset"]["min_lon"]
assert_equal 15, js["changeset"]["max_lat"]
assert_equal 12, js["changeset"]["max_lon"]
end
@@ -1112,12 +1112,96 @@ module Api
CHANGESET
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :bad_request,
+ "shouldn't be able to re-use placeholder IDs"
+
+ # placeholder_ids must be unique across all action blocks
+ diff = <<~CHANGESET
+
+
+
+
+
+
+
+
+ CHANGESET
+
# upload it
post changeset_upload_path(changeset), :params => diff, :headers => auth_header
assert_response :bad_request,
"shouldn't be able to re-use placeholder IDs"
end
+ def test_upload_process_order
+ changeset = create(:changeset)
+
+ auth_header = basic_authorization_header changeset.user.email, "test"
+
+ diff = <<~CHANGESET
+
+
+
+
+
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :bad_request,
+ "shouldn't refer elements behind it"
+ end
+
+ def test_upload_duplicate_delete
+ changeset = create(:changeset)
+
+ auth_header = basic_authorization_header changeset.user.email, "test"
+
+ diff = <<~CHANGESET
+
+
+
+
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :gone,
+ "transaction should be cancelled by second deletion"
+
+ diff = <<~CHANGESET
+
+
+
+
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+
+ assert_select "diffResult>node", 3
+ assert_select "diffResult>node[old_id='-1']", 3
+ assert_select "diffResult>node[new_version='1']", 1
+ assert_select "diffResult>node[new_version='2']", 1
+ end
+
##
# test that uploading a way referencing invalid placeholders gives a
# proper error, not a 500.
@@ -1351,6 +1435,153 @@ module Api
assert_select "osmError>message", 1
end
+ def test_upload_not_found
+ changeset = create(:changeset)
+
+ auth_header = basic_authorization_header changeset.user.email, "test"
+
+ # modify node
+ diff = <<~CHANGESET
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :not_found, "Node should not be found"
+
+ # modify way
+ diff = <<~CHANGESET
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :not_found, "Way should not be found"
+
+ # modify relation
+ diff = <<~CHANGESET
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :not_found, "Relation should not be found"
+
+ # delete node
+ diff = <<~CHANGESET
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :not_found, "Node should not be deleted"
+
+ # delete way
+ diff = <<~CHANGESET
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :not_found, "Way should not be deleted"
+
+ # delete relation
+ diff = <<~CHANGESET
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff, :headers => auth_header
+ assert_response :not_found, "Relation should not be deleted"
+ end
+
+ def test_upload_relation_placeholder_not_fix
+ changeset = create(:changeset)
+
+ auth_header = basic_authorization_header changeset.user.email, "test"
+
+ # modify node
+ diff = <<~CHANGESET
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff.to_s, :headers => auth_header
+ assert_response :bad_request, "shouldn't be able to use reference -4 in relation -2: #{@response.body}"
+ assert_equal "Placeholder Relation not found for reference -4 in relation -2.", @response.body
+ end
+
+ def test_upload_multiple_delete_block
+ changeset = create(:changeset)
+
+ auth_header = basic_authorization_header changeset.user.email, "test"
+
+ node = create(:node)
+ way = create(:way)
+ create(:way_node, :way => way, :node => node)
+ alone_node = create(:node)
+
+ # modify node
+ diff = <<~CHANGESET
+
+
+
+
+
+
+
+
+ CHANGESET
+
+ # upload it
+ post changeset_upload_path(changeset), :params => diff.to_s, :headers => auth_header
+ assert_response :precondition_failed,
+ "shouldn't be able to upload a invalid deletion diff: #{@response.body}"
+ assert_equal "Precondition failed: Node #{node.id} is still used by ways #{way.id}.", @response.body
+ end
+
##
# when we make some simple changes we get the same changes back from the
# diff download.
@@ -1537,7 +1768,7 @@ module Api
get changeset_download_path(changeset)
assert_response :success
- # print @response.body
+
# FIXME: needs more assert_select tests
assert_select "osmChange[version='#{Settings.api_version}'][generator='#{Settings.generator}']" do
assert_select "create", :count => 5
@@ -1707,6 +1938,35 @@ module Api
assert_response :bad_request, "should be a bad request since changesets is empty"
end
+ ##
+ # test the query functionality of changesets with the limit parameter
+ def test_query_limit
+ user = create(:user)
+ changeset1 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 1, 1, 0, 0, 0), :closed_at => Time.utc(2008, 1, 2, 0, 0, 0))
+ changeset2 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 2, 1, 0, 0, 0), :closed_at => Time.utc(2008, 2, 2, 0, 0, 0))
+ changeset3 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 3, 1, 0, 0, 0), :closed_at => Time.utc(2008, 3, 2, 0, 0, 0))
+ changeset4 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 4, 1, 0, 0, 0), :closed_at => Time.utc(2008, 4, 2, 0, 0, 0))
+ changeset5 = create(:changeset, :closed, :user => user, :created_at => Time.utc(2008, 5, 1, 0, 0, 0), :closed_at => Time.utc(2008, 5, 2, 0, 0, 0))
+
+ get changesets_path
+ assert_response :success
+ assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+
+ get changesets_path(:limit => "3")
+ assert_response :success
+ assert_changesets [changeset5, changeset4, changeset3]
+
+ get changesets_path(:limit => "0")
+ assert_response :bad_request
+
+ get changesets_path(:limit => Settings.max_changeset_query_limit)
+ assert_response :success
+ assert_changesets [changeset5, changeset4, changeset3, changeset2, changeset1]
+
+ get changesets_path(:limit => Settings.max_changeset_query_limit + 1)
+ assert_response :bad_request
+ end
+
##
# check that errors are returned if garbage is inserted
# into query strings