Fixed up way controller tests for API 0.6.

This commit is contained in:
Matt Amos 2008-10-13 15:40:32 +00:00
parent fb5f39f19a
commit 1e5782f579
3 changed files with 38 additions and 10 deletions

View file

@ -68,7 +68,7 @@ class WayController < ApplicationController
way = Way.find(params[:id]) way = Way.find(params[:id])
new_way = Way.from_xml(request.raw_post) new_way = Way.from_xml(request.raw_post)
if new_way and new_way.id == way.id if new_way and new_way.id == way.id
way.delete_with_history(@user) way.delete_with_history(new_way, @user)
# if we get here, all is fine, otherwise something will catch below. # if we get here, all is fine, otherwise something will catch below.
render :nothing => true render :nothing => true

View file

@ -11,3 +11,8 @@ second_user_first_change:
created_at: "2008-05-01 01:23:45" created_at: "2008-05-01 01:23:45"
open: 1 open: 1
normal_user_closed_change:
id: 3
user_id: 1
created_at: "2007-01-01 00:00:00"
open: 0

View file

@ -18,7 +18,7 @@ class WayControllerTest < Test::Unit::TestCase
end end
def content(c) def content(c)
@request.env["RAW_POST_DATA"] = c @request.env["RAW_POST_DATA"] = c.to_s
end end
# ------------------------------------- # -------------------------------------
@ -76,10 +76,13 @@ class WayControllerTest < Test::Unit::TestCase
nid2 = current_nodes(:used_node_2).id nid2 = current_nodes(:used_node_2).id
basic_authorization "test@openstreetmap.org", "test" basic_authorization "test@openstreetmap.org", "test"
# FIXME create a new changeset and use the id that is returned for the next step # use the first user's open changeset
changeset_id = changesets(:normal_user_first_change).id
# create a way with pre-existing nodes # create a way with pre-existing nodes
content "<osm><way><nd ref='#{nid1}'/><nd ref='#{nid2}'/><tag k='test' v='yes' /></way></osm>" content "<osm><way changeset='#{changeset_id}'>" +
"<nd ref='#{nid1}'/><nd ref='#{nid2}'/>" +
"<tag k='test' v='yes' /></way></osm>"
put :create put :create
# hope for success # hope for success
assert_response :success, assert_response :success,
@ -96,7 +99,9 @@ class WayControllerTest < Test::Unit::TestCase
"saved way does not contain the right node on pos 0" "saved way does not contain the right node on pos 0"
assert_equal checkway.nds[1], nid2, assert_equal checkway.nds[1], nid2,
"saved way does not contain the right node on pos 1" "saved way does not contain the right node on pos 1"
assert_equal users(:normal_user).id, checkway.user_id, assert_equal checkway.changeset_id, changeset_id,
"saved way does not belong to the correct changeset"
assert_equal users(:normal_user).id, checkway.changeset.user_id,
"saved way does not belong to user that created it" "saved way does not belong to user that created it"
assert_equal true, checkway.visible, assert_equal true, checkway.visible,
"saved way is not visible" "saved way is not visible"
@ -109,20 +114,34 @@ class WayControllerTest < Test::Unit::TestCase
def test_create_invalid def test_create_invalid
basic_authorization "test@openstreetmap.org", "test" basic_authorization "test@openstreetmap.org", "test"
# FIXME All of these will fail because they don't have a valid changeset # use the first user's open changeset
open_changeset_id = changesets(:normal_user_first_change).id
closed_changeset_id = changesets(:normal_user_closed_change).id
nid1 = current_nodes(:used_node_1).id
# create a way with non-existing node # create a way with non-existing node
content "<osm><way><nd ref='0'/><tag k='test' v='yes' /></way></osm>" content "<osm><way changeset='#{open_changeset_id}'>" +
"<nd ref='0'/><tag k='test' v='yes' /></way></osm>"
put :create put :create
# expect failure # expect failure
assert_response :precondition_failed, assert_response :precondition_failed,
"way upload with invalid node did not return 'precondition failed'" "way upload with invalid node did not return 'precondition failed'"
# create a way with no nodes # create a way with no nodes
content "<osm><way><tag k='test' v='yes' /></way></osm>" content "<osm><way changeset='#{open_changeset_id}'>" +
"<tag k='test' v='yes' /></way></osm>"
put :create put :create
# expect failure # expect failure
assert_response :precondition_failed, assert_response :precondition_failed,
"way upload with no node did not return 'precondition failed'" "way upload with no node did not return 'precondition failed'"
# create a way inside a closed changeset
content "<osm><way changeset='#{closed_changeset_id}'>" +
"<nd ref='#{nid1}'/></way></osm>"
put :create
# expect failure
assert_response :precondition_failed,
"way upload to closed changeset did not return 'precondition failed'"
end end
# ------------------------------------- # -------------------------------------
@ -130,7 +149,6 @@ class WayControllerTest < Test::Unit::TestCase
# ------------------------------------- # -------------------------------------
def test_delete def test_delete
# first try to delete way without auth # first try to delete way without auth
delete :delete, :id => current_ways(:visible_way).id delete :delete, :id => current_ways(:visible_way).id
assert_response :unauthorized assert_response :unauthorized
@ -143,13 +161,18 @@ class WayControllerTest < Test::Unit::TestCase
assert_response :bad_request assert_response :bad_request
# Now try without having a changeset # Now try without having a changeset
content "<osm><way id='#{current_ways(:visible_way).id}'</osm>" content "<osm><way id='#{current_ways(:visible_way).id}'></osm>"
delete :delete, :id => current_ways(:visible_way).id delete :delete, :id => current_ways(:visible_way).id
assert_response :bad_request assert_response :bad_request
# Now try and get a changeset # Now try and get a changeset
changeset_id = changesets(:normal_user_first_change).id
content current_ways(:visible_way).to_xml
delete :delete, :id => current_ways(:visible_way).id
assert_response :success
# this won't work since the way is already deleted # this won't work since the way is already deleted
content current_ways(:invisible_way).to_xml
delete :delete, :id => current_ways(:invisible_way).id delete :delete, :id => current_ways(:invisible_way).id
assert_response :gone assert_response :gone