assert_routing(
{ :path => "/user/username/traces/1", :method => :get },
- { :controller => "traces", :action => "view", :display_name => "username", :id => "1" }
+ { :controller => "traces", :action => "show", :display_name => "username", :id => "1" }
)
assert_routing(
{ :path => "/user/username/traces/1/picture", :method => :get },
)
assert_routing(
- { :path => "/trace/create", :method => :get },
- { :controller => "traces", :action => "create" }
+ { :path => "/traces/new", :method => :get },
+ { :controller => "traces", :action => "new" }
)
assert_routing(
- { :path => "/trace/create", :method => :post },
+ { :path => "/traces", :method => :post },
{ :controller => "traces", :action => "create" }
)
assert_routing(
{ :controller => "traces", :action => "data", :id => "1", :format => "xml" }
)
assert_routing(
- { :path => "/trace/1/edit", :method => :get },
+ { :path => "/traces/1/edit", :method => :get },
{ :controller => "traces", :action => "edit", :id => "1" }
)
assert_routing(
- { :path => "/trace/1/edit", :method => :post },
- { :controller => "traces", :action => "edit", :id => "1" }
+ { :path => "/traces/1", :method => :put },
+ { :controller => "traces", :action => "update", :id => "1" }
)
assert_routing(
{ :path => "/trace/1/delete", :method => :post },
check_trace_feed user.traces.tagged("Birmingham").visible_to_all
end
- # Test viewing a trace
- def test_view
+ # Test showing a trace
+ def test_show
public_trace_file = create(:trace, :visibility => "public")
# First with no auth, which should work since the trace is public
- get :view, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }
- check_trace_view public_trace_file
+ get :show, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }
+ check_trace_show public_trace_file
# Now with some other user, which should work since the trace is public
- get :view, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => create(:user) }
- check_trace_view public_trace_file
+ get :show, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => create(:user) }
+ check_trace_show public_trace_file
# And finally we should be able to do it with the owner of the trace
- get :view, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => public_trace_file.user }
- check_trace_view public_trace_file
+ get :show, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => public_trace_file.user }
+ check_trace_show public_trace_file
end
# Check an anonymous trace can't be viewed by another user
- def test_view_anon
+ def test_show_anon
anon_trace_file = create(:trace, :visibility => "private")
# First with no auth
- get :view, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }
+ get :show, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }
assert_response :redirect
assert_redirected_to :action => :list
# Now with some other user, which should not work since the trace is anon
- get :view, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }, :session => { :user => create(:user) }
+ get :show, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }, :session => { :user => create(:user) }
assert_response :redirect
assert_redirected_to :action => :list
# And finally we should be able to do it with the owner of the trace
- get :view, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }, :session => { :user => anon_trace_file.user }
- check_trace_view anon_trace_file
+ get :show, :params => { :display_name => anon_trace_file.user.display_name, :id => anon_trace_file.id }, :session => { :user => anon_trace_file.user }
+ check_trace_show anon_trace_file
end
- # Test viewing a trace that doesn't exist
- def test_view_not_found
+ # Test showing a trace that doesn't exist
+ def test_show_not_found
deleted_trace_file = create(:trace, :deleted)
# First with a trace that has never existed
- get :view, :params => { :display_name => create(:user).display_name, :id => 0 }
+ get :show, :params => { :display_name => create(:user).display_name, :id => 0 }
assert_response :redirect
assert_redirected_to :action => :list
# Now with a trace that has been deleted
- get :view, :params => { :display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file.id }, :session => { :user => deleted_trace_file.user }
+ get :show, :params => { :display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file.id }, :session => { :user => deleted_trace_file.user }
assert_response :redirect
assert_redirected_to :action => :list
end
assert_response :not_found
end
- # Test fetching the create page
- def test_create_get
+ # Test fetching the new trace page
+ def test_new_get
# First with no auth
- get :create
+ get :new
assert_response :redirect
- assert_redirected_to :controller => :user, :action => :login, :referer => trace_create_path
+ assert_redirected_to :controller => :user, :action => :login, :referer => new_trace_path
# Now authenticated as a user with gps.trace.visibility set
user = create(:user)
create(:user_preference, :user => user, :k => "gps.trace.visibility", :v => "identifiable")
- get :create, :session => { :user => user }
+ get :new, :session => { :user => user }
assert_response :success
- assert_template :create
+ assert_template :new
assert_select "select#trace_visibility option[value=identifiable][selected]", 1
# Now authenticated as a user with gps.trace.public set
second_user = create(:user)
create(:user_preference, :user => second_user, :k => "gps.trace.public", :v => "default")
- get :create, :session => { :user => second_user }
+ get :new, :session => { :user => second_user }
assert_response :success
- assert_template :create
+ assert_template :new
assert_select "select#trace_visibility option[value=public][selected]", 1
# Now authenticated as a user with no preferences
third_user = create(:user)
- get :create, :session => { :user => third_user }
+ get :new, :session => { :user => third_user }
assert_response :success
- assert_template :create
+ assert_template :new
assert_select "select#trace_visibility option[value=private][selected]", 1
end
assert_equal "trackable", user.preferences.where(:k => "gps.trace.visibility").first.v
end
+ # Test creating a trace with validation errors
+ def test_create_post_with_validation_errors
+ # Get file to use
+ fixture = Rails.root.join("test", "gpx", "fixtures", "a.gpx")
+ file = Rack::Test::UploadedFile.new(fixture, "application/gpx+xml")
+ user = create(:user)
+
+ # Now authenticated
+ create(:user_preference, :user => user, :k => "gps.trace.visibility", :v => "identifiable")
+ assert_not_equal "trackable", user.preferences.where(:k => "gps.trace.visibility").first.v
+ post :create, :params => { :trace => { :gpx_file => file, :description => "", :tagstring => "new,trace", :visibility => "trackable" } }, :session => { :user => user }
+ assert_template :new
+ assert_match "Description is too short (minimum is 1 character)", response.body
+ end
+
# Test fetching the edit page for a trace using GET
def test_edit_get
public_trace_file = create(:trace, :visibility => "public")
# First with no auth
get :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }
assert_response :redirect
- assert_redirected_to :controller => :user, :action => :login, :referer => trace_edit_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file.id)
+ assert_redirected_to :controller => :user, :action => :login, :referer => edit_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file.id)
# Now with some other user, which should fail
get :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => create(:user) }
assert_response :success
end
- # Test fetching the edit page for a trace using POST
- def test_edit_post_no_details
- public_trace_file = create(:trace, :visibility => "public")
- deleted_trace_file = create(:trace, :deleted)
-
- # First with no auth
- post :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }
- assert_response :forbidden
-
- # Now with some other user, which should fail
- post :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => create(:user) }
- assert_response :forbidden
-
- # Now with a trace which doesn't exist
- post :edit, :params => { :display_name => create(:user).display_name, :id => 0 }, :session => { :user => create(:user) }
- assert_response :not_found
-
- # Now with a trace which has been deleted
- post :edit, :params => { :display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file.id }, :session => { :user => deleted_trace_file.user }
- assert_response :not_found
-
- # Finally with a trace that we are allowed to edit
- post :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => public_trace_file.user }
- assert_response :success
- end
-
# Test saving edits to a trace
- def test_edit_post_with_details
+ def test_update
public_trace_file = create(:trace, :visibility => "public")
deleted_trace_file = create(:trace, :deleted)
new_details = { :description => "Changed description", :tagstring => "new_tag", :visibility => "private" }
# First with no auth
- post :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id, :trace => new_details }
+ put :update, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id, :trace => new_details }
assert_response :forbidden
# Now with some other user, which should fail
- post :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id, :trace => new_details }, :session => { :user => create(:user) }
+ put :update, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id, :trace => new_details }, :session => { :user => create(:user) }
assert_response :forbidden
# Now with a trace which doesn't exist
- post :edit, :params => { :display_name => create(:user).display_name, :id => 0 }, :session => { :user => create(:user), :trace => new_details }
+ put :update, :params => { :display_name => create(:user).display_name, :id => 0 }, :session => { :user => create(:user), :trace => new_details }
assert_response :not_found
# Now with a trace which has been deleted
- post :edit, :params => { :display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file.id, :trace => new_details }, :session => { :user => deleted_trace_file.user }
+ put :update, :params => { :display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file.id, :trace => new_details }, :session => { :user => deleted_trace_file.user }
assert_response :not_found
# Finally with a trace that we are allowed to edit
- post :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id, :trace => new_details }, :session => { :user => public_trace_file.user }
+ put :update, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id, :trace => new_details }, :session => { :user => public_trace_file.user }
assert_response :redirect
- assert_redirected_to :action => :view, :display_name => public_trace_file.user.display_name
+ assert_redirected_to :action => :show, :display_name => public_trace_file.user.display_name
trace = Trace.find(public_trace_file.id)
assert_equal new_details[:description], trace.description
assert_equal new_details[:tagstring], trace.tagstring
end
end
- def check_trace_view(trace)
+ def check_trace_show(trace)
assert_response :success
- assert_template "view"
+ assert_template "show"
assert_select "table", :count => 1 do
assert_select "td", /^#{Regexp.quote(trace.name)} /