##// END OF EJS Templates
Merged r11641 and r11642 from trunk (#8794)....
Jean-Philippe Lang -
r11426:5745a2a2e34e
parent child
Show More
@@ -576,6 +576,8 class Issue < ActiveRecord::Base
576 elsif @parent_issue
576 elsif @parent_issue
577 if !valid_parent_project?(@parent_issue)
577 if !valid_parent_project?(@parent_issue)
578 errors.add :parent_issue_id, :invalid
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 elsif !new_record?
581 elsif !new_record?
580 # moving an existing issue
582 # moving an existing issue
581 if @parent_issue.root_id != root_id
583 if @parent_issue.root_id != root_id
@@ -851,16 +853,16 class Issue < ActiveRecord::Base
851 IssueRelation.find(relation_id, :conditions => ["issue_to_id = ? OR issue_from_id = ?", id, id])
853 IssueRelation.find(relation_id, :conditions => ["issue_to_id = ? OR issue_from_id = ?", id, id])
852 end
854 end
853
855
856 # Returns all the other issues that depend on the issue
854 def all_dependent_issues(except=[])
857 def all_dependent_issues(except=[])
855 except << self
858 except << self
856 dependencies = []
859 dependencies = []
857 relations_from.each do |relation|
860 dependencies += relations_from.map(&:issue_to)
858 if relation.issue_to && !except.include?(relation.issue_to)
861 dependencies += children unless leaf?
859 dependencies << relation.issue_to
862 dependencies << parent
860 dependencies += relation.issue_to.all_dependent_issues(except)
863 dependencies.compact!
861 end
864 dependencies -= except
862 end
865 dependencies + dependencies.map {|issue| issue.all_dependent_issues(except)}.flatten
863 dependencies
864 end
866 end
865
867
866 # Returns an array of issues that duplicate this one
868 # Returns an array of issues that duplicate this one
@@ -3474,6 +3474,8 class IssuesControllerTest < ActionController::TestCase
3474 end
3474 end
3475
3475
3476 def test_bulk_update_parent_id
3476 def test_bulk_update_parent_id
3477 IssueRelation.delete_all
3478
3477 @request.session[:user_id] = 2
3479 @request.session[:user_id] = 2
3478 post :bulk_update, :ids => [1, 3],
3480 post :bulk_update, :ids => [1, 3],
3479 :notes => 'Bulk editing parent',
3481 :notes => 'Bulk editing parent',
@@ -166,22 +166,6 class IssueNestedSetTest < ActiveSupport::TestCase
166 assert_not_nil child.errors[:parent_issue_id]
166 assert_not_nil child.errors[:parent_issue_id]
167 end
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 def test_destroy_should_destroy_children
169 def test_destroy_should_destroy_children
186 issue1 = Issue.generate!
170 issue1 = Issue.generate!
187 issue2 = Issue.generate!
171 issue2 = Issue.generate!
@@ -30,6 +30,8 class IssueRelationTest < ActiveSupport::TestCase
30 :enumerations,
30 :enumerations,
31 :trackers
31 :trackers
32
32
33 include Redmine::I18n
34
33 def test_create
35 def test_create
34 from = Issue.find(1)
36 from = Issue.find(1)
35 to = Issue.find(2)
37 to = Issue.find(2)
@@ -115,6 +117,26 class IssueRelationTest < ActiveSupport::TestCase
115 assert_not_nil r.errors[:base]
117 assert_not_nil r.errors[:base]
116 end
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 def test_validates_circular_dependency_on_reverse_relations
140 def test_validates_circular_dependency_on_reverse_relations
119 IssueRelation.delete_all
141 IssueRelation.delete_all
120 assert IssueRelation.create!(
142 assert IssueRelation.create!(
@@ -1528,6 +1528,36 class IssueTest < ActiveSupport::TestCase
1528 assert child.save
1528 assert child.save
1529 end
1529 end
1530
1530
1531 def test_setting_parent_to_a_dependent_issue_should_not_validate
1532 set_language_if_valid 'en'
1533 issue1 = Issue.generate!
1534 issue2 = Issue.generate!
1535 issue3 = Issue.generate!
1536 IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
1537 IssueRelation.create!(:issue_from => issue3, :issue_to => issue1, :relation_type => IssueRelation::TYPE_PRECEDES)
1538 issue3.reload
1539 issue3.parent_issue_id = issue2.id
1540 assert !issue3.valid?
1541 assert_include 'Parent task is invalid', issue3.errors.full_messages
1542 end
1543
1544 def test_setting_parent_should_not_allow_circular_dependency
1545 set_language_if_valid 'en'
1546 issue1 = Issue.generate!
1547 issue2 = Issue.generate!
1548 IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
1549 issue3 = Issue.generate!
1550 issue2.reload
1551 issue2.parent_issue_id = issue3.id
1552 issue2.save!
1553 issue4 = Issue.generate!
1554 IssueRelation.create!(:issue_from => issue3, :issue_to => issue4, :relation_type => IssueRelation::TYPE_PRECEDES)
1555 issue4.reload
1556 issue4.parent_issue_id = issue1.id
1557 assert !issue4.valid?
1558 assert_include 'Parent task is invalid', issue4.errors.full_messages
1559 end
1560
1531 def test_overdue
1561 def test_overdue
1532 assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
1562 assert Issue.new(:due_date => 1.day.ago.to_date).overdue?
1533 assert !Issue.new(:due_date => Date.today).overdue?
1563 assert !Issue.new(:due_date => Date.today).overdue?
General Comments 0
You need to be logged in to leave comments. Login now