From: Andy Allan Date: Wed, 29 Aug 2018 06:49:26 +0000 (+0800) Subject: Merge pull request #1938 from jguthrie100/fix_no_trace_description_error X-Git-Tag: live~2868 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/942e62117ff7f12d40618a94ea3f4e86f8cb25af?hp=06915a77b5af2ab0354e895c3c1ceb0e028f37fb Merge pull request #1938 from jguthrie100/fix_no_trace_description_error Fixes "new trace" validation error --- diff --git a/app/controllers/traces_controller.rb b/app/controllers/traces_controller.rb index 8994d8a2e..efc5a9d3d 100644 --- a/app/controllers/traces_controller.rb +++ b/app/controllers/traces_controller.rb @@ -117,7 +117,12 @@ class TracesController < ApplicationController do_create(params[:trace][:gpx_file], params[:trace][:tagstring], params[:trace][:description], params[:trace][:visibility]) rescue StandardError => ex - logger.debug ex + if @trace.valid? + flash[:error] = t("traces.create.upload_failed") + logger.debug ex + end + render :action => "new" + return end if @trace.id diff --git a/config/locales/en.yml b/config/locales/en.yml index a403d2959..5bc88547a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1700,6 +1700,7 @@ en: create: upload_trace: "Upload GPS Trace" trace_uploaded: "Your GPX file has been uploaded and is awaiting insertion in to the database. This will usually happen within half an hour, and an email will be sent to you on completion." + upload_failed: "Sorry, the GPX upload failed. An administrator has been alerted to the error. Please try again" traces_waiting: one: "You have %{count} trace waiting for upload. Please consider waiting for these to finish before uploading any more, so as not to block the queue for other users." other: "You have %{count} traces waiting for upload. Please consider waiting for these to finish before uploading any more, so as not to block the queue for other users." diff --git a/test/controllers/traces_controller_test.rb b/test/controllers/traces_controller_test.rb index 456bf9f8a..fbbbe4adc 100644 --- a/test/controllers/traces_controller_test.rb +++ b/test/controllers/traces_controller_test.rb @@ -571,6 +571,21 @@ class TracesControllerTest < ActionController::TestCase 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")