diff --git a/app/models/issue_relation.rb b/app/models/issue_relation.rb index d0a66ba40..e0075cb0a 100644 --- a/app/models/issue_relation.rb +++ b/app/models/issue_relation.rb @@ -239,6 +239,10 @@ class IssueRelation < ActiveRecord::Base issue_from.blocks? issue_to when 'blocks' issue_to.blocks? issue_from + when 'duplicated' + self.class.where(issue_from_id: issue_from, issue_to_id: issue_to, relation_type: TYPE_DUPLICATES).exists? + when 'duplicates' + self.class.where(issue_from_id: issue_to, issue_to_id: issue_from, relation_type: TYPE_DUPLICATES).exists? when 'relates' self.class.where(issue_from_id: issue_to, issue_to_id: issue_from).present? else diff --git a/test/unit/issue_relation_test.rb b/test/unit/issue_relation_test.rb index 35a81ffb2..7188febab 100644 --- a/test/unit/issue_relation_test.rb +++ b/test/unit/issue_relation_test.rb @@ -189,6 +189,24 @@ class IssueRelationTest < ActiveSupport::TestCase assert_not_equal [], r.errors[:base] end + def test_validates_circular_dependency_on_reverse_relations_using_duplicates + with_locale 'en' do + IssueRelation.delete_all + issue1 = issues(:issues_001) + issue2 = issues(:issues_002) + assert IssueRelation.create!( + :issue_from => issue1, :issue_to => issue2, + :relation_type => IssueRelation::TYPE_DUPLICATES + ) + r = IssueRelation.new( + :issue_from => issue2, :issue_to => issue1, + :relation_type => IssueRelation::TYPE_DUPLICATES + ) + assert !r.save + assert_include 'This relation would create a circular dependency', r.errors.full_messages + end + end + def test_create_with_initialized_journals_should_create_journals from = Issue.find(1) to = Issue.find(2)