Don't preload the nodes as it seems to break the ordering

Fixes #795
This commit is contained in:
Tom Hughes 2014-07-29 10:14:08 +01:00
parent 965fb0b3ae
commit 042ecee695
2 changed files with 71 additions and 12 deletions

View file

@ -321,12 +321,12 @@ class AmfController < ApplicationController
# Ideally we would do ":include => :nodes" here but if we do that
# then rails only seems to return the first copy of a node when a
# way includes a node more than once
way = Way.where(:id => wayid).preload(:nodes => :node_tags).first
way = Way.where(:id => wayid).first
# check case where way has been deleted or doesn't exist
return [-4, 'way', wayid] if way.nil? or !way.visible
points = way.nodes.collect do |node|
points = way.nodes.preload(:node_tags).collect do |node|
nodetags=node.tags
nodetags.delete('created_by')
[node.lon, node.lat, node.id, nodetags, node.version]

View file

@ -26,8 +26,13 @@ class AmfControllerTest < ActionController::TestCase
assert_response :success
amf_parse_response
way = amf_result("/1")
assert_equal way[0], 0
assert_equal way[2], id
assert_equal 0, way[0]
assert_equal "", way[1]
assert_equal id, way[2]
assert_equal 1, way[3].length
assert_equal 3, way[3][0][2]
assert_equal 1, way[5]
assert_equal 2, way[6]
end
def test_getway_invisible
@ -38,10 +43,64 @@ class AmfControllerTest < ActionController::TestCase
assert_response :success
amf_parse_response
way = amf_result("/1")
assert_equal way[0], -4
assert_equal way[1], "way"
assert_equal way[2], id
assert way[3].nil? and way[4].nil?
assert_equal -4, way[0], -4
assert_equal "way", way[1]
assert_equal id, way[2]
assert way[3].nil? and way[4].nil? and way[5].nil? and way[6].nil?
end
def test_getway_with_versions
# check a way with multiple versions
id = current_ways(:way_with_versions).id
amf_content "getway", "/1", [id]
post :amf_read
assert_response :success
amf_parse_response
way = amf_result("/1")
assert_equal 0, way[0]
assert_equal "", way[1]
assert_equal id, way[2]
assert_equal 1, way[3].length
assert_equal 15, way[3][0][2]
assert_equal 4, way[5]
assert_equal 2, way[6]
end
def test_getway_with_duplicate_nodes
# check a way with duplicate nodes
id = current_ways(:way_with_duplicate_nodes).id
amf_content "getway", "/1", [id]
post :amf_read
assert_response :success
amf_parse_response
way = amf_result("/1")
assert_equal 0, way[0]
assert_equal "", way[1]
assert_equal id, way[2]
assert_equal 2, way[3].length
assert_equal 4, way[3][0][2]
assert_equal 4, way[3][1][2]
assert_equal 1, way[5]
assert_equal 2, way[6]
end
def test_getway_with_multiple_nodes
# check a way with multiple nodes
id = current_ways(:way_with_multiple_nodes).id
amf_content "getway", "/1", [id]
post :amf_read
assert_response :success
amf_parse_response
way = amf_result("/1")
assert_equal 0, way[0]
assert_equal "", way[1]
assert_equal id, way[2]
assert_equal 3, way[3].length
assert_equal 4, way[3][0][2]
assert_equal 15, way[3][1][2]
assert_equal 6, way[3][2][2]
assert_equal 2, way[5]
assert_equal 2, way[6]
end
def test_getway_nonexistent
@ -51,10 +110,10 @@ class AmfControllerTest < ActionController::TestCase
assert_response :success
amf_parse_response
way = amf_result("/1")
assert_equal way[0], -4
assert_equal way[1], "way"
assert_equal way[2], 0
assert way[3].nil? and way[4].nil?
assert_equal -4, way[0]
assert_equal "way", way[1]
assert_equal 0, way[2]
assert way[3].nil? and way[4].nil? and way[5].nil? and way[6].nil?
end
def test_whichways