From 54b5b80183c14c923891b5218f05bbcc4f9eef3a Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Wed, 30 Apr 2025 18:21:43 +0300 Subject: [PATCH] Split and move api changeset test_upload_simple_valid --- .../api/changesets/uploads_controller_test.rb | 128 ++++++++++++++++++ .../api/changesets_controller_test.rb | 111 --------------- 2 files changed, 128 insertions(+), 111 deletions(-) diff --git a/test/controllers/api/changesets/uploads_controller_test.rb b/test/controllers/api/changesets/uploads_controller_test.rb index 6ee1517f9..aefb107bd 100644 --- a/test/controllers/api/changesets/uploads_controller_test.rb +++ b/test/controllers/api/changesets/uploads_controller_test.rb @@ -11,6 +11,134 @@ module Api { :controller => "api/changesets/uploads", :action => "create", :changeset_id => "1" } ) end + + def test_upload_when_unauthorized + changeset = create(:changeset) + node = create(:node, :latitude => 0, :longitude => 0) + + diff = <<~CHANGESET + + + + + + CHANGESET + + post api_changeset_upload_path(changeset), :params => diff + + assert_response :unauthorized + + changeset.reload + assert_equal 0, changeset.num_changes + node.reload + assert_equal 1, node.version + assert_equal 0, node.latitude + assert_equal 0, node.longitude + end + + def test_upload_by_private_user + user = create(:user, :data_public => false) + changeset = create(:changeset, :user => user) + node = create(:node, :latitude => 0, :longitude => 0) + + diff = <<~CHANGESET + + + + + + CHANGESET + + auth_header = bearer_authorization_header user + + post api_changeset_upload_path(changeset), :params => diff, :headers => auth_header + + assert_response :forbidden + + changeset.reload + assert_equal 0, changeset.num_changes + node.reload + assert_equal 1, node.version + assert_equal 0, node.latitude + assert_equal 0, node.longitude + end + + # ------------------------------------- + # Test modifying elements. + # ------------------------------------- + + def test_upload_modify_elements + user = create(:user) + changeset = create(:changeset, :user => user) + node = create(:node, :latitude => 0, :longitude => 0) + way = create(:way) + relation = create(:relation) + other_relation = create(:relation) + + # create some tags, since we test that they are removed later + create(:node_tag, :node => node) + create(:way_tag, :way => way) + create(:relation_tag, :relation => relation) + + # simple diff to change a node, way and relation by removing their tags + diff = <<~CHANGESET + + + + + + + + + + + + + + + + CHANGESET + + auth_header = bearer_authorization_header user + + post api_changeset_upload_path(changeset), :params => diff, :headers => auth_header + + assert_response :success + + assert_dom "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1 do + assert_dom "> node", 1 do + assert_dom "> @old_id", node.id.to_s + assert_dom "> @new_id", node.id.to_s + assert_dom "> @new_version", "2" + end + assert_dom "> way", 1 do + assert_dom "> @old_id", way.id.to_s + assert_dom "> @new_id", way.id.to_s + assert_dom "> @new_version", "2" + end + assert_dom "> relation", 1 do + assert_dom "> @old_id", relation.id.to_s + assert_dom "> @new_id", relation.id.to_s + assert_dom "> @new_version", "2" + end + end + + changeset.reload + assert_equal 3, changeset.num_changes + node.reload + assert_equal 2, node.version + assert_equal 2 * GeoRecord::SCALE, node.latitude + assert_equal 1 * GeoRecord::SCALE, node.longitude + assert_equal 0, node.tags.size, "node #{node.id} should now have no tags" + way.reload + assert_equal 2, way.version + assert_equal 0, way.tags.size, "way #{way.id} should now have no tags" + assert_equal [node], way.nodes + relation.reload + assert_equal 2, relation.version + assert_equal 0, relation.tags.size, "relation #{relation.id} should now have no tags" + assert_equal [["Way", way.id, "some"], ["Node", node.id, "some"], ["Relation", other_relation.id, "some"]], relation.members + end end end end diff --git a/test/controllers/api/changesets_controller_test.rb b/test/controllers/api/changesets_controller_test.rb index 5e74da8b8..68e527886 100644 --- a/test/controllers/api/changesets_controller_test.rb +++ b/test/controllers/api/changesets_controller_test.rb @@ -643,117 +643,6 @@ module Api end end - ## - # upload something simple, but valid and check that it can - # be read back ok - # Also try without auth and another user. - def test_upload_simple_valid - private_user = create(:user, :data_public => false) - private_changeset = create(:changeset, :user => private_user) - user = create(:user) - changeset = create(:changeset, :user => user) - - node = create(:node) - way = create(:way) - relation = create(:relation) - other_relation = create(:relation) - # create some tags, since we test that they are removed later - create(:node_tag, :node => node) - create(:way_tag, :way => way) - create(:relation_tag, :relation => relation) - - ## Try with no auth - changeset_id = changeset.id - - # simple diff to change a node, way and relation by removing - # their tags - diff = <<~CHANGESET - - - - - - - - - - - - - - - - CHANGESET - - # upload it - post api_changeset_upload_path(changeset), :params => diff - assert_response :unauthorized, - "shouldn't be able to upload a simple valid diff to changeset: #{@response.body}" - - ## Now try with a private user - auth_header = bearer_authorization_header private_user - changeset_id = private_changeset.id - - # simple diff to change a node, way and relation by removing - # their tags - diff = <<~CHANGESET - - - - - - - - - - - - - - - - CHANGESET - - # upload it - post api_changeset_upload_path(private_changeset), :params => diff, :headers => auth_header - assert_response :forbidden, - "can't upload a simple valid diff to changeset: #{@response.body}" - - ## Now try with the public user - auth_header = bearer_authorization_header user - changeset_id = changeset.id - - # simple diff to change a node, way and relation by removing - # their tags - diff = <<~CHANGESET - - - - - - - - - - - - - - - - CHANGESET - - # upload it - post api_changeset_upload_path(changeset), :params => diff, :headers => auth_header - assert_response :success, - "can't upload a simple valid diff to changeset: #{@response.body}" - - # check that the changes made it into the database - assert_equal 0, Node.find(node.id).tags.size, "node #{node.id} should now have no tags" - assert_equal 0, Way.find(way.id).tags.size, "way #{way.id} should now have no tags" - assert_equal 0, Relation.find(relation.id).tags.size, "relation #{relation.id} should now have no tags" - end - ## # upload something which creates new objects using placeholders def test_upload_create_valid -- 2.39.5