From 80e3d774a22e53fa6d1d0627858d89f5cdbc39a7 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Thu, 10 Jul 2025 10:23:09 +0300 Subject: [PATCH] Test modify single element changeset uploads --- .../api/changesets/uploads_controller_test.rb | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/test/controllers/api/changesets/uploads_controller_test.rb b/test/controllers/api/changesets/uploads_controller_test.rb index 84d9bdb72..9e94dbf16 100644 --- a/test/controllers/api/changesets/uploads_controller_test.rb +++ b/test/controllers/api/changesets/uploads_controller_test.rb @@ -623,6 +623,144 @@ module Api # Test modifying elements. # ------------------------------------- + def test_upload_modify_node + user = create(:user) + changeset = create(:changeset, :user => user) + node = create(:node, :latitude => 0, :longitude => 0) + create(:node_tag, :node => node) + + diff = <<~CHANGESET + + + + + + CHANGESET + + auth_header = bearer_authorization_header user + + assert_difference "Node.count" => 0, + "OldNode.count" => 1, + "NodeTag.count" => -1, + "OldNodeTag.count" => 0 do + post api_changeset_upload_path(changeset), :params => diff, :headers => auth_header + + assert_response :success + end + + 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 + end + + changeset.reload + assert_equal 1, 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" + end + + def test_upload_modify_way + user = create(:user) + changeset = create(:changeset, :user => user) + node = create(:node) + way = create(:way_with_nodes, :nodes_count => 3) + create(:way_tag, :way => way) + + diff = <<~CHANGESET + + + + + + + + CHANGESET + + auth_header = bearer_authorization_header user + + assert_difference "Way.count" => 0, + "OldWay.count" => 1, + "WayTag.count" => -1, + "OldWayTag.count" => 0, + "WayNode.count" => -2, + "OldWayNode.count" => 1 do + post api_changeset_upload_path(changeset), :params => diff, :headers => auth_header + + assert_response :success + end + + assert_dom "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1 do + 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 + end + + changeset.reload + assert_equal 1, changeset.num_changes + 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 + end + + def test_upload_modify_relation + user = create(:user) + changeset = create(:changeset, :user => user) + node = create(:node) + way = create(:way_with_nodes) + relation = create(:relation) + other_relation = create(:relation) + create(:relation_tag, :relation => relation) + + diff = <<~CHANGESET + + + + + + + + + + CHANGESET + + auth_header = bearer_authorization_header user + + assert_difference "Relation.count" => 0, + "OldRelation.count" => 1, + "RelationTag.count" => -1, + "OldRelationTag.count" => 0, + "RelationMember.count" => 3, + "OldRelationMember.count" => 3 do + post api_changeset_upload_path(changeset), :params => diff, :headers => auth_header + + assert_response :success + end + + assert_dom "diffResult[version='#{Settings.api_version}'][generator='#{Settings.generator}']", 1 do + 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 1, changeset.num_changes + 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 + def test_upload_modify_elements user = create(:user) changeset = create(:changeset, :user => user) -- 2.39.5