Refactored and added new test
authorJ Guthrie <jamie.guthrie@gmail.com>
Thu, 26 Jul 2018 15:27:28 +0000 (16:27 +0100)
committerJ Guthrie <jamie.guthrie@gmail.com>
Thu, 26 Jul 2018 15:27:28 +0000 (16:27 +0100)
app/controllers/traces_controller.rb
test/controllers/traces_controller_test.rb

index 9dd82f8bbca4ac13462addb7c09f00ca901bceec..efc5a9d3d1e036ea1087b0580f05410ab357b349 100644 (file)
@@ -117,8 +117,12 @@ class TracesController < ApplicationController
         do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
                   params[:trace][:description], params[:trace][:visibility])
       rescue StandardError => ex
-        render :action => "new" and return unless @trace.valid?
-        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 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")