From 07480996d752805db307944749d5174ef657dac5 Mon Sep 17 00:00:00 2001 From: J Guthrie Date: Thu, 26 Jul 2018 16:27:28 +0100 Subject: [PATCH] Refactored and added new test --- app/controllers/traces_controller.rb | 8 ++++++-- test/controllers/traces_controller_test.rb | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/controllers/traces_controller.rb b/app/controllers/traces_controller.rb index 9dd82f8bb..efc5a9d3d 100644 --- a/app/controllers/traces_controller.rb +++ b/app/controllers/traces_controller.rb @@ -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 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") -- 2.43.2