diff --git a/app/models/issue.rb b/app/models/issue.rb index 2e7732089..ce1fa75d5 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -859,10 +859,14 @@ class Issue < ActiveRecord::Base dependencies = [] dependencies += relations_from.map(&:issue_to) dependencies += children unless leaf? - dependencies << parent dependencies.compact! dependencies -= except - dependencies + dependencies.map {|issue| issue.all_dependent_issues(except)}.flatten + dependencies += dependencies.map {|issue| issue.all_dependent_issues(except)}.flatten + if parent + dependencies << parent + dependencies += parent.all_dependent_issues(except + parent.descendants) + end + dependencies end # Returns an array of issues that duplicate this one diff --git a/test/unit/issue_relation_test.rb b/test/unit/issue_relation_test.rb index f15a74c34..f0e74faf7 100644 --- a/test/unit/issue_relation_test.rb +++ b/test/unit/issue_relation_test.rb @@ -137,6 +137,19 @@ class IssueRelationTest < ActiveSupport::TestCase assert_include 'This relation would create a circular dependency', r.errors.full_messages end + def test_subtasks_should_allow_precedes_relation + parent = Issue.generate! + child1 = Issue.generate!(:parent_issue_id => parent.id) + child2 = Issue.generate!(:parent_issue_id => parent.id) + + r = IssueRelation.new( + :issue_from => child1, :issue_to => child2, + :relation_type => IssueRelation::TYPE_PRECEDES + ) + assert r.valid? + assert r.save + end + def test_validates_circular_dependency_on_reverse_relations IssueRelation.delete_all assert IssueRelation.create!(