From 55a3ac764f191c097e80345d413bde3da92ce615 2010-02-12 18:35:31 From: Jean-Philippe Lang Date: 2010-02-12 18:35:31 Subject: [PATCH] Issue relation: fixes error with postgres when entering a non-numeric id (#4820) + accept hash (#) before id. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3413 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/controllers/issue_relations_controller.rb b/app/controllers/issue_relations_controller.rb index 8a41c38..9ce3585 100644 --- a/app/controllers/issue_relations_controller.rb +++ b/app/controllers/issue_relations_controller.rb @@ -21,8 +21,8 @@ class IssueRelationsController < ApplicationController def new @relation = IssueRelation.new(params[:relation]) @relation.issue_from = @issue - if params[:relation] && !params[:relation][:issue_to_id].blank? - @relation.issue_to = Issue.visible.find_by_id(params[:relation][:issue_to_id]) + if params[:relation] && m = params[:relation][:issue_to_id].to_s.match(/^#?(\d+)$/) + @relation.issue_to = Issue.visible.find_by_id(m[1].to_i) end @relation.save if request.post? respond_to do |format| diff --git a/test/functional/issue_relations_controller_test.rb b/test/functional/issue_relations_controller_test.rb index cd7af4e..e8834f1 100644 --- a/test/functional/issue_relations_controller_test.rb +++ b/test/functional/issue_relations_controller_test.rb @@ -40,6 +40,24 @@ class IssueRelationsControllerTest < ActionController::TestCase end end + def test_new_should_accept_id_with_hash + assert_difference 'IssueRelation.count' do + @request.session[:user_id] = 3 + post :new, :issue_id => 1, + :relation => {:issue_to_id => '#2', :relation_type => 'relates', :delay => ''} + end + end + + def test_new_should_not_break_with_non_numerical_id + assert_no_difference 'IssueRelation.count' do + assert_nothing_raised do + @request.session[:user_id] = 3 + post :new, :issue_id => 1, + :relation => {:issue_to_id => 'foo', :relation_type => 'relates', :delay => ''} + end + end + end + def test_should_create_relations_with_visible_issues_only Setting.cross_project_issue_relations = '1' assert_nil Issue.visible(User.find(3)).find_by_id(4)