]> git.openstreetmap.org Git - rails.git/blobdiff - test/functional/node_controller_test.rb
Merge branch 'master' into openstreetbugs
[rails.git] / test / functional / node_controller_test.rb
index 42311c38fdbbd4a3fea8a10d62f943189812b8ca..fdefd0896065f2dc521f31f4f41bce72ff9e77a0 100644 (file)
@@ -75,6 +75,12 @@ class NodeControllerTest < ActionController::TestCase
     lat = 3.434
     lon = 3.23
     
     lat = 3.434
     lon = 3.23
     
+    # test that the upload is rejected when xml is valid, but osm doc isn't
+    content("<create/>")
+    put :create
+    assert_response :bad_request, "node upload did not return bad_request status"
+    assert_equal "Cannot parse valid node from xml string <create/>. XML doesn't contain an osm/node element.", @response.body
+
     # test that the upload is rejected when no lat is supplied
     # create a minimal xml file
     content("<osm><node lon='#{lon}' changeset='#{changeset.id}'/></osm>")
     # test that the upload is rejected when no lat is supplied
     # create a minimal xml file
     content("<osm><node lon='#{lon}' changeset='#{changeset.id}'/></osm>")
@@ -95,7 +101,7 @@ class NodeControllerTest < ActionController::TestCase
     content("<osm><node lat='#{lat}' lon='#{lon}' changeset='#{changeset.id}'><tag k='foo' v='#{'x'*256}'/></node></osm>")
     put :create
     assert_response :bad_request, "node upload did not return bad_request status"
     content("<osm><node lat='#{lat}' lon='#{lon}' changeset='#{changeset.id}'><tag k='foo' v='#{'x'*256}'/></node></osm>")
     put :create
     assert_response :bad_request, "node upload did not return bad_request status"
-    assert_equal ["NodeTag ", " v: is too long (maximum is 255 characters) (\"#{'x'*256}\")"], @response.body.split(/[0-9]+:/)
+    assert_equal ["NodeTag ", " v: is too long (maximum is 255 characters) (\"#{'x'*256}\")"], @response.body.split(/[0-9]+,foo:/)
 
   end
 
 
   end
 
@@ -178,6 +184,18 @@ class NodeControllerTest < ActionController::TestCase
     delete :delete, :id => current_nodes(:visible_node).id
     assert_response :conflict
 
     delete :delete, :id => current_nodes(:visible_node).id
     assert_response :conflict
 
+    # try to delete a node with a different ID
+    content(nodes(:public_visible_node).to_xml)
+    delete :delete, :id => current_nodes(:visible_node).id
+    assert_response :bad_request, 
+       "should not be able to delete a node with a different ID from the XML"
+
+    # try to delete a node rubbish in the payloads
+    content("<delete/>")
+    delete :delete, :id => current_nodes(:visible_node).id
+    assert_response :bad_request, 
+       "should not be able to delete a node without a valid XML payload"
+
     # valid delete now takes a payload
     content(nodes(:public_visible_node).to_xml)
     delete :delete, :id => current_nodes(:public_visible_node).id
     # valid delete now takes a payload
     content(nodes(:public_visible_node).to_xml)
     delete :delete, :id => current_nodes(:public_visible_node).id
@@ -203,14 +221,14 @@ class NodeControllerTest < ActionController::TestCase
     delete :delete, :id => current_nodes(:used_node_1).id
     assert_response :precondition_failed,
        "shouldn't be able to delete a node used in a way (#{@response.body})"
     delete :delete, :id => current_nodes(:used_node_1).id
     assert_response :precondition_failed,
        "shouldn't be able to delete a node used in a way (#{@response.body})"
-    assert_equal "Precondition failed: Node 3 is still used by way 1.", @response.body
+    assert_equal "Precondition failed: Node 3 is still used by ways 1,3.", @response.body
 
     # in a relation...
     content(nodes(:node_used_by_relationship).to_xml)
     delete :delete, :id => current_nodes(:node_used_by_relationship).id
     assert_response :precondition_failed,
        "shouldn't be able to delete a node used in a relation (#{@response.body})"
 
     # in a relation...
     content(nodes(:node_used_by_relationship).to_xml)
     delete :delete, :id => current_nodes(:node_used_by_relationship).id
     assert_response :precondition_failed,
        "shouldn't be able to delete a node used in a relation (#{@response.body})"
-    assert_match /Precondition failed: Node 5 is still used by relation [13]./, @response.body
+    assert_equal "Precondition failed: Node 5 is still used by relations 1,3.", @response.body
   end
 
   ##
   end
 
   ##
@@ -271,9 +289,6 @@ class NodeControllerTest < ActionController::TestCase
     content current_nodes(:visible_node).to_xml
     put :update, :id => current_nodes(:visible_node).id
     assert_require_public_data "should have failed with a forbidden when data isn't public"
     content current_nodes(:visible_node).to_xml
     put :update, :id => current_nodes(:visible_node).id
     assert_require_public_data "should have failed with a forbidden when data isn't public"
-
-    
-    
     
     ## Finally test with the public user
     
     
     ## Finally test with the public user
     
@@ -344,6 +359,18 @@ class NodeControllerTest < ActionController::TestCase
     assert_response :conflict, 
        "should not be able to put 'p1r4at3s!' in the version field"
     
     assert_response :conflict, 
        "should not be able to put 'p1r4at3s!' in the version field"
     
+    ## try an update with the wrong ID
+    content current_nodes(:public_visible_node).to_xml
+    put :update, :id => current_nodes(:visible_node).id
+    assert_response :bad_request, 
+       "should not be able to update a node with a different ID from the XML"
+
+    ## try an update with a minimal valid XML doc which isn't a well-formed OSM doc.
+    content "<update/>"
+    put :update, :id => current_nodes(:visible_node).id
+    assert_response :bad_request, 
+       "should not be able to update a node with non-OSM XML doc."
+
     ## finally, produce a good request which should work
     content current_nodes(:public_visible_node).to_xml
     put :update, :id => current_nodes(:public_visible_node).id
     ## finally, produce a good request which should work
     content current_nodes(:public_visible_node).to_xml
     put :update, :id => current_nodes(:public_visible_node).id