]> git.openstreetmap.org Git - rails.git/blobdiff - test/functional/relation_controller_test.rb
Tests for PreconditionFailed error messages.
[rails.git] / test / functional / relation_controller_test.rb
index 9942353991286ba104c57687ee83e328953adf72..e51db0b756b23e30f64a4ad611496e28b43316a9 100644 (file)
@@ -269,6 +269,7 @@ class RelationControllerTest < ActionController::TestCase
   # happen to the correct tables and the API gives sensible results. 
   # this is to test a case that gregory marler noticed and posted to
   # josm-dev.
   # happen to the correct tables and the API gives sensible results. 
   # this is to test a case that gregory marler noticed and posted to
   # josm-dev.
+  ## FIXME Move this to an integration test
   def test_update_relation_tags
     basic_authorization "test@example.com", "test"
     rel_id = current_relations(:multi_tag_relation).id
   def test_update_relation_tags
     basic_authorization "test@example.com", "test"
     rel_id = current_relations(:multi_tag_relation).id
@@ -299,7 +300,7 @@ class RelationControllerTest < ActionController::TestCase
   # and the API gives sensible results. this is to test a case that 
   # gregory marler noticed and posted to josm-dev.
   def test_update_relation_tags_via_upload
   # and the API gives sensible results. this is to test a case that 
   # gregory marler noticed and posted to josm-dev.
   def test_update_relation_tags_via_upload
-    basic_authorization "test@example.com", "test"
+    basic_authorization users(:public_user).email, "test"
     rel_id = current_relations(:multi_tag_relation).id
     cs_id = changesets(:public_user_first_change).id
 
     rel_id = current_relations(:multi_tag_relation).id
     cs_id = changesets(:public_user_first_change).id
 
@@ -327,10 +328,10 @@ class RelationControllerTest < ActionController::TestCase
   # -------------------------------------
 
   def test_create_invalid
   # -------------------------------------
 
   def test_create_invalid
-    basic_authorization "test@openstreetmap.org", "test"
+    basic_authorization users(:public_user).email, "test"
 
     # put the relation in a dummy fixture changset
 
     # put the relation in a dummy fixture changset
-    changeset_id = changesets(:normal_user_first_change).id
+    changeset_id = changesets(:public_user_first_change).id
 
     # create a relation with non-existing node as member
     content "<osm><relation changeset='#{changeset_id}'>" +
 
     # create a relation with non-existing node as member
     content "<osm><relation changeset='#{changeset_id}'>" +
@@ -340,16 +341,17 @@ class RelationControllerTest < ActionController::TestCase
     # expect failure
     assert_response :precondition_failed, 
         "relation upload with invalid node did not return 'precondition failed'"
     # expect failure
     assert_response :precondition_failed, 
         "relation upload with invalid node did not return 'precondition failed'"
+    assert_equal "Precondition failed: Cannot create relation: data or member data is invalid.", @response.body
   end
 
   # -------------------------------------
   # Test creating a relation, with some invalid XML
   # -------------------------------------
   def test_create_invalid_xml
   end
 
   # -------------------------------------
   # Test creating a relation, with some invalid XML
   # -------------------------------------
   def test_create_invalid_xml
-    basic_authorization "test@openstreetmap.org", "test"
+    basic_authorization users(:public_user).email, "test"
     
     # put the relation in a dummy fixture changeset that works
     
     # put the relation in a dummy fixture changeset that works
-    changeset_id = changesets(:normal_user_first_change).id
+    changeset_id = changesets(:public_user_first_change).id
     
     # create some xml that should return an error
     content "<osm><relation changeset='#{changeset_id}'>" +
     
     # create some xml that should return an error
     content "<osm><relation changeset='#{changeset_id}'>" +
@@ -368,11 +370,12 @@ class RelationControllerTest < ActionController::TestCase
   # -------------------------------------
   
   def test_delete
   # -------------------------------------
   
   def test_delete
-    # first try to delete relation without auth
+    ## First try to delete relation without auth
     delete :delete, :id => current_relations(:visible_relation).id
     assert_response :unauthorized
     
     delete :delete, :id => current_relations(:visible_relation).id
     assert_response :unauthorized
     
-    ## First try with the private user, to make sure that you get a forbidden
+    
+    ## Then try with the private user, to make sure that you get a forbidden
     basic_authorization(users(:normal_user).email, "test")
     
     # this shouldn't work, as we should need the payload...
     basic_authorization(users(:normal_user).email, "test")
     
     # this shouldn't work, as we should need the payload...
@@ -422,7 +425,7 @@ class RelationControllerTest < ActionController::TestCase
 
     
 
 
     
 
-    # now set auth for the private user
+    ## now set auth for the public user
     basic_authorization(users(:public_user).email, "test");  
 
     # this shouldn't work, as we should need the payload...
     basic_authorization(users(:public_user).email, "test");  
 
     # this shouldn't work, as we should need the payload...
@@ -463,6 +466,7 @@ class RelationControllerTest < ActionController::TestCase
     delete :delete, :id => current_relations(:public_used_relation).id
     assert_response :precondition_failed, 
        "shouldn't be able to delete a relation used in a relation (#{@response.body})"
     delete :delete, :id => current_relations(:public_used_relation).id
     assert_response :precondition_failed, 
        "shouldn't be able to delete a relation used in a relation (#{@response.body})"
+    assert_equal "Precondition failed: The relation 5 is used in relation 6.", @response.body
 
     # this should work when we provide the appropriate payload...
     content(relations(:multi_tag_relation).to_xml)
 
     # this should work when we provide the appropriate payload...
     content(relations(:multi_tag_relation).to_xml)
@@ -478,6 +482,11 @@ class RelationControllerTest < ActionController::TestCase
     content(relations(:invisible_relation).to_xml)
     delete :delete, :id => current_relations(:invisible_relation).id
     assert_response :gone
     content(relations(:invisible_relation).to_xml)
     delete :delete, :id => current_relations(:invisible_relation).id
     assert_response :gone
+    
+    # Public visible relation needs to be deleted
+    content(relations(:public_visible_relation).to_xml)
+    delete :delete, :id => current_relations(:public_visible_relation).id
+    assert_response :success
 
     # this works now because the relation which was using this one 
     # has been deleted.
 
     # this works now because the relation which was using this one 
     # has been deleted.