X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/495bd7f1f077e5cae4428fab8a780f0f479893d0..0ff1214f86ac1347bb257abfda70581cc78903dd:/test/functional/changeset_controller_test.rb
diff --git a/test/functional/changeset_controller_test.rb b/test/functional/changeset_controller_test.rb
index 8ccdec889..47cd95c24 100644
--- a/test/functional/changeset_controller_test.rb
+++ b/test/functional/changeset_controller_test.rb
@@ -26,7 +26,19 @@ class ChangesetControllerTest < ActionController::TestCase
put :create
assert_response :success, "Creation of changeset did not return sucess status"
- newid = @response.body
+ newid = @response.body.to_i
+
+ # check end time, should be an hour ahead of creation time
+ cs = Changeset.find(newid)
+ duration = cs.closed_at - cs.created_at
+ # the difference can either be a rational, or a floating point number
+ # of seconds, depending on the code path taken :-(
+ if duration.class == Rational
+ assert_equal Rational(1,24), duration , "initial idle timeout should be an hour (#{cs.created_at} -> #{cs.closed_at})"
+ else
+ # must be number of seconds...
+ assert_equal 3600.0, duration , "initial idle timeout should be an hour (#{cs.created_at} -> #{cs.closed_at})"
+ end
end
def test_create_invalid
@@ -455,6 +467,67 @@ EOF
assert_select "osmChange>modify>node", 8
end
+ ##
+ # culled this from josm to ensure that nothing in the way that josm
+ # is formatting the request is causing it to fail.
+ #
+ # NOTE: the error turned out to be something else completely!
+ def test_josm_upload
+ basic_authorization(users(:normal_user).email, "test")
+
+ # create a temporary changeset
+ content "" +
+ "" +
+ ""
+ put :create
+ assert_response :success
+ changeset_id = @response.body.to_i
+
+ diff = <
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+OSM
+
+ # upload it
+ content diff
+ post :upload, :id => changeset_id
+ assert_response :success,
+ "can't upload a diff from JOSM: #{@response.body}"
+
+ get :download, :id => changeset_id
+ assert_response :success
+
+ assert_select "osmChange", 1
+ assert_select "osmChange>create>node", 9
+ assert_select "osmChange>create>way", 1
+ assert_select "osmChange>create>way>nd", 9
+ assert_select "osmChange>create>way>tag", 2
+ end
+
##
# when we make some complex changes we get the same changes back from the
# diff download.
@@ -618,15 +691,19 @@ EOF
get :query, :time => '2007-12-31'
assert_response :success, "can't get changesets by time-since"
- assert_changesets [2,4,5]
+ assert_changesets [1,2,4,5]
get :query, :time => '2008-01-01T12:34Z'
assert_response :success, "can't get changesets by time-since with hour"
- assert_changesets [2]
+ assert_changesets [1,2,4,5]
get :query, :time => '2007-12-31T23:59Z,2008-01-01T00:01Z'
assert_response :success, "can't get changesets by time-range"
- assert_changesets [4,5]
+ assert_changesets [1,4,5]
+
+ get :query, :open => 'true'
+ assert_response :success, "can't get changesets by open-ness"
+ assert_changesets [1,2,4]
end
##
@@ -700,6 +777,62 @@ EOF
assert_response :conflict
end
+ ##
+ # check that a changeset can contain a certain max number of changes.
+ def test_changeset_limits
+ basic_authorization "test@openstreetmap.org", "test"
+
+ # open a new changeset
+ content ""
+ put :create
+ assert_response :success, "can't create a new changeset"
+ cs_id = @response.body.to_i
+
+ # start the counter just short of where the changeset should finish.
+ offset = 10
+ # alter the database to set the counter on the changeset directly,
+ # otherwise it takes about 6 minutes to fill all of them.
+ changeset = Changeset.find(cs_id)
+ changeset.num_changes = Changeset::MAX_ELEMENTS - offset
+ changeset.save!
+
+ with_controller(NodeController.new) do
+ # create a new node
+ content ""
+ put :create
+ assert_response :success, "can't create a new node"
+ node_id = @response.body.to_i
+
+ get :read, :id => node_id
+ assert_response :success, "can't read back new node"
+ node_doc = XML::Parser.string(@response.body).parse
+ node_xml = node_doc.find("//osm/node").first
+
+ # loop until we fill the changeset with nodes
+ offset.times do |i|
+ node_xml['lat'] = rand.to_s
+ node_xml['lon'] = rand.to_s
+ node_xml['version'] = (i+1).to_s
+
+ content node_doc
+ put :update, :id => node_id
+ assert_response :success, "attempt #{i} should have succeeded"
+ end
+
+ # trying again should fail
+ node_xml['lat'] = rand.to_s
+ node_xml['lon'] = rand.to_s
+ node_xml['version'] = offset.to_s
+
+ content node_doc
+ put :update, :id => node_id
+ assert_response :conflict, "final attempt should have failed"
+ end
+
+ changeset = Changeset.find(cs_id)
+ assert_equal Changeset::MAX_ELEMENTS + 1, changeset.num_changes
+ end
+
#------------------------------------------------------------
# utility functions
#------------------------------------------------------------