##// END OF EJS Templates
Rails3: test: replace deprecated errors.on at test_moving_an_issue_to_a_descendant_should_not_validate of unit/issue_nested_set_test.rb...
Toshi MARUYAMA -
r7497:6ebb5e834ceb
parent child
Show More
@@ -1,381 +1,381
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19
19
20 class IssueNestedSetTest < ActiveSupport::TestCase
20 class IssueNestedSetTest < ActiveSupport::TestCase
21 fixtures :projects, :users, :members, :member_roles, :roles,
21 fixtures :projects, :users, :members, :member_roles, :roles,
22 :trackers, :projects_trackers,
22 :trackers, :projects_trackers,
23 :versions,
23 :versions,
24 :issue_statuses, :issue_categories, :issue_relations, :workflows,
24 :issue_statuses, :issue_categories, :issue_relations, :workflows,
25 :enumerations,
25 :enumerations,
26 :issues,
26 :issues,
27 :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
27 :custom_fields, :custom_fields_projects, :custom_fields_trackers, :custom_values,
28 :time_entries
28 :time_entries
29
29
30 self.use_transactional_fixtures = false
30 self.use_transactional_fixtures = false
31
31
32 def test_create_root_issue
32 def test_create_root_issue
33 issue1 = create_issue!
33 issue1 = create_issue!
34 issue2 = create_issue!
34 issue2 = create_issue!
35 issue1.reload
35 issue1.reload
36 issue2.reload
36 issue2.reload
37
37
38 assert_equal [issue1.id, nil, 1, 2], [issue1.root_id, issue1.parent_id, issue1.lft, issue1.rgt]
38 assert_equal [issue1.id, nil, 1, 2], [issue1.root_id, issue1.parent_id, issue1.lft, issue1.rgt]
39 assert_equal [issue2.id, nil, 1, 2], [issue2.root_id, issue2.parent_id, issue2.lft, issue2.rgt]
39 assert_equal [issue2.id, nil, 1, 2], [issue2.root_id, issue2.parent_id, issue2.lft, issue2.rgt]
40 end
40 end
41
41
42 def test_create_child_issue
42 def test_create_child_issue
43 parent = create_issue!
43 parent = create_issue!
44 child = create_issue!(:parent_issue_id => parent.id)
44 child = create_issue!(:parent_issue_id => parent.id)
45 parent.reload
45 parent.reload
46 child.reload
46 child.reload
47
47
48 assert_equal [parent.id, nil, 1, 4], [parent.root_id, parent.parent_id, parent.lft, parent.rgt]
48 assert_equal [parent.id, nil, 1, 4], [parent.root_id, parent.parent_id, parent.lft, parent.rgt]
49 assert_equal [parent.id, parent.id, 2, 3], [child.root_id, child.parent_id, child.lft, child.rgt]
49 assert_equal [parent.id, parent.id, 2, 3], [child.root_id, child.parent_id, child.lft, child.rgt]
50 end
50 end
51
51
52 def test_creating_a_child_in_different_project_should_not_validate
52 def test_creating_a_child_in_different_project_should_not_validate
53 issue = create_issue!
53 issue = create_issue!
54 child = Issue.new(:project_id => 2, :tracker_id => 1, :author_id => 1,
54 child = Issue.new(:project_id => 2, :tracker_id => 1, :author_id => 1,
55 :subject => 'child', :parent_issue_id => issue.id)
55 :subject => 'child', :parent_issue_id => issue.id)
56 assert !child.save
56 assert !child.save
57 assert_not_nil child.errors[:parent_issue_id]
57 assert_not_nil child.errors[:parent_issue_id]
58 end
58 end
59
59
60 def test_move_a_root_to_child
60 def test_move_a_root_to_child
61 parent1 = create_issue!
61 parent1 = create_issue!
62 parent2 = create_issue!
62 parent2 = create_issue!
63 child = create_issue!(:parent_issue_id => parent1.id)
63 child = create_issue!(:parent_issue_id => parent1.id)
64
64
65 parent2.parent_issue_id = parent1.id
65 parent2.parent_issue_id = parent1.id
66 parent2.save!
66 parent2.save!
67 child.reload
67 child.reload
68 parent1.reload
68 parent1.reload
69 parent2.reload
69 parent2.reload
70
70
71 assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
71 assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
72 assert_equal [parent1.id, 4, 5], [parent2.root_id, parent2.lft, parent2.rgt]
72 assert_equal [parent1.id, 4, 5], [parent2.root_id, parent2.lft, parent2.rgt]
73 assert_equal [parent1.id, 2, 3], [child.root_id, child.lft, child.rgt]
73 assert_equal [parent1.id, 2, 3], [child.root_id, child.lft, child.rgt]
74 end
74 end
75
75
76 def test_move_a_child_to_root
76 def test_move_a_child_to_root
77 parent1 = create_issue!
77 parent1 = create_issue!
78 parent2 = create_issue!
78 parent2 = create_issue!
79 child = create_issue!(:parent_issue_id => parent1.id)
79 child = create_issue!(:parent_issue_id => parent1.id)
80
80
81 child.parent_issue_id = nil
81 child.parent_issue_id = nil
82 child.save!
82 child.save!
83 child.reload
83 child.reload
84 parent1.reload
84 parent1.reload
85 parent2.reload
85 parent2.reload
86
86
87 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
87 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
88 assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
88 assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
89 assert_equal [child.id, 1, 2], [child.root_id, child.lft, child.rgt]
89 assert_equal [child.id, 1, 2], [child.root_id, child.lft, child.rgt]
90 end
90 end
91
91
92 def test_move_a_child_to_another_issue
92 def test_move_a_child_to_another_issue
93 parent1 = create_issue!
93 parent1 = create_issue!
94 parent2 = create_issue!
94 parent2 = create_issue!
95 child = create_issue!(:parent_issue_id => parent1.id)
95 child = create_issue!(:parent_issue_id => parent1.id)
96
96
97 child.parent_issue_id = parent2.id
97 child.parent_issue_id = parent2.id
98 child.save!
98 child.save!
99 child.reload
99 child.reload
100 parent1.reload
100 parent1.reload
101 parent2.reload
101 parent2.reload
102
102
103 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
103 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
104 assert_equal [parent2.id, 1, 4], [parent2.root_id, parent2.lft, parent2.rgt]
104 assert_equal [parent2.id, 1, 4], [parent2.root_id, parent2.lft, parent2.rgt]
105 assert_equal [parent2.id, 2, 3], [child.root_id, child.lft, child.rgt]
105 assert_equal [parent2.id, 2, 3], [child.root_id, child.lft, child.rgt]
106 end
106 end
107
107
108 def test_move_a_child_with_descendants_to_another_issue
108 def test_move_a_child_with_descendants_to_another_issue
109 parent1 = create_issue!
109 parent1 = create_issue!
110 parent2 = create_issue!
110 parent2 = create_issue!
111 child = create_issue!(:parent_issue_id => parent1.id)
111 child = create_issue!(:parent_issue_id => parent1.id)
112 grandchild = create_issue!(:parent_issue_id => child.id)
112 grandchild = create_issue!(:parent_issue_id => child.id)
113
113
114 parent1.reload
114 parent1.reload
115 parent2.reload
115 parent2.reload
116 child.reload
116 child.reload
117 grandchild.reload
117 grandchild.reload
118
118
119 assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
119 assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt]
120 assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
120 assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt]
121 assert_equal [parent1.id, 2, 5], [child.root_id, child.lft, child.rgt]
121 assert_equal [parent1.id, 2, 5], [child.root_id, child.lft, child.rgt]
122 assert_equal [parent1.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
122 assert_equal [parent1.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
123
123
124 child.reload.parent_issue_id = parent2.id
124 child.reload.parent_issue_id = parent2.id
125 child.save!
125 child.save!
126 child.reload
126 child.reload
127 grandchild.reload
127 grandchild.reload
128 parent1.reload
128 parent1.reload
129 parent2.reload
129 parent2.reload
130
130
131 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
131 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt]
132 assert_equal [parent2.id, 1, 6], [parent2.root_id, parent2.lft, parent2.rgt]
132 assert_equal [parent2.id, 1, 6], [parent2.root_id, parent2.lft, parent2.rgt]
133 assert_equal [parent2.id, 2, 5], [child.root_id, child.lft, child.rgt]
133 assert_equal [parent2.id, 2, 5], [child.root_id, child.lft, child.rgt]
134 assert_equal [parent2.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
134 assert_equal [parent2.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt]
135 end
135 end
136
136
137 def test_move_a_child_with_descendants_to_another_project
137 def test_move_a_child_with_descendants_to_another_project
138 parent1 = create_issue!
138 parent1 = create_issue!
139 child = create_issue!(:parent_issue_id => parent1.id)
139 child = create_issue!(:parent_issue_id => parent1.id)
140 grandchild = create_issue!(:parent_issue_id => child.id)
140 grandchild = create_issue!(:parent_issue_id => child.id)
141
141
142 assert child.reload.move_to_project(Project.find(2))
142 assert child.reload.move_to_project(Project.find(2))
143 child.reload
143 child.reload
144 grandchild.reload
144 grandchild.reload
145 parent1.reload
145 parent1.reload
146
146
147 assert_equal [1, parent1.id, 1, 2], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
147 assert_equal [1, parent1.id, 1, 2], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
148 assert_equal [2, child.id, 1, 4], [child.project_id, child.root_id, child.lft, child.rgt]
148 assert_equal [2, child.id, 1, 4], [child.project_id, child.root_id, child.lft, child.rgt]
149 assert_equal [2, child.id, 2, 3], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
149 assert_equal [2, child.id, 2, 3], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
150 end
150 end
151
151
152 def test_invalid_move_to_another_project
152 def test_invalid_move_to_another_project
153 parent1 = create_issue!
153 parent1 = create_issue!
154 child = create_issue!(:parent_issue_id => parent1.id)
154 child = create_issue!(:parent_issue_id => parent1.id)
155 grandchild = create_issue!(:parent_issue_id => child.id, :tracker_id => 2)
155 grandchild = create_issue!(:parent_issue_id => child.id, :tracker_id => 2)
156 Project.find(2).tracker_ids = [1]
156 Project.find(2).tracker_ids = [1]
157
157
158 parent1.reload
158 parent1.reload
159 assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
159 assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
160
160
161 # child can not be moved to Project 2 because its child is on a disabled tracker
161 # child can not be moved to Project 2 because its child is on a disabled tracker
162 assert_equal false, Issue.find(child.id).move_to_project(Project.find(2))
162 assert_equal false, Issue.find(child.id).move_to_project(Project.find(2))
163 child.reload
163 child.reload
164 grandchild.reload
164 grandchild.reload
165 parent1.reload
165 parent1.reload
166
166
167 # no change
167 # no change
168 assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
168 assert_equal [1, parent1.id, 1, 6], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt]
169 assert_equal [1, parent1.id, 2, 5], [child.project_id, child.root_id, child.lft, child.rgt]
169 assert_equal [1, parent1.id, 2, 5], [child.project_id, child.root_id, child.lft, child.rgt]
170 assert_equal [1, parent1.id, 3, 4], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
170 assert_equal [1, parent1.id, 3, 4], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt]
171 end
171 end
172
172
173 def test_moving_an_issue_to_a_descendant_should_not_validate
173 def test_moving_an_issue_to_a_descendant_should_not_validate
174 parent1 = create_issue!
174 parent1 = create_issue!
175 parent2 = create_issue!
175 parent2 = create_issue!
176 child = create_issue!(:parent_issue_id => parent1.id)
176 child = create_issue!(:parent_issue_id => parent1.id)
177 grandchild = create_issue!(:parent_issue_id => child.id)
177 grandchild = create_issue!(:parent_issue_id => child.id)
178
178
179 child.reload
179 child.reload
180 child.parent_issue_id = grandchild.id
180 child.parent_issue_id = grandchild.id
181 assert !child.save
181 assert !child.save
182 assert_not_nil child.errors.on(:parent_issue_id)
182 assert_not_nil child.errors[:parent_issue_id]
183 end
183 end
184
184
185 def test_moving_an_issue_should_keep_valid_relations_only
185 def test_moving_an_issue_should_keep_valid_relations_only
186 issue1 = create_issue!
186 issue1 = create_issue!
187 issue2 = create_issue!
187 issue2 = create_issue!
188 issue3 = create_issue!(:parent_issue_id => issue2.id)
188 issue3 = create_issue!(:parent_issue_id => issue2.id)
189 issue4 = create_issue!
189 issue4 = create_issue!
190 r1 = IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
190 r1 = IssueRelation.create!(:issue_from => issue1, :issue_to => issue2, :relation_type => IssueRelation::TYPE_PRECEDES)
191 r2 = IssueRelation.create!(:issue_from => issue1, :issue_to => issue3, :relation_type => IssueRelation::TYPE_PRECEDES)
191 r2 = IssueRelation.create!(:issue_from => issue1, :issue_to => issue3, :relation_type => IssueRelation::TYPE_PRECEDES)
192 r3 = IssueRelation.create!(:issue_from => issue2, :issue_to => issue4, :relation_type => IssueRelation::TYPE_PRECEDES)
192 r3 = IssueRelation.create!(:issue_from => issue2, :issue_to => issue4, :relation_type => IssueRelation::TYPE_PRECEDES)
193 issue2.reload
193 issue2.reload
194 issue2.parent_issue_id = issue1.id
194 issue2.parent_issue_id = issue1.id
195 issue2.save!
195 issue2.save!
196 assert !IssueRelation.exists?(r1.id)
196 assert !IssueRelation.exists?(r1.id)
197 assert !IssueRelation.exists?(r2.id)
197 assert !IssueRelation.exists?(r2.id)
198 assert IssueRelation.exists?(r3.id)
198 assert IssueRelation.exists?(r3.id)
199 end
199 end
200
200
201 def test_destroy_should_destroy_children
201 def test_destroy_should_destroy_children
202 issue1 = create_issue!
202 issue1 = create_issue!
203 issue2 = create_issue!
203 issue2 = create_issue!
204 issue3 = create_issue!(:parent_issue_id => issue2.id)
204 issue3 = create_issue!(:parent_issue_id => issue2.id)
205 issue4 = create_issue!(:parent_issue_id => issue1.id)
205 issue4 = create_issue!(:parent_issue_id => issue1.id)
206
206
207 issue3.init_journal(User.find(2))
207 issue3.init_journal(User.find(2))
208 issue3.subject = 'child with journal'
208 issue3.subject = 'child with journal'
209 issue3.save!
209 issue3.save!
210
210
211 assert_difference 'Issue.count', -2 do
211 assert_difference 'Issue.count', -2 do
212 assert_difference 'Journal.count', -1 do
212 assert_difference 'Journal.count', -1 do
213 assert_difference 'JournalDetail.count', -1 do
213 assert_difference 'JournalDetail.count', -1 do
214 Issue.find(issue2.id).destroy
214 Issue.find(issue2.id).destroy
215 end
215 end
216 end
216 end
217 end
217 end
218
218
219 issue1.reload
219 issue1.reload
220 issue4.reload
220 issue4.reload
221 assert !Issue.exists?(issue2.id)
221 assert !Issue.exists?(issue2.id)
222 assert !Issue.exists?(issue3.id)
222 assert !Issue.exists?(issue3.id)
223 assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt]
223 assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt]
224 assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
224 assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt]
225 end
225 end
226
226
227 def test_destroy_parent_issue_updated_during_children_destroy
227 def test_destroy_parent_issue_updated_during_children_destroy
228 parent = create_issue!
228 parent = create_issue!
229 create_issue!(:start_date => Date.today, :parent_issue_id => parent.id)
229 create_issue!(:start_date => Date.today, :parent_issue_id => parent.id)
230 create_issue!(:start_date => 2.days.from_now, :parent_issue_id => parent.id)
230 create_issue!(:start_date => 2.days.from_now, :parent_issue_id => parent.id)
231
231
232 assert_difference 'Issue.count', -3 do
232 assert_difference 'Issue.count', -3 do
233 Issue.find(parent.id).destroy
233 Issue.find(parent.id).destroy
234 end
234 end
235 end
235 end
236
236
237 def test_destroy_child_issue_with_children
237 def test_destroy_child_issue_with_children
238 root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
238 root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root')
239 child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
239 child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id)
240 leaf = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'leaf', :parent_issue_id => child.id)
240 leaf = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'leaf', :parent_issue_id => child.id)
241 leaf.init_journal(User.find(2))
241 leaf.init_journal(User.find(2))
242 leaf.subject = 'leaf with journal'
242 leaf.subject = 'leaf with journal'
243 leaf.save!
243 leaf.save!
244
244
245 assert_difference 'Issue.count', -2 do
245 assert_difference 'Issue.count', -2 do
246 assert_difference 'Journal.count', -1 do
246 assert_difference 'Journal.count', -1 do
247 assert_difference 'JournalDetail.count', -1 do
247 assert_difference 'JournalDetail.count', -1 do
248 Issue.find(child.id).destroy
248 Issue.find(child.id).destroy
249 end
249 end
250 end
250 end
251 end
251 end
252
252
253 root = Issue.find(root.id)
253 root = Issue.find(root.id)
254 assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
254 assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
255 end
255 end
256
256
257 def test_destroy_issue_with_grand_child
257 def test_destroy_issue_with_grand_child
258 parent = create_issue!
258 parent = create_issue!
259 issue = create_issue!(:parent_issue_id => parent.id)
259 issue = create_issue!(:parent_issue_id => parent.id)
260 child = create_issue!(:parent_issue_id => issue.id)
260 child = create_issue!(:parent_issue_id => issue.id)
261 grandchild1 = create_issue!(:parent_issue_id => child.id)
261 grandchild1 = create_issue!(:parent_issue_id => child.id)
262 grandchild2 = create_issue!(:parent_issue_id => child.id)
262 grandchild2 = create_issue!(:parent_issue_id => child.id)
263
263
264 assert_difference 'Issue.count', -4 do
264 assert_difference 'Issue.count', -4 do
265 Issue.find(issue.id).destroy
265 Issue.find(issue.id).destroy
266 parent.reload
266 parent.reload
267 assert_equal [1, 2], [parent.lft, parent.rgt]
267 assert_equal [1, 2], [parent.lft, parent.rgt]
268 end
268 end
269 end
269 end
270
270
271 def test_parent_priority_should_be_the_highest_child_priority
271 def test_parent_priority_should_be_the_highest_child_priority
272 parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
272 parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
273 # Create children
273 # Create children
274 child1 = create_issue!(:priority => IssuePriority.find_by_name('High'), :parent_issue_id => parent.id)
274 child1 = create_issue!(:priority => IssuePriority.find_by_name('High'), :parent_issue_id => parent.id)
275 assert_equal 'High', parent.reload.priority.name
275 assert_equal 'High', parent.reload.priority.name
276 child2 = create_issue!(:priority => IssuePriority.find_by_name('Immediate'), :parent_issue_id => child1.id)
276 child2 = create_issue!(:priority => IssuePriority.find_by_name('Immediate'), :parent_issue_id => child1.id)
277 assert_equal 'Immediate', child1.reload.priority.name
277 assert_equal 'Immediate', child1.reload.priority.name
278 assert_equal 'Immediate', parent.reload.priority.name
278 assert_equal 'Immediate', parent.reload.priority.name
279 child3 = create_issue!(:priority => IssuePriority.find_by_name('Low'), :parent_issue_id => parent.id)
279 child3 = create_issue!(:priority => IssuePriority.find_by_name('Low'), :parent_issue_id => parent.id)
280 assert_equal 'Immediate', parent.reload.priority.name
280 assert_equal 'Immediate', parent.reload.priority.name
281 # Destroy a child
281 # Destroy a child
282 child1.destroy
282 child1.destroy
283 assert_equal 'Low', parent.reload.priority.name
283 assert_equal 'Low', parent.reload.priority.name
284 # Update a child
284 # Update a child
285 child3.reload.priority = IssuePriority.find_by_name('Normal')
285 child3.reload.priority = IssuePriority.find_by_name('Normal')
286 child3.save!
286 child3.save!
287 assert_equal 'Normal', parent.reload.priority.name
287 assert_equal 'Normal', parent.reload.priority.name
288 end
288 end
289
289
290 def test_parent_dates_should_be_lowest_start_and_highest_due_dates
290 def test_parent_dates_should_be_lowest_start_and_highest_due_dates
291 parent = create_issue!
291 parent = create_issue!
292 create_issue!(:start_date => '2010-01-25', :due_date => '2010-02-15', :parent_issue_id => parent.id)
292 create_issue!(:start_date => '2010-01-25', :due_date => '2010-02-15', :parent_issue_id => parent.id)
293 create_issue!( :due_date => '2010-02-13', :parent_issue_id => parent.id)
293 create_issue!( :due_date => '2010-02-13', :parent_issue_id => parent.id)
294 create_issue!(:start_date => '2010-02-01', :due_date => '2010-02-22', :parent_issue_id => parent.id)
294 create_issue!(:start_date => '2010-02-01', :due_date => '2010-02-22', :parent_issue_id => parent.id)
295 parent.reload
295 parent.reload
296 assert_equal Date.parse('2010-01-25'), parent.start_date
296 assert_equal Date.parse('2010-01-25'), parent.start_date
297 assert_equal Date.parse('2010-02-22'), parent.due_date
297 assert_equal Date.parse('2010-02-22'), parent.due_date
298 end
298 end
299
299
300 def test_parent_done_ratio_should_be_average_done_ratio_of_leaves
300 def test_parent_done_ratio_should_be_average_done_ratio_of_leaves
301 parent = create_issue!
301 parent = create_issue!
302 create_issue!(:done_ratio => 20, :parent_issue_id => parent.id)
302 create_issue!(:done_ratio => 20, :parent_issue_id => parent.id)
303 assert_equal 20, parent.reload.done_ratio
303 assert_equal 20, parent.reload.done_ratio
304 create_issue!(:done_ratio => 70, :parent_issue_id => parent.id)
304 create_issue!(:done_ratio => 70, :parent_issue_id => parent.id)
305 assert_equal 45, parent.reload.done_ratio
305 assert_equal 45, parent.reload.done_ratio
306
306
307 child = create_issue!(:done_ratio => 0, :parent_issue_id => parent.id)
307 child = create_issue!(:done_ratio => 0, :parent_issue_id => parent.id)
308 assert_equal 30, parent.reload.done_ratio
308 assert_equal 30, parent.reload.done_ratio
309
309
310 create_issue!(:done_ratio => 30, :parent_issue_id => child.id)
310 create_issue!(:done_ratio => 30, :parent_issue_id => child.id)
311 assert_equal 30, child.reload.done_ratio
311 assert_equal 30, child.reload.done_ratio
312 assert_equal 40, parent.reload.done_ratio
312 assert_equal 40, parent.reload.done_ratio
313 end
313 end
314
314
315 def test_parent_done_ratio_should_be_weighted_by_estimated_times_if_any
315 def test_parent_done_ratio_should_be_weighted_by_estimated_times_if_any
316 parent = create_issue!
316 parent = create_issue!
317 create_issue!(:estimated_hours => 10, :done_ratio => 20, :parent_issue_id => parent.id)
317 create_issue!(:estimated_hours => 10, :done_ratio => 20, :parent_issue_id => parent.id)
318 assert_equal 20, parent.reload.done_ratio
318 assert_equal 20, parent.reload.done_ratio
319 create_issue!(:estimated_hours => 20, :done_ratio => 50, :parent_issue_id => parent.id)
319 create_issue!(:estimated_hours => 20, :done_ratio => 50, :parent_issue_id => parent.id)
320 assert_equal (50 * 20 + 20 * 10) / 30, parent.reload.done_ratio
320 assert_equal (50 * 20 + 20 * 10) / 30, parent.reload.done_ratio
321 end
321 end
322
322
323 def test_parent_estimate_should_be_sum_of_leaves
323 def test_parent_estimate_should_be_sum_of_leaves
324 parent = create_issue!
324 parent = create_issue!
325 create_issue!(:estimated_hours => nil, :parent_issue_id => parent.id)
325 create_issue!(:estimated_hours => nil, :parent_issue_id => parent.id)
326 assert_equal nil, parent.reload.estimated_hours
326 assert_equal nil, parent.reload.estimated_hours
327 create_issue!(:estimated_hours => 5, :parent_issue_id => parent.id)
327 create_issue!(:estimated_hours => 5, :parent_issue_id => parent.id)
328 assert_equal 5, parent.reload.estimated_hours
328 assert_equal 5, parent.reload.estimated_hours
329 create_issue!(:estimated_hours => 7, :parent_issue_id => parent.id)
329 create_issue!(:estimated_hours => 7, :parent_issue_id => parent.id)
330 assert_equal 12, parent.reload.estimated_hours
330 assert_equal 12, parent.reload.estimated_hours
331 end
331 end
332
332
333 def test_move_parent_updates_old_parent_attributes
333 def test_move_parent_updates_old_parent_attributes
334 first_parent = create_issue!
334 first_parent = create_issue!
335 second_parent = create_issue!
335 second_parent = create_issue!
336 child = create_issue!(:estimated_hours => 5, :parent_issue_id => first_parent.id)
336 child = create_issue!(:estimated_hours => 5, :parent_issue_id => first_parent.id)
337 assert_equal 5, first_parent.reload.estimated_hours
337 assert_equal 5, first_parent.reload.estimated_hours
338 child.update_attributes(:estimated_hours => 7, :parent_issue_id => second_parent.id)
338 child.update_attributes(:estimated_hours => 7, :parent_issue_id => second_parent.id)
339 assert_equal 7, second_parent.reload.estimated_hours
339 assert_equal 7, second_parent.reload.estimated_hours
340 assert_nil first_parent.reload.estimated_hours
340 assert_nil first_parent.reload.estimated_hours
341 end
341 end
342
342
343 def test_reschuling_a_parent_should_reschedule_subtasks
343 def test_reschuling_a_parent_should_reschedule_subtasks
344 parent = create_issue!
344 parent = create_issue!
345 c1 = create_issue!(:start_date => '2010-05-12', :due_date => '2010-05-18', :parent_issue_id => parent.id)
345 c1 = create_issue!(:start_date => '2010-05-12', :due_date => '2010-05-18', :parent_issue_id => parent.id)
346 c2 = create_issue!(:start_date => '2010-06-03', :due_date => '2010-06-10', :parent_issue_id => parent.id)
346 c2 = create_issue!(:start_date => '2010-06-03', :due_date => '2010-06-10', :parent_issue_id => parent.id)
347 parent.reload
347 parent.reload
348 parent.reschedule_after(Date.parse('2010-06-02'))
348 parent.reschedule_after(Date.parse('2010-06-02'))
349 c1.reload
349 c1.reload
350 assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-08')], [c1.start_date, c1.due_date]
350 assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-08')], [c1.start_date, c1.due_date]
351 c2.reload
351 c2.reload
352 assert_equal [Date.parse('2010-06-03'), Date.parse('2010-06-10')], [c2.start_date, c2.due_date] # no change
352 assert_equal [Date.parse('2010-06-03'), Date.parse('2010-06-10')], [c2.start_date, c2.due_date] # no change
353 parent.reload
353 parent.reload
354 assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-10')], [parent.start_date, parent.due_date]
354 assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-10')], [parent.start_date, parent.due_date]
355 end
355 end
356
356
357 def test_project_copy_should_copy_issue_tree
357 def test_project_copy_should_copy_issue_tree
358 p = Project.create!(:name => 'Tree copy', :identifier => 'tree-copy', :tracker_ids => [1, 2])
358 p = Project.create!(:name => 'Tree copy', :identifier => 'tree-copy', :tracker_ids => [1, 2])
359 i1 = create_issue!(:project_id => p.id, :subject => 'i1')
359 i1 = create_issue!(:project_id => p.id, :subject => 'i1')
360 i2 = create_issue!(:project_id => p.id, :subject => 'i2', :parent_issue_id => i1.id)
360 i2 = create_issue!(:project_id => p.id, :subject => 'i2', :parent_issue_id => i1.id)
361 i3 = create_issue!(:project_id => p.id, :subject => 'i3', :parent_issue_id => i1.id)
361 i3 = create_issue!(:project_id => p.id, :subject => 'i3', :parent_issue_id => i1.id)
362 i4 = create_issue!(:project_id => p.id, :subject => 'i4', :parent_issue_id => i2.id)
362 i4 = create_issue!(:project_id => p.id, :subject => 'i4', :parent_issue_id => i2.id)
363 i5 = create_issue!(:project_id => p.id, :subject => 'i5')
363 i5 = create_issue!(:project_id => p.id, :subject => 'i5')
364 c = Project.new(:name => 'Copy', :identifier => 'copy', :tracker_ids => [1, 2])
364 c = Project.new(:name => 'Copy', :identifier => 'copy', :tracker_ids => [1, 2])
365 c.copy(p, :only => 'issues')
365 c.copy(p, :only => 'issues')
366 c.reload
366 c.reload
367
367
368 assert_equal 5, c.issues.count
368 assert_equal 5, c.issues.count
369 ic1, ic2, ic3, ic4, ic5 = c.issues.find(:all, :order => 'subject')
369 ic1, ic2, ic3, ic4, ic5 = c.issues.find(:all, :order => 'subject')
370 assert ic1.root?
370 assert ic1.root?
371 assert_equal ic1, ic2.parent
371 assert_equal ic1, ic2.parent
372 assert_equal ic1, ic3.parent
372 assert_equal ic1, ic3.parent
373 assert_equal ic2, ic4.parent
373 assert_equal ic2, ic4.parent
374 assert ic5.root?
374 assert ic5.root?
375 end
375 end
376
376
377 # Helper that creates an issue with default attributes
377 # Helper that creates an issue with default attributes
378 def create_issue!(attributes={})
378 def create_issue!(attributes={})
379 Issue.create!({:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'test'}.merge(attributes))
379 Issue.create!({:project_id => 1, :tracker_id => 1, :author_id => 1, :subject => 'test'}.merge(attributes))
380 end
380 end
381 end
381 end
General Comments 0
You need to be logged in to leave comments. Login now