fix more of the tests, particularly changeset controller. Needed more fixtures to fix them. The last failing changeset controller test needs some more work on the fixtures.

This commit is contained in:
Shaun McDonald 2009-04-29 22:25:49 +00:00
parent dcca3ab0e9
commit db17af19bb
4 changed files with 83 additions and 50 deletions

View file

@ -32,3 +32,10 @@ public_used_relation:
timestamp: 2009-04-22 00:30:33 timestamp: 2009-04-22 00:30:33
visible: true visible: true
version: 1 version: 1
public_visible_relation:
id: 6
changeset_id: 2
timestamp: 2009-04-22 00:34:12
visible: true
version: 1

View file

@ -32,3 +32,10 @@ public_used_relation:
timestamp: 2009-04-22 00:30:03 timestamp: 2009-04-22 00:30:03
visible: true visible: true
version: 1 version: 1
public_visible_relation:
id: 6
changeset_id: 2
timestamp: 2009-04-22 00:34:12
visible: true
version: 1

View file

@ -98,9 +98,21 @@ class ChangesetControllerTest < ActionController::TestCase
## ##
# test that the user who opened a change can close it # test that the user who opened a change can close it
def test_close def test_close
basic_authorization "test@openstreetmap.org", "test" ## Try without authentication
put :close, :id => changesets(:public_user_first_change).id
assert_response :unauthorized
cs_id = changesets(:normal_user_first_change).id
## Try using the non-public user
basic_authorization users(:normal_user).email, "test"
put :close, :id => changesets(:normal_user_first_change).id
assert_require_public_data
## The try with the public user
basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
put :close, :id => cs_id put :close, :id => cs_id
assert_response :success assert_response :success
@ -113,7 +125,7 @@ class ChangesetControllerTest < ActionController::TestCase
## ##
# test that a different user can't close another user's changeset # test that a different user can't close another user's changeset
def test_close_invalid def test_close_invalid
basic_authorization user(:public_user).email, "test" basic_authorization users(:public_user).email, "test"
put :close, :id => changesets(:normal_user_first_change).id put :close, :id => changesets(:normal_user_first_change).id
assert_response :conflict assert_response :conflict
@ -227,22 +239,23 @@ EOF
## ##
# upload something which creates new objects using placeholders # upload something which creates new objects using placeholders
def test_upload_create_valid def test_upload_create_valid
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
# simple diff to create a node way and relation using placeholders # simple diff to create a node way and relation using placeholders
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<create> <create>
<node id='-1' lon='0' lat='0' changeset='1'> <node id='-1' lon='0' lat='0' changeset='#{cs_id}'>
<tag k='foo' v='bar'/> <tag k='foo' v='bar'/>
<tag k='baz' v='bat'/> <tag k='baz' v='bat'/>
</node> </node>
<way id='-1' changeset='1'> <way id='-1' changeset='#{cs_id}'>
<nd ref='3'/> <nd ref='3'/>
</way> </way>
</create> </create>
<create> <create>
<relation id='-1' changeset='1'> <relation id='-1' changeset='#{cs_id}'>
<member type='way' role='some' ref='3'/> <member type='way' role='some' ref='3'/>
<member type='node' role='some' ref='5'/> <member type='node' role='some' ref='5'/>
<member type='relation' role='some' ref='3'/> <member type='relation' role='some' ref='3'/>
@ -253,7 +266,7 @@ EOF
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :success, assert_response :success,
"can't upload a simple valid creation to changeset: #{@response.body}" "can't upload a simple valid creation to changeset: #{@response.body}"
@ -289,20 +302,20 @@ EOF
# test a complex delete where we delete elements which rely on eachother # test a complex delete where we delete elements which rely on eachother
# in the same transaction. # in the same transaction.
def test_upload_delete def test_upload_delete
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).display_name, "test"
diff = XML::Document.new diff = XML::Document.new
diff.root = XML::Node.new "osmChange" diff.root = XML::Node.new "osmChange"
delete = XML::Node.new "delete" delete = XML::Node.new "delete"
diff.root << delete diff.root << delete
delete << current_relations(:visible_relation).to_xml_node delete << current_relations(:public_used_relation).to_xml_node
delete << current_relations(:used_relation).to_xml_node delete << current_relations(:public_visible_relation).to_xml_node
delete << current_ways(:used_way).to_xml_node delete << current_ways(:used_way).to_xml_node
delete << current_nodes(:node_used_by_relationship).to_xml_node delete << current_nodes(:node_used_by_relationship).to_xml_node
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => changesets(:public_user_first_change).id
assert_response :success, assert_response :success,
"can't upload a deletion diff to changeset: #{@response.body}" "can't upload a deletion diff to changeset: #{@response.body}"
@ -322,10 +335,10 @@ EOF
# test uploading a delete with no lat/lon, as they are optional in # test uploading a delete with no lat/lon, as they are optional in
# the osmChange spec. # the osmChange spec.
def test_upload_nolatlon_delete def test_upload_nolatlon_delete
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).display_name, "test"
node = current_nodes(:visible_node) node = current_nodes(:public_visible_node)
cs = changesets(:normal_user_first_change) cs = changesets(:public_user_first_change)
diff = "<osmChange><delete><node id='#{node.id}' version='#{node.version}' changeset='#{cs.id}'/></delete></osmChange>" diff = "<osmChange><delete><node id='#{node.id}' version='#{node.version}' changeset='#{cs.id}'/></delete></osmChange>"
# upload it # upload it
@ -343,7 +356,7 @@ EOF
def test_repeated_changeset_create def test_repeated_changeset_create
30.times do 30.times do
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
# create a temporary changeset # create a temporary changeset
content "<osm><changeset>" + content "<osm><changeset>" +
@ -361,19 +374,19 @@ EOF
# test that deleting stuff in a transaction doesn't bypass the checks # test that deleting stuff in a transaction doesn't bypass the checks
# to ensure that used elements are not deleted. # to ensure that used elements are not deleted.
def test_upload_delete_invalid def test_upload_delete_invalid
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
diff = XML::Document.new diff = XML::Document.new
diff.root = XML::Node.new "osmChange" diff.root = XML::Node.new "osmChange"
delete = XML::Node.new "delete" delete = XML::Node.new "delete"
diff.root << delete diff.root << delete
delete << current_relations(:visible_relation).to_xml_node delete << current_relations(:public_visible_relation).to_xml_node
delete << current_ways(:used_way).to_xml_node delete << current_ways(:used_way).to_xml_node
delete << current_nodes(:node_used_by_relationship).to_xml_node delete << current_nodes(:node_used_by_relationship).to_xml_node
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => 2
assert_response :precondition_failed, assert_response :precondition_failed,
"shouldn't be able to upload a invalid deletion diff: #{@response.body}" "shouldn't be able to upload a invalid deletion diff: #{@response.body}"
@ -387,23 +400,24 @@ EOF
# upload something which creates new objects and inserts them into # upload something which creates new objects and inserts them into
# existing containers using placeholders. # existing containers using placeholders.
def test_upload_complex def test_upload_complex
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
# simple diff to create a node way and relation using placeholders # simple diff to create a node way and relation using placeholders
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<create> <create>
<node id='-1' lon='0' lat='0' changeset='1'> <node id='-1' lon='0' lat='0' changeset='#{cs_id}'>
<tag k='foo' v='bar'/> <tag k='foo' v='bar'/>
<tag k='baz' v='bat'/> <tag k='baz' v='bat'/>
</node> </node>
</create> </create>
<modify> <modify>
<way id='1' changeset='1' version='1'> <way id='1' changeset='#{cs_id}' version='1'>
<nd ref='-1'/> <nd ref='-1'/>
<nd ref='3'/> <nd ref='3'/>
</way> </way>
<relation id='1' changeset='1' version='1'> <relation id='1' changeset='#{cs_id}' version='1'>
<member type='way' role='some' ref='3'/> <member type='way' role='some' ref='3'/>
<member type='node' role='some' ref='-1'/> <member type='node' role='some' ref='-1'/>
<member type='relation' role='some' ref='3'/> <member type='relation' role='some' ref='3'/>
@ -414,7 +428,7 @@ EOF
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :success, assert_response :success,
"can't upload a complex diff to changeset: #{@response.body}" "can't upload a complex diff to changeset: #{@response.body}"
@ -442,19 +456,20 @@ EOF
# create a diff which references several changesets, which should cause # create a diff which references several changesets, which should cause
# a rollback and none of the diff gets committed # a rollback and none of the diff gets committed
def test_upload_invalid_changesets def test_upload_invalid_changesets
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
# simple diff to create a node way and relation using placeholders # simple diff to create a node way and relation using placeholders
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<modify> <modify>
<node id='1' lon='0' lat='0' changeset='1' version='1'/> <node id='1' lon='0' lat='0' changeset='#{cs_id}' version='1'/>
<way id='1' changeset='1' version='1'> <way id='1' changeset='#{cs_id}' version='1'>
<nd ref='3'/> <nd ref='3'/>
</way> </way>
</modify> </modify>
<modify> <modify>
<relation id='1' changeset='1' version='1'> <relation id='1' changeset='#{cs_id}' version='1'>
<member type='way' role='some' ref='3'/> <member type='way' role='some' ref='3'/>
<member type='node' role='some' ref='5'/> <member type='node' role='some' ref='5'/>
<member type='relation' role='some' ref='3'/> <member type='relation' role='some' ref='3'/>
@ -475,7 +490,7 @@ EOF
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :conflict, assert_response :conflict,
"uploading a diff with multiple changsets should have failed" "uploading a diff with multiple changsets should have failed"
@ -487,7 +502,8 @@ EOF
## ##
# upload multiple versions of the same element in the same diff. # upload multiple versions of the same element in the same diff.
def test_upload_multiple_valid def test_upload_multiple_valid
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
# change the location of a node multiple times, each time referencing # change the location of a node multiple times, each time referencing
# the last version. doesn't this depend on version numbers being # the last version. doesn't this depend on version numbers being
@ -495,21 +511,21 @@ EOF
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<modify> <modify>
<node id='1' lon='0' lat='0' changeset='1' version='1'/> <node id='1' lon='0' lat='0' changeset='#{cs_id}' version='1'/>
<node id='1' lon='1' lat='0' changeset='1' version='2'/> <node id='1' lon='1' lat='0' changeset='#{cs_id}' version='2'/>
<node id='1' lon='1' lat='1' changeset='1' version='3'/> <node id='1' lon='1' lat='1' changeset='#{cs_id}' version='3'/>
<node id='1' lon='1' lat='2' changeset='1' version='4'/> <node id='1' lon='1' lat='2' changeset='#{cs_id}' version='4'/>
<node id='1' lon='2' lat='2' changeset='1' version='5'/> <node id='1' lon='2' lat='2' changeset='#{cs_id}' version='5'/>
<node id='1' lon='3' lat='2' changeset='1' version='6'/> <node id='1' lon='3' lat='2' changeset='#{cs_id}' version='6'/>
<node id='1' lon='3' lat='3' changeset='1' version='7'/> <node id='1' lon='3' lat='3' changeset='#{cs_id}' version='7'/>
<node id='1' lon='9' lat='9' changeset='1' version='8'/> <node id='1' lon='9' lat='9' changeset='#{cs_id}' version='8'/>
</modify> </modify>
</osmChange> </osmChange>
EOF EOF
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :success, assert_response :success,
"can't upload multiple versions of an element in a diff: #{@response.body}" "can't upload multiple versions of an element in a diff: #{@response.body}"
@ -523,20 +539,21 @@ EOF
# upload multiple versions of the same element in the same diff, but # upload multiple versions of the same element in the same diff, but
# keep the version numbers the same. # keep the version numbers the same.
def test_upload_multiple_duplicate def test_upload_multiple_duplicate
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<modify> <modify>
<node id='1' lon='0' lat='0' changeset='1' version='1'/> <node id='1' lon='0' lat='0' changeset='#{cs_id}' version='1'/>
<node id='1' lon='1' lat='1' changeset='1' version='1'/> <node id='1' lon='1' lat='1' changeset='#{cs_id}' version='1'/>
</modify> </modify>
</osmChange> </osmChange>
EOF EOF
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :conflict, assert_response :conflict,
"shouldn't be able to upload the same element twice in a diff: #{@response.body}" "shouldn't be able to upload the same element twice in a diff: #{@response.body}"
end end
@ -544,19 +561,20 @@ EOF
## ##
# try to upload some elements without specifying the version # try to upload some elements without specifying the version
def test_upload_missing_version def test_upload_missing_version
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<modify> <modify>
<node id='1' lon='1' lat='1' changeset='1'/> <node id='1' lon='1' lat='1' changeset='cs_id'/>
</modify> </modify>
</osmChange> </osmChange>
EOF EOF
# upload it # upload it
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :bad_request, assert_response :bad_request,
"shouldn't be able to upload an element without version: #{@response.body}" "shouldn't be able to upload an element without version: #{@response.body}"
end end
@ -564,17 +582,18 @@ EOF
## ##
# try to upload with commands other than create, modify, or delete # try to upload with commands other than create, modify, or delete
def test_action_upload_invalid def test_action_upload_invalid
basic_authorization "test@openstreetmap.org", "test" basic_authorization users(:public_user).email, "test"
cs_id = changesets(:public_user_first_change).id
diff = <<EOF diff = <<EOF
<osmChange> <osmChange>
<ping> <ping>
<node id='1' lon='1' lat='1' changeset='1' /> <node id='1' lon='1' lat='1' changeset='#{cs_id}' />
</ping> </ping>
</osmChange> </osmChange>
EOF EOF
content diff content diff
post :upload, :id => 1 post :upload, :id => cs_id
assert_response :bad_request, "Shouldn't be able to upload a diff with the action ping" 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 end

View file

@ -4,7 +4,7 @@ class RelationTest < Test::Unit::TestCase
api_fixtures api_fixtures
def test_relation_count def test_relation_count
assert_equal 5, Relation.count assert_equal 6, Relation.count
end end
end end