summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Balteanu <marius.balteanu@zitec.com>2021-08-10 19:35:53 +0000
committerMarius Balteanu <marius.balteanu@zitec.com>2021-08-10 19:35:53 +0000
commit3bae6bfac34229064e5b539e7aa0b82dd14d9a8d (patch)
treef3d35af548d74d9d39388bddb17b95de11f5faff
parent68eede7e75adc09b798fefc8a873cddd6d4abb37 (diff)
downloadredmine-3bae6bfac34229064e5b539e7aa0b82dd14d9a8d.tar.gz
redmine-3bae6bfac34229064e5b539e7aa0b82dd14d9a8d.zip
Fixed create duplicate follow relation fails with 500 internal error (#35655).
git-svn-id: http://svn.redmine.org/redmine/trunk@21150 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/issue_relations_controller.rb9
-rw-r--r--test/functional/issue_relations_controller_test.rb25
2 files changed, 31 insertions, 3 deletions
diff --git a/app/controllers/issue_relations_controller.rb b/app/controllers/issue_relations_controller.rb
index 52be512f1..8143f4f4a 100644
--- a/app/controllers/issue_relations_controller.rb
+++ b/app/controllers/issue_relations_controller.rb
@@ -56,10 +56,13 @@ class IssueRelationsController < ApplicationController
@relation.safe_attributes = params_relation
@relation.init_journals(User.current)
- unless saved = @relation.save
- saved = false
- unsaved_relations << @relation
+ begin
+ saved = @relation.save
+ rescue ActiveRecord::RecordNotUnique
+ @relation.errors.add :base, :taken
end
+
+ unsaved_relations << @relation unless saved
end
respond_to do |format|
diff --git a/test/functional/issue_relations_controller_test.rb b/test/functional/issue_relations_controller_test.rb
index b5ea6cb93..099254979 100644
--- a/test/functional/issue_relations_controller_test.rb
+++ b/test/functional/issue_relations_controller_test.rb
@@ -216,6 +216,31 @@ class IssueRelationsControllerTest < Redmine::ControllerTest
assert_include 'Related issue cannot be blank', response.body
end
+ def test_create_duplicated_follows_relations_should_not_raise_exception
+ IssueRelation.create(
+ :issue_from => Issue.find(1), :issue_to => Issue.find(2),
+ :relation_type => IssueRelation::TYPE_PRECEDES
+ )
+
+ assert_no_difference 'IssueRelation.count' do
+ post(
+ :create,
+ :params => {
+ :issue_id => 2,
+ :relation => {
+ :issue_to_id => 1,
+ :relation_type => 'follows',
+ :delay => ''
+ }
+ },
+ :xhr => true
+ )
+ end
+
+ assert_response :success
+ assert_include 'has already been taken', response.body
+ end
+
def test_bulk_create_with_multiple_issue_to_id_issues
assert_difference 'IssueRelation.count', +3 do
post :create, :params => {