@@ -576,6 +576,8 class Issue < ActiveRecord::Base | |||
|
576 | 576 | elsif @parent_issue |
|
577 | 577 | if !valid_parent_project?(@parent_issue) |
|
578 | 578 | errors.add :parent_issue_id, :invalid |
|
579 | elsif (@parent_issue != parent) && (all_dependent_issues.include?(@parent_issue) || @parent_issue.all_dependent_issues.include?(self)) | |
|
580 | errors.add :parent_issue_id, :invalid | |
|
579 | 581 | elsif !new_record? |
|
580 | 582 | # moving an existing issue |
|
581 | 583 | if @parent_issue.root_id != root_id |
@@ -860,6 +862,18 class Issue < ActiveRecord::Base | |||
|
860 | 862 | dependencies += relation.issue_to.all_dependent_issues(except) |
|
861 | 863 | end |
|
862 | 864 | end |
|
865 | unless leaf? | |
|
866 | children.each do |child| | |
|
867 | if !except.include?(child) | |
|
868 | dependencies << child | |
|
869 | dependencies += child.all_dependent_issues(except) | |
|
870 | end | |
|
871 | end | |
|
872 | end | |
|
873 | if parent && !except.include?(parent) | |
|
874 | dependencies << parent | |
|
875 | dependencies += parent.all_dependent_issues(except) | |
|
876 | end | |
|
863 | 877 | dependencies |
|
864 | 878 | end |
|
865 | 879 |
@@ -3474,6 +3474,8 class IssuesControllerTest < ActionController::TestCase | |||
|
3474 | 3474 | end |
|
3475 | 3475 | |
|
3476 | 3476 | def test_bulk_update_parent_id |
|
3477 | IssueRelation.delete_all | |
|
3478 | ||
|
3477 | 3479 | @request.session[:user_id] = 2 |
|
3478 | 3480 | post :bulk_update, :ids => [1, 3], |
|
3479 | 3481 | :notes => 'Bulk editing parent', |
@@ -166,22 +166,6 class IssueNestedSetTest < ActiveSupport::TestCase | |||
|
166 | 166 | assert_not_nil child.errors[:parent_issue_id] |
|
167 | 167 | end |
|
168 | 168 | |
|
169 | def test_moving_an_issue_should_keep_valid_relations_only | |
|
170 | issue1 = Issue.generate! | |
|
171 | issue2 = Issue.generate! | |
|
172 | issue3 = Issue.generate!(:parent_issue_id => issue2.id) | |
|
173 | issue4 = Issue.generate! | |
|
174 | r1 = IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
175 | r2 = IssueRelation.create!(:issue_from => issue1, :issue_to => issue3, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
176 | r3 = IssueRelation.create!(:issue_from => issue2, :issue_to => issue4, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
177 | issue2.reload | |
|
178 | issue2.parent_issue_id = issue1.id | |
|
179 | issue2.save! | |
|
180 | assert !IssueRelation.exists?(r1.id) | |
|
181 | assert !IssueRelation.exists?(r2.id) | |
|
182 | assert IssueRelation.exists?(r3.id) | |
|
183 | end | |
|
184 | ||
|
185 | 169 | def test_destroy_should_destroy_children |
|
186 | 170 | issue1 = Issue.generate! |
|
187 | 171 | issue2 = Issue.generate! |
@@ -30,6 +30,8 class IssueRelationTest < ActiveSupport::TestCase | |||
|
30 | 30 | :enumerations, |
|
31 | 31 | :trackers |
|
32 | 32 | |
|
33 | include Redmine::I18n | |
|
34 | ||
|
33 | 35 | def test_create |
|
34 | 36 | from = Issue.find(1) |
|
35 | 37 | to = Issue.find(2) |
@@ -115,6 +117,26 class IssueRelationTest < ActiveSupport::TestCase | |||
|
115 | 117 | assert_not_nil r.errors[:base] |
|
116 | 118 | end |
|
117 | 119 | |
|
120 | def test_validates_circular_dependency_of_subtask | |
|
121 | set_language_if_valid 'en' | |
|
122 | issue1 = Issue.generate! | |
|
123 | issue2 = Issue.generate! | |
|
124 | IssueRelation.create!( | |
|
125 | :issue_from => issue1, :issue_to => issue2, | |
|
126 | :relation_type => IssueRelation::TYPE_PRECEDES | |
|
127 | ) | |
|
128 | child = Issue.generate!(:parent_issue_id => issue2.id) | |
|
129 | issue1.reload | |
|
130 | child.reload | |
|
131 | ||
|
132 | r = IssueRelation.new( | |
|
133 | :issue_from => child, :issue_to => issue1, | |
|
134 | :relation_type => IssueRelation::TYPE_PRECEDES | |
|
135 | ) | |
|
136 | assert !r.save | |
|
137 | assert_include 'This relation would create a circular dependency', r.errors.full_messages | |
|
138 | end | |
|
139 | ||
|
118 | 140 | def test_validates_circular_dependency_on_reverse_relations |
|
119 | 141 | IssueRelation.delete_all |
|
120 | 142 | assert IssueRelation.create!( |
@@ -1531,6 +1531,36 class IssueTest < ActiveSupport::TestCase | |||
|
1531 | 1531 | assert child.save |
|
1532 | 1532 | end |
|
1533 | 1533 | |
|
1534 | def test_setting_parent_to_a_dependent_issue_should_not_validate | |
|
1535 | set_language_if_valid 'en' | |
|
1536 | issue1 = Issue.generate! | |
|
1537 | issue2 = Issue.generate! | |
|
1538 | issue3 = Issue.generate! | |
|
1539 | IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
1540 | IssueRelation.create!(:issue_from => issue3, :issue_to => issue1, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
1541 | issue3.reload | |
|
1542 | issue3.parent_issue_id = issue2.id | |
|
1543 | assert !issue3.valid? | |
|
1544 | assert_include 'Parent task is invalid', issue3.errors.full_messages | |
|
1545 | end | |
|
1546 | ||
|
1547 | def test_setting_parent_should_not_allow_circular_dependency | |
|
1548 | set_language_if_valid 'en' | |
|
1549 | issue1 = Issue.generate! | |
|
1550 | issue2 = Issue.generate! | |
|
1551 | IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
1552 | issue3 = Issue.generate! | |
|
1553 | issue2.reload | |
|
1554 | issue2.parent_issue_id = issue3.id | |
|
1555 | issue2.save! | |
|
1556 | issue4 = Issue.generate! | |
|
1557 | IssueRelation.create!(:issue_from => issue3, :issue_to => issue4, :relation_type => IssueRelation::TYPE_PRECEDES) | |
|
1558 | issue4.reload | |
|
1559 | issue4.parent_issue_id = issue1.id | |
|
1560 | assert !issue4.valid? | |
|
1561 | assert_include 'Parent task is invalid', issue4.errors.full_messages | |
|
1562 | end | |
|
1563 | ||
|
1534 | 1564 | def test_overdue |
|
1535 | 1565 | assert Issue.new(:due_date => 1.day.ago.to_date).overdue? |
|
1536 | 1566 | assert !Issue.new(:due_date => Date.today).overdue? |
General Comments 0
You need to be logged in to leave comments.
Login now