@@ -456,11 +456,14 class Issue < ActiveRecord::Base | |||||
456 | (relations_from + relations_to).sort |
|
456 | (relations_from + relations_to).sort | |
457 | end |
|
457 | end | |
458 |
|
458 | |||
459 | def all_dependent_issues |
|
459 | def all_dependent_issues(except=nil) | |
|
460 | except ||= self | |||
460 | dependencies = [] |
|
461 | dependencies = [] | |
461 | relations_from.each do |relation| |
|
462 | relations_from.each do |relation| | |
462 | dependencies << relation.issue_to |
|
463 | if relation.issue_to && relation.issue_to != except | |
463 |
dependencies |
|
464 | dependencies << relation.issue_to | |
|
465 | dependencies += relation.issue_to.all_dependent_issues(except) | |||
|
466 | end | |||
464 | end |
|
467 | end | |
465 | dependencies |
|
468 | dependencies | |
466 | end |
|
469 | end |
@@ -618,6 +618,25 class IssueTest < ActiveSupport::TestCase | |||||
618 | end |
|
618 | end | |
619 | end |
|
619 | end | |
620 |
|
620 | |||
|
621 | def test_all_dependent_issues | |||
|
622 | IssueRelation.delete_all | |||
|
623 | assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_PRECEDES) | |||
|
624 | assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_PRECEDES) | |||
|
625 | assert IssueRelation.create!(:issue_from => Issue.find(3), :issue_to => Issue.find(8), :relation_type => IssueRelation::TYPE_PRECEDES) | |||
|
626 | ||||
|
627 | assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort | |||
|
628 | end | |||
|
629 | ||||
|
630 | def test_all_dependent_issues_with_persistent_circular_dependency | |||
|
631 | IssueRelation.delete_all | |||
|
632 | assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_PRECEDES) | |||
|
633 | assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_PRECEDES) | |||
|
634 | # Validation skipping | |||
|
635 | assert IssueRelation.new(:issue_from => Issue.find(3), :issue_to => Issue.find(1), :relation_type => IssueRelation::TYPE_PRECEDES).save(false) | |||
|
636 | ||||
|
637 | assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort | |||
|
638 | end | |||
|
639 | ||||
621 | context "#done_ratio" do |
|
640 | context "#done_ratio" do | |
622 | setup do |
|
641 | setup do | |
623 | @issue = Issue.find(1) |
|
642 | @issue = Issue.find(1) |
General Comments 0
You need to be logged in to leave comments.
Login now