Avoid errors when /edit is called on an invalid object
This commit is contained in:
parent
60e1ddb6be
commit
ac6a872a48
3 changed files with 117 additions and 22 deletions
|
@ -31,6 +31,7 @@ Lint/SuppressedException:
|
||||||
Exclude:
|
Exclude:
|
||||||
- 'app/controllers/api/amf_controller.rb'
|
- 'app/controllers/api/amf_controller.rb'
|
||||||
- 'app/controllers/users_controller.rb'
|
- 'app/controllers/users_controller.rb'
|
||||||
|
- 'app/controllers/site_controller.rb'
|
||||||
|
|
||||||
# Offense count: 701
|
# Offense count: 701
|
||||||
Metrics/AbcSize:
|
Metrics/AbcSize:
|
||||||
|
|
|
@ -77,26 +77,30 @@ class SiteController < ApplicationController
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
if params[:node]
|
begin
|
||||||
bbox = Node.find(params[:node]).bbox.to_unscaled
|
if params[:node]
|
||||||
@lat = bbox.centre_lat
|
bbox = Node.visible.find(params[:node]).bbox.to_unscaled
|
||||||
@lon = bbox.centre_lon
|
@lat = bbox.centre_lat
|
||||||
@zoom = 18
|
@lon = bbox.centre_lon
|
||||||
elsif params[:way]
|
@zoom = 18
|
||||||
bbox = Way.find(params[:way]).bbox.to_unscaled
|
elsif params[:way]
|
||||||
@lat = bbox.centre_lat
|
bbox = Way.visible.find(params[:way]).bbox.to_unscaled
|
||||||
@lon = bbox.centre_lon
|
@lat = bbox.centre_lat
|
||||||
@zoom = 17
|
@lon = bbox.centre_lon
|
||||||
elsif params[:note]
|
@zoom = 17
|
||||||
note = Note.find(params[:note])
|
elsif params[:note]
|
||||||
@lat = note.lat
|
note = Note.visible.find(params[:note])
|
||||||
@lon = note.lon
|
@lat = note.lat
|
||||||
@zoom = 17
|
@lon = note.lon
|
||||||
elsif params[:gpx] && current_user
|
@zoom = 17
|
||||||
trace = Trace.visible_to(current_user).find(params[:gpx])
|
elsif params[:gpx] && current_user
|
||||||
@lat = trace.latitude
|
trace = Trace.visible_to(current_user).find(params[:gpx])
|
||||||
@lon = trace.longitude
|
@lat = trace.latitude
|
||||||
@zoom = 16
|
@lon = trace.longitude
|
||||||
|
@zoom = 16
|
||||||
|
end
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
# don't try and derive a location from a missing/deleted object
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -259,11 +259,31 @@ class SiteControllerTest < ActionController::TestCase
|
||||||
assert_equal 18, assigns(:zoom)
|
assert_equal 18, assigns(:zoom)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Test editing inaccessible nodes
|
||||||
|
def test_edit_with_inaccessible_nodes
|
||||||
|
user = create(:user)
|
||||||
|
deleted_node = create(:node, :lat => 1.0, :lon => 1.0, :visible => false)
|
||||||
|
|
||||||
|
get :edit, :params => { :node => 99999 }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
|
||||||
|
get :edit, :params => { :node => deleted_node.id }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
end
|
||||||
|
|
||||||
# Test editing a specific way
|
# Test editing a specific way
|
||||||
def test_edit_with_way
|
def test_edit_with_way
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
node = create(:node, :lat => 3, :lon => 3)
|
node = create(:node, :lat => 3, :lon => 3)
|
||||||
way = create(:way)
|
way = create(:way)
|
||||||
create(:way_node, :node => node, :way => way)
|
create(:way_node, :node => node, :way => way)
|
||||||
|
|
||||||
get :edit, :params => { :way => way.id }, :session => { :user => user }
|
get :edit, :params => { :way => way.id }, :session => { :user => user }
|
||||||
|
@ -274,6 +294,26 @@ class SiteControllerTest < ActionController::TestCase
|
||||||
assert_equal 17, assigns(:zoom)
|
assert_equal 17, assigns(:zoom)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Test editing inaccessible ways
|
||||||
|
def test_edit_with_inaccessible_ways
|
||||||
|
user = create(:user)
|
||||||
|
deleted_way = create(:way, :visible => false)
|
||||||
|
|
||||||
|
get :edit, :params => { :way => 99999 }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
|
||||||
|
get :edit, :params => { :way => deleted_way.id }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
end
|
||||||
|
|
||||||
# Test editing a specific note
|
# Test editing a specific note
|
||||||
def test_edit_with_note
|
def test_edit_with_note
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
|
@ -289,10 +329,32 @@ class SiteControllerTest < ActionController::TestCase
|
||||||
assert_equal 17, assigns(:zoom)
|
assert_equal 17, assigns(:zoom)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Test editing inaccessible notes
|
||||||
|
def test_edit_with_inaccessible_notes
|
||||||
|
user = create(:user)
|
||||||
|
deleted_note = create(:note, :status => "hidden") do |n|
|
||||||
|
n.comments.create(:author_id => user.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
get :edit, :params => { :note => 99999 }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
|
||||||
|
get :edit, :params => { :note => deleted_note.id }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
end
|
||||||
|
|
||||||
# Test editing a specific GPX trace
|
# Test editing a specific GPX trace
|
||||||
def test_edit_with_gpx
|
def test_edit_with_gpx
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
gpx = create(:trace, :latitude => 1, :longitude => 1)
|
gpx = create(:trace, :latitude => 1, :longitude => 1)
|
||||||
|
|
||||||
get :edit, :params => { :gpx => gpx.id }, :session => { :user => user }
|
get :edit, :params => { :gpx => gpx.id }, :session => { :user => user }
|
||||||
assert_response :success
|
assert_response :success
|
||||||
|
@ -302,6 +364,34 @@ class SiteControllerTest < ActionController::TestCase
|
||||||
assert_equal 16, assigns(:zoom)
|
assert_equal 16, assigns(:zoom)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Test editing inaccessible GPX traces
|
||||||
|
def test_edit_with_inaccessible_gpxes
|
||||||
|
user = create(:user)
|
||||||
|
deleted_gpx = create(:trace, :deleted, :latitude => 1, :longitude => 1)
|
||||||
|
private_gpx = create(:trace, :latitude => 1, :longitude => 1, :visibility => "private")
|
||||||
|
|
||||||
|
get :edit, :params => { :gpx => 99999 }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
|
||||||
|
get :edit, :params => { :gpx => deleted_gpx.id }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
|
||||||
|
get :edit, :params => { :gpx => private_gpx.id }, :session => { :user => user }
|
||||||
|
assert_response :success
|
||||||
|
assert_template "edit"
|
||||||
|
assert_nil assigns(:lat)
|
||||||
|
assert_nil assigns(:lon)
|
||||||
|
assert_nil assigns(:zoom)
|
||||||
|
end
|
||||||
|
|
||||||
# Test the edit page redirects
|
# Test the edit page redirects
|
||||||
def test_edit_redirect
|
def test_edit_redirect
|
||||||
get :edit, :params => { :lat => 4, :lon => 5 }
|
get :edit, :params => { :lat => 4, :lon => 5 }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue