Merge pull request #1938 from jguthrie100/fix_no_trace_description_error
authorAndy Allan <github@gravitystorm.co.uk>
Wed, 29 Aug 2018 06:49:26 +0000 (14:49 +0800)
committerGitHub <noreply@github.com>
Wed, 29 Aug 2018 06:49:26 +0000 (14:49 +0800)
Fixes "new trace" validation error

app/controllers/traces_controller.rb
config/locales/en.yml
test/controllers/traces_controller_test.rb

index 8994d8a2e58df90e17535edf5ae63a6cf08b258e..efc5a9d3d1e036ea1087b0580f05410ab357b349 100644 (file)
@@ -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
index a403d29592d189ecc9f8823c09807c50839ce730..5bc88547a043b3c2df63b7a74129fe712447fda6 100644 (file)
@@ -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."
index 456bf9f8a505426cd26d69caee8b39c82fa058ac..fbbbe4adc341bd9d0fe9c932b153253bca080b4b 100644 (file)
@@ -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")