X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/d23d2c9d05267b76a53058a5ee694a9fc677eb5a..17a7c69e8dfefb5dda2a9f57d6ea3c879d4568f4:/test/functional/changeset_controller_test.rb
diff --git a/test/functional/changeset_controller_test.rb b/test/functional/changeset_controller_test.rb
index e1cb3a7d4..befa8192a 100644
--- a/test/functional/changeset_controller_test.rb
+++ b/test/functional/changeset_controller_test.rb
@@ -419,6 +419,57 @@ EOF
end
end
+ def test_upload_large_changeset
+ basic_authorization users(:public_user).email, "test"
+
+ # create a changeset
+ content ""
+ put :create
+ assert_response :success, "Should be able to create a changeset: #{@response.body}"
+ changeset_id = @response.body.to_i
+
+ # upload some widely-spaced nodes, spiralling positive and negative to cause
+ # largest bbox over-expansion possible.
+ diff = <
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+EOF
+
+ # upload it, which used to cause an error like "PGError: ERROR:
+ # integer out of range" (bug #2152). but shouldn't any more.
+ content diff
+ post :upload, :id => changeset_id
+ assert_response :success,
+ "can't upload a spatially-large diff to changeset: #{@response.body}"
+
+ # check that the changeset bbox is within bounds
+ cs = Changeset.find(changeset_id)
+ assert cs.min_lon >= -180 * SCALE, "Minimum longitude (#{cs.min_lon / SCALE}) should be >= -180 to be valid."
+ assert cs.max_lon <= 180 * SCALE, "Maximum longitude (#{cs.max_lon / SCALE}) should be <= 180 to be valid."
+ assert cs.min_lat >= -90 * SCALE, "Minimum latitude (#{cs.min_lat / SCALE}) should be >= -90 to be valid."
+ assert cs.max_lat >= 90 * SCALE, "Maximum latitude (#{cs.max_lat / SCALE}) should be <= 90 to be valid."
+ end
+
##
# test that deleting stuff in a transaction doesn't bypass the checks
# to ensure that used elements are not deleted.
@@ -670,7 +721,7 @@ EOF
content diff
post :upload, :id => cs_id
assert_response :bad_request, "Shouldn't be able to upload a diff with the action ping"
- assert_equal @response.body, "Unknown action ping, choices are create, modify, delete."
+ assert_equal @response.body, "Unknown action ping, choices are create, modify, delete"
end
##
@@ -1286,16 +1337,32 @@ EOF
assert_response :success, "can't get changesets in bbox"
assert_changesets [1]
+ # not found when looking for changesets of non-existing users
+ get :query, :user => User.maximum(:id) + 1
+ assert_response :not_found
+ get :query, :display_name => " "
+ assert_response :not_found
+
# can't get changesets of user 1 without authenticating
get :query, :user => users(:normal_user).id
- assert_response :not_found, "shouldn't be able to get changesets by non-public user"
+ assert_response :not_found, "shouldn't be able to get changesets by non-public user (ID)"
+ get :query, :display_name => users(:normal_user).display_name
+ assert_response :not_found, "shouldn't be able to get changesets by non-public user (name)"
# but this should work
basic_authorization "test@openstreetmap.org", "test"
get :query, :user => users(:normal_user).id
- assert_response :success, "can't get changesets by user"
+ assert_response :success, "can't get changesets by user ID"
+ assert_changesets [1,3,6]
+
+ get :query, :display_name => users(:normal_user).display_name
+ assert_response :success, "can't get changesets by user name"
assert_changesets [1,3,6]
+ # check that the correct error is given when we provide both UID and name
+ get :query, :user => users(:normal_user).id, :display_name => users(:normal_user).display_name
+ assert_response :bad_request, "should be a bad request to have both ID and name specified"
+
get :query, :user => users(:normal_user).id, :open => true
assert_response :success, "can't get changesets by user and open"
assert_changesets [1]
@@ -1315,6 +1382,10 @@ EOF
get :query, :open => 'true'
assert_response :success, "can't get changesets by open-ness"
assert_changesets [1,2,4]
+
+ get :query, :closed => 'true'
+ assert_response :success, "can't get changesets by closed-ness"
+ assert_changesets [3,5,6,7]
end
##
@@ -1490,11 +1561,11 @@ EOF
def test_list
changesets = Changeset.find(:all, :order => "created_at DESC", :conditions => ['min_lat IS NOT NULL'], :limit=> 20)
assert changesets.size <= 20
- get :list
+ get :list, {:format => "html"}
assert_response :success
assert_template "list"
# Now check that all 20 (or however many were returned) changesets are in the html
- assert_select "h1", :text => "Recent Changes", :count => 1
+ assert_select "h1", :text => "Changesets", :count => 1
assert_select "table[id='changeset_list'] tr", :count => changesets.size + 1
changesets.each do |changeset|
# FIXME this test needs rewriting - test for table contents
@@ -1505,16 +1576,16 @@ EOF
# Checks the display of the user changesets listing
def test_list_user
user = users(:public_user)
- get :list_user, {:display_name => user.display_name}
+ get :list, {:format => "html", :display_name => user.display_name}
assert_response :success
- assert_template 'list_user'
+ assert_template "changeset/_user"
## FIXME need to add more checks to see which if edits are actually shown if your data is public
end
##
# Check the not found of the list user changesets
def test_list_user_not_found
- get :list_user, {:display_name => "Some random user"}
+ get :list, {:format => "html", :display_name => "Some random user"}
assert_response :not_found
assert_template 'user/no_such_user'
end