Mercurial > hg > soundsoftware-site
comparison test/unit/issue_nested_set_test.rb @ 1517:dffacf8a6908 redmine-2.5
Update to Redmine SVN revision 13367 on 2.5-stable branch
author | Chris Cannam |
---|---|
date | Tue, 09 Sep 2014 09:29:00 +0100 |
parents | e248c7af89ec |
children |
comparison
equal
deleted
inserted
replaced
1516:b450a9d58aed | 1517:dffacf8a6908 |
---|---|
22 :trackers, :projects_trackers, | 22 :trackers, :projects_trackers, |
23 :issue_statuses, :issue_categories, :issue_relations, | 23 :issue_statuses, :issue_categories, :issue_relations, |
24 :enumerations, | 24 :enumerations, |
25 :issues | 25 :issues |
26 | 26 |
27 def test_new_record_is_leaf | |
28 i = Issue.new | |
29 assert i.leaf? | |
30 end | |
31 | |
27 def test_create_root_issue | 32 def test_create_root_issue |
33 lft1 = new_issue_lft | |
28 issue1 = Issue.generate! | 34 issue1 = Issue.generate! |
35 lft2 = new_issue_lft | |
29 issue2 = Issue.generate! | 36 issue2 = Issue.generate! |
30 issue1.reload | 37 issue1.reload |
31 issue2.reload | 38 issue2.reload |
32 | 39 assert_equal [issue1.id, nil, lft1, lft1 + 1], [issue1.root_id, issue1.parent_id, issue1.lft, issue1.rgt] |
33 assert_equal [issue1.id, nil, 1, 2], [issue1.root_id, issue1.parent_id, issue1.lft, issue1.rgt] | 40 assert_equal [issue2.id, nil, lft2, lft2 + 1], [issue2.root_id, issue2.parent_id, issue2.lft, issue2.rgt] |
34 assert_equal [issue2.id, nil, 1, 2], [issue2.root_id, issue2.parent_id, issue2.lft, issue2.rgt] | |
35 end | 41 end |
36 | 42 |
37 def test_create_child_issue | 43 def test_create_child_issue |
38 parent = Issue.generate! | 44 lft = new_issue_lft |
39 child = Issue.generate!(:parent_issue_id => parent.id) | 45 parent = Issue.generate! |
46 child = parent.generate_child! | |
40 parent.reload | 47 parent.reload |
41 child.reload | 48 child.reload |
42 | 49 assert_equal [parent.id, nil, lft, lft + 3], [parent.root_id, parent.parent_id, parent.lft, parent.rgt] |
43 assert_equal [parent.id, nil, 1, 4], [parent.root_id, parent.parent_id, parent.lft, parent.rgt] | 50 assert_equal [parent.id, parent.id, lft + 1, lft + 2], [child.root_id, child.parent_id, child.lft, child.rgt] |
44 assert_equal [parent.id, parent.id, 2, 3], [child.root_id, child.parent_id, child.lft, child.rgt] | |
45 end | 51 end |
46 | 52 |
47 def test_creating_a_child_in_a_subproject_should_validate | 53 def test_creating_a_child_in_a_subproject_should_validate |
48 issue = Issue.generate! | 54 issue = Issue.generate! |
49 child = Issue.new(:project_id => 3, :tracker_id => 2, :author_id => 1, | 55 child = Issue.new(:project_id => 3, :tracker_id => 2, :author_id => 1, |
59 assert !child.save | 65 assert !child.save |
60 assert_not_equal [], child.errors[:parent_issue_id] | 66 assert_not_equal [], child.errors[:parent_issue_id] |
61 end | 67 end |
62 | 68 |
63 def test_move_a_root_to_child | 69 def test_move_a_root_to_child |
70 lft = new_issue_lft | |
64 parent1 = Issue.generate! | 71 parent1 = Issue.generate! |
65 parent2 = Issue.generate! | 72 parent2 = Issue.generate! |
66 child = Issue.generate!(:parent_issue_id => parent1.id) | 73 child = parent1.generate_child! |
67 | |
68 parent2.parent_issue_id = parent1.id | 74 parent2.parent_issue_id = parent1.id |
69 parent2.save! | 75 parent2.save! |
70 child.reload | 76 child.reload |
71 parent1.reload | 77 parent1.reload |
72 parent2.reload | 78 parent2.reload |
73 | 79 assert_equal [parent1.id, lft, lft + 5], [parent1.root_id, parent1.lft, parent1.rgt] |
74 assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt] | 80 assert_equal [parent1.id, lft + 3, lft + 4], [parent2.root_id, parent2.lft, parent2.rgt] |
75 assert_equal [parent1.id, 4, 5], [parent2.root_id, parent2.lft, parent2.rgt] | 81 assert_equal [parent1.id, lft + 1, lft + 2], [child.root_id, child.lft, child.rgt] |
76 assert_equal [parent1.id, 2, 3], [child.root_id, child.lft, child.rgt] | |
77 end | 82 end |
78 | 83 |
79 def test_move_a_child_to_root | 84 def test_move_a_child_to_root |
80 parent1 = Issue.generate! | 85 lft1 = new_issue_lft |
86 parent1 = Issue.generate! | |
87 lft2 = new_issue_lft | |
81 parent2 = Issue.generate! | 88 parent2 = Issue.generate! |
82 child = Issue.generate!(:parent_issue_id => parent1.id) | 89 child = parent1.generate_child! |
83 | |
84 child.parent_issue_id = nil | 90 child.parent_issue_id = nil |
85 child.save! | 91 child.save! |
86 child.reload | 92 child.reload |
87 parent1.reload | 93 parent1.reload |
88 parent2.reload | 94 parent2.reload |
89 | 95 assert_equal [parent1.id, lft1, lft1 + 1], [parent1.root_id, parent1.lft, parent1.rgt] |
90 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt] | 96 assert_equal [parent2.id, lft2, lft2 + 1], [parent2.root_id, parent2.lft, parent2.rgt] |
91 assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt] | |
92 assert_equal [child.id, 1, 2], [child.root_id, child.lft, child.rgt] | 97 assert_equal [child.id, 1, 2], [child.root_id, child.lft, child.rgt] |
93 end | 98 end |
94 | 99 |
95 def test_move_a_child_to_another_issue | 100 def test_move_a_child_to_another_issue |
96 parent1 = Issue.generate! | 101 lft1 = new_issue_lft |
102 parent1 = Issue.generate! | |
103 lft2 = new_issue_lft | |
97 parent2 = Issue.generate! | 104 parent2 = Issue.generate! |
98 child = Issue.generate!(:parent_issue_id => parent1.id) | 105 child = parent1.generate_child! |
99 | |
100 child.parent_issue_id = parent2.id | 106 child.parent_issue_id = parent2.id |
101 child.save! | 107 child.save! |
102 child.reload | 108 child.reload |
103 parent1.reload | 109 parent1.reload |
104 parent2.reload | 110 parent2.reload |
105 | 111 assert_equal [parent1.id, lft1, lft1 + 1], [parent1.root_id, parent1.lft, parent1.rgt] |
106 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt] | 112 assert_equal [parent2.id, lft2, lft2 + 3], [parent2.root_id, parent2.lft, parent2.rgt] |
107 assert_equal [parent2.id, 1, 4], [parent2.root_id, parent2.lft, parent2.rgt] | 113 assert_equal [parent2.id, lft2 + 1, lft2 + 2], [child.root_id, child.lft, child.rgt] |
108 assert_equal [parent2.id, 2, 3], [child.root_id, child.lft, child.rgt] | |
109 end | 114 end |
110 | 115 |
111 def test_move_a_child_with_descendants_to_another_issue | 116 def test_move_a_child_with_descendants_to_another_issue |
112 parent1 = Issue.generate! | 117 lft1 = new_issue_lft |
118 parent1 = Issue.generate! | |
119 lft2 = new_issue_lft | |
113 parent2 = Issue.generate! | 120 parent2 = Issue.generate! |
114 child = Issue.generate!(:parent_issue_id => parent1.id) | 121 child = parent1.generate_child! |
115 grandchild = Issue.generate!(:parent_issue_id => child.id) | 122 grandchild = child.generate_child! |
116 | |
117 parent1.reload | 123 parent1.reload |
118 parent2.reload | 124 parent2.reload |
119 child.reload | 125 child.reload |
120 grandchild.reload | 126 grandchild.reload |
121 | 127 assert_equal [parent1.id, lft1, lft1 + 5], [parent1.root_id, parent1.lft, parent1.rgt] |
122 assert_equal [parent1.id, 1, 6], [parent1.root_id, parent1.lft, parent1.rgt] | 128 assert_equal [parent2.id, lft2, lft2 + 1], [parent2.root_id, parent2.lft, parent2.rgt] |
123 assert_equal [parent2.id, 1, 2], [parent2.root_id, parent2.lft, parent2.rgt] | 129 assert_equal [parent1.id, lft1 + 1, lft1 + 4], [child.root_id, child.lft, child.rgt] |
124 assert_equal [parent1.id, 2, 5], [child.root_id, child.lft, child.rgt] | 130 assert_equal [parent1.id, lft1 + 2, lft1 + 3], [grandchild.root_id, grandchild.lft, grandchild.rgt] |
125 assert_equal [parent1.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt] | |
126 | |
127 child.reload.parent_issue_id = parent2.id | 131 child.reload.parent_issue_id = parent2.id |
128 child.save! | 132 child.save! |
129 child.reload | 133 child.reload |
130 grandchild.reload | 134 grandchild.reload |
131 parent1.reload | 135 parent1.reload |
132 parent2.reload | 136 parent2.reload |
133 | 137 assert_equal [parent1.id, lft1, lft1 + 1], [parent1.root_id, parent1.lft, parent1.rgt] |
134 assert_equal [parent1.id, 1, 2], [parent1.root_id, parent1.lft, parent1.rgt] | 138 assert_equal [parent2.id, lft2, lft2 + 5], [parent2.root_id, parent2.lft, parent2.rgt] |
135 assert_equal [parent2.id, 1, 6], [parent2.root_id, parent2.lft, parent2.rgt] | 139 assert_equal [parent2.id, lft2 + 1, lft2 + 4], [child.root_id, child.lft, child.rgt] |
136 assert_equal [parent2.id, 2, 5], [child.root_id, child.lft, child.rgt] | 140 assert_equal [parent2.id, lft2 + 2, lft2 + 3], [grandchild.root_id, grandchild.lft, grandchild.rgt] |
137 assert_equal [parent2.id, 3, 4], [grandchild.root_id, grandchild.lft, grandchild.rgt] | |
138 end | 141 end |
139 | 142 |
140 def test_move_a_child_with_descendants_to_another_project | 143 def test_move_a_child_with_descendants_to_another_project |
141 parent1 = Issue.generate! | 144 lft1 = new_issue_lft |
142 child = Issue.generate!(:parent_issue_id => parent1.id) | 145 parent1 = Issue.generate! |
143 grandchild = Issue.generate!(:parent_issue_id => child.id) | 146 child = parent1.generate_child! |
144 | 147 grandchild = child.generate_child! |
145 child.reload | 148 child.reload |
146 child.project = Project.find(2) | 149 child.project = Project.find(2) |
147 assert child.save | 150 assert child.save |
148 child.reload | 151 child.reload |
149 grandchild.reload | 152 grandchild.reload |
150 parent1.reload | 153 parent1.reload |
151 | 154 assert_equal [1, parent1.id, lft1, lft1 + 1], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt] |
152 assert_equal [1, parent1.id, 1, 2], [parent1.project_id, parent1.root_id, parent1.lft, parent1.rgt] | |
153 assert_equal [2, child.id, 1, 4], [child.project_id, child.root_id, child.lft, child.rgt] | 155 assert_equal [2, child.id, 1, 4], [child.project_id, child.root_id, child.lft, child.rgt] |
154 assert_equal [2, child.id, 2, 3], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt] | 156 assert_equal [2, child.id, 2, 3], [grandchild.project_id, grandchild.root_id, grandchild.lft, grandchild.rgt] |
155 end | 157 end |
156 | 158 |
157 def test_moving_an_issue_to_a_descendant_should_not_validate | 159 def test_moving_an_issue_to_a_descendant_should_not_validate |
158 parent1 = Issue.generate! | 160 parent1 = Issue.generate! |
159 parent2 = Issue.generate! | 161 parent2 = Issue.generate! |
160 child = Issue.generate!(:parent_issue_id => parent1.id) | 162 child = parent1.generate_child! |
161 grandchild = Issue.generate!(:parent_issue_id => child.id) | 163 grandchild = child.generate_child! |
162 | 164 |
163 child.reload | 165 child.reload |
164 child.parent_issue_id = grandchild.id | 166 child.parent_issue_id = grandchild.id |
165 assert !child.save | 167 assert !child.save |
166 assert_not_equal [], child.errors[:parent_issue_id] | 168 assert_not_equal [], child.errors[:parent_issue_id] |
200 issue.expects(:update_nested_set_attributes_on_parent_change).once | 202 issue.expects(:update_nested_set_attributes_on_parent_change).once |
201 issue.save! | 203 issue.save! |
202 end | 204 end |
203 | 205 |
204 def test_destroy_should_destroy_children | 206 def test_destroy_should_destroy_children |
207 lft1 = new_issue_lft | |
205 issue1 = Issue.generate! | 208 issue1 = Issue.generate! |
206 issue2 = Issue.generate! | 209 issue2 = Issue.generate! |
207 issue3 = Issue.generate!(:parent_issue_id => issue2.id) | 210 issue3 = issue2.generate_child! |
208 issue4 = Issue.generate!(:parent_issue_id => issue1.id) | 211 issue4 = issue1.generate_child! |
209 | |
210 issue3.init_journal(User.find(2)) | 212 issue3.init_journal(User.find(2)) |
211 issue3.subject = 'child with journal' | 213 issue3.subject = 'child with journal' |
212 issue3.save! | 214 issue3.save! |
213 | |
214 assert_difference 'Issue.count', -2 do | 215 assert_difference 'Issue.count', -2 do |
215 assert_difference 'Journal.count', -1 do | 216 assert_difference 'Journal.count', -1 do |
216 assert_difference 'JournalDetail.count', -1 do | 217 assert_difference 'JournalDetail.count', -1 do |
217 Issue.find(issue2.id).destroy | 218 Issue.find(issue2.id).destroy |
218 end | 219 end |
219 end | 220 end |
220 end | 221 end |
221 | |
222 issue1.reload | 222 issue1.reload |
223 issue4.reload | 223 issue4.reload |
224 assert !Issue.exists?(issue2.id) | 224 assert !Issue.exists?(issue2.id) |
225 assert !Issue.exists?(issue3.id) | 225 assert !Issue.exists?(issue3.id) |
226 assert_equal [issue1.id, 1, 4], [issue1.root_id, issue1.lft, issue1.rgt] | 226 assert_equal [issue1.id, lft1, lft1 + 3], [issue1.root_id, issue1.lft, issue1.rgt] |
227 assert_equal [issue1.id, 2, 3], [issue4.root_id, issue4.lft, issue4.rgt] | 227 assert_equal [issue1.id, lft1 + 1, lft1 + 2], [issue4.root_id, issue4.lft, issue4.rgt] |
228 end | 228 end |
229 | 229 |
230 def test_destroy_child_should_update_parent | 230 def test_destroy_child_should_update_parent |
231 lft1 = new_issue_lft | |
231 issue = Issue.generate! | 232 issue = Issue.generate! |
232 child1 = Issue.generate!(:parent_issue_id => issue.id) | 233 child1 = issue.generate_child! |
233 child2 = Issue.generate!(:parent_issue_id => issue.id) | 234 child2 = issue.generate_child! |
234 | |
235 issue.reload | 235 issue.reload |
236 assert_equal [issue.id, 1, 6], [issue.root_id, issue.lft, issue.rgt] | 236 assert_equal [issue.id, lft1, lft1 + 5], [issue.root_id, issue.lft, issue.rgt] |
237 | |
238 child2.reload.destroy | 237 child2.reload.destroy |
239 | |
240 issue.reload | 238 issue.reload |
241 assert_equal [issue.id, 1, 4], [issue.root_id, issue.lft, issue.rgt] | 239 assert_equal [issue.id, lft1, lft1 + 3], [issue.root_id, issue.lft, issue.rgt] |
242 end | 240 end |
243 | 241 |
244 def test_destroy_parent_issue_updated_during_children_destroy | 242 def test_destroy_parent_issue_updated_during_children_destroy |
245 parent = Issue.generate! | 243 parent = Issue.generate! |
246 Issue.generate!(:start_date => Date.today, :parent_issue_id => parent.id) | 244 parent.generate_child!(:start_date => Date.today) |
247 Issue.generate!(:start_date => 2.days.from_now, :parent_issue_id => parent.id) | 245 parent.generate_child!(:start_date => 2.days.from_now) |
248 | 246 |
249 assert_difference 'Issue.count', -3 do | 247 assert_difference 'Issue.count', -3 do |
250 Issue.find(parent.id).destroy | 248 Issue.find(parent.id).destroy |
251 end | 249 end |
252 end | 250 end |
253 | 251 |
254 def test_destroy_child_issue_with_children | 252 def test_destroy_child_issue_with_children |
255 root = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'root') | 253 root = Issue.generate! |
256 child = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'child', :parent_issue_id => root.id) | 254 child = root.generate_child! |
257 leaf = Issue.create!(:project_id => 1, :author_id => 2, :tracker_id => 1, :subject => 'leaf', :parent_issue_id => child.id) | 255 leaf = child.generate_child! |
258 leaf.init_journal(User.find(2)) | 256 leaf.init_journal(User.find(2)) |
259 leaf.subject = 'leaf with journal' | 257 leaf.subject = 'leaf with journal' |
260 leaf.save! | 258 leaf.save! |
261 | 259 |
262 assert_difference 'Issue.count', -2 do | 260 assert_difference 'Issue.count', -2 do |
270 root = Issue.find(root.id) | 268 root = Issue.find(root.id) |
271 assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})" | 269 assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})" |
272 end | 270 end |
273 | 271 |
274 def test_destroy_issue_with_grand_child | 272 def test_destroy_issue_with_grand_child |
275 parent = Issue.generate! | 273 lft1 = new_issue_lft |
276 issue = Issue.generate!(:parent_issue_id => parent.id) | 274 parent = Issue.generate! |
277 child = Issue.generate!(:parent_issue_id => issue.id) | 275 issue = parent.generate_child! |
278 grandchild1 = Issue.generate!(:parent_issue_id => child.id) | 276 child = issue.generate_child! |
279 grandchild2 = Issue.generate!(:parent_issue_id => child.id) | 277 grandchild1 = child.generate_child! |
280 | 278 grandchild2 = child.generate_child! |
281 assert_difference 'Issue.count', -4 do | 279 assert_difference 'Issue.count', -4 do |
282 Issue.find(issue.id).destroy | 280 Issue.find(issue.id).destroy |
283 parent.reload | 281 parent.reload |
284 assert_equal [1, 2], [parent.lft, parent.rgt] | 282 assert_equal [lft1, lft1 + 1], [parent.lft, parent.rgt] |
285 end | 283 end |
286 end | 284 end |
287 | 285 |
288 def test_parent_priority_should_be_the_highest_child_priority | 286 def test_parent_priority_should_be_the_highest_child_priority |
289 parent = Issue.generate!(:priority => IssuePriority.find_by_name('Normal')) | 287 parent = Issue.generate!(:priority => IssuePriority.find_by_name('Normal')) |
290 # Create children | 288 # Create children |
291 child1 = Issue.generate!(:priority => IssuePriority.find_by_name('High'), :parent_issue_id => parent.id) | 289 child1 = parent.generate_child!(:priority => IssuePriority.find_by_name('High')) |
292 assert_equal 'High', parent.reload.priority.name | 290 assert_equal 'High', parent.reload.priority.name |
293 child2 = Issue.generate!(:priority => IssuePriority.find_by_name('Immediate'), :parent_issue_id => child1.id) | 291 child2 = child1.generate_child!(:priority => IssuePriority.find_by_name('Immediate')) |
294 assert_equal 'Immediate', child1.reload.priority.name | 292 assert_equal 'Immediate', child1.reload.priority.name |
295 assert_equal 'Immediate', parent.reload.priority.name | 293 assert_equal 'Immediate', parent.reload.priority.name |
296 child3 = Issue.generate!(:priority => IssuePriority.find_by_name('Low'), :parent_issue_id => parent.id) | 294 child3 = parent.generate_child!(:priority => IssuePriority.find_by_name('Low')) |
297 assert_equal 'Immediate', parent.reload.priority.name | 295 assert_equal 'Immediate', parent.reload.priority.name |
298 # Destroy a child | 296 # Destroy a child |
299 child1.destroy | 297 child1.destroy |
300 assert_equal 'Low', parent.reload.priority.name | 298 assert_equal 'Low', parent.reload.priority.name |
301 # Update a child | 299 # Update a child |
304 assert_equal 'Normal', parent.reload.priority.name | 302 assert_equal 'Normal', parent.reload.priority.name |
305 end | 303 end |
306 | 304 |
307 def test_parent_dates_should_be_lowest_start_and_highest_due_dates | 305 def test_parent_dates_should_be_lowest_start_and_highest_due_dates |
308 parent = Issue.generate! | 306 parent = Issue.generate! |
309 Issue.generate!(:start_date => '2010-01-25', :due_date => '2010-02-15', :parent_issue_id => parent.id) | 307 parent.generate_child!(:start_date => '2010-01-25', :due_date => '2010-02-15') |
310 Issue.generate!( :due_date => '2010-02-13', :parent_issue_id => parent.id) | 308 parent.generate_child!( :due_date => '2010-02-13') |
311 Issue.generate!(:start_date => '2010-02-01', :due_date => '2010-02-22', :parent_issue_id => parent.id) | 309 parent.generate_child!(:start_date => '2010-02-01', :due_date => '2010-02-22') |
312 parent.reload | 310 parent.reload |
313 assert_equal Date.parse('2010-01-25'), parent.start_date | 311 assert_equal Date.parse('2010-01-25'), parent.start_date |
314 assert_equal Date.parse('2010-02-22'), parent.due_date | 312 assert_equal Date.parse('2010-02-22'), parent.due_date |
315 end | 313 end |
316 | 314 |
317 def test_parent_done_ratio_should_be_average_done_ratio_of_leaves | 315 def test_parent_done_ratio_should_be_average_done_ratio_of_leaves |
318 parent = Issue.generate! | 316 parent = Issue.generate! |
319 Issue.generate!(:done_ratio => 20, :parent_issue_id => parent.id) | 317 parent.generate_child!(:done_ratio => 20) |
320 assert_equal 20, parent.reload.done_ratio | 318 assert_equal 20, parent.reload.done_ratio |
321 Issue.generate!(:done_ratio => 70, :parent_issue_id => parent.id) | 319 parent.generate_child!(:done_ratio => 70) |
322 assert_equal 45, parent.reload.done_ratio | 320 assert_equal 45, parent.reload.done_ratio |
323 | 321 |
324 child = Issue.generate!(:done_ratio => 0, :parent_issue_id => parent.id) | 322 child = parent.generate_child!(:done_ratio => 0) |
325 assert_equal 30, parent.reload.done_ratio | 323 assert_equal 30, parent.reload.done_ratio |
326 | 324 |
327 Issue.generate!(:done_ratio => 30, :parent_issue_id => child.id) | 325 child.generate_child!(:done_ratio => 30) |
328 assert_equal 30, child.reload.done_ratio | 326 assert_equal 30, child.reload.done_ratio |
329 assert_equal 40, parent.reload.done_ratio | 327 assert_equal 40, parent.reload.done_ratio |
330 end | 328 end |
331 | 329 |
332 def test_parent_done_ratio_should_be_weighted_by_estimated_times_if_any | 330 def test_parent_done_ratio_should_be_weighted_by_estimated_times_if_any |
333 parent = Issue.generate! | 331 parent = Issue.generate! |
334 Issue.generate!(:estimated_hours => 10, :done_ratio => 20, :parent_issue_id => parent.id) | 332 parent.generate_child!(:estimated_hours => 10, :done_ratio => 20) |
335 assert_equal 20, parent.reload.done_ratio | 333 assert_equal 20, parent.reload.done_ratio |
336 Issue.generate!(:estimated_hours => 20, :done_ratio => 50, :parent_issue_id => parent.id) | 334 parent.generate_child!(:estimated_hours => 20, :done_ratio => 50) |
337 assert_equal (50 * 20 + 20 * 10) / 30, parent.reload.done_ratio | 335 assert_equal (50 * 20 + 20 * 10) / 30, parent.reload.done_ratio |
338 end | 336 end |
339 | 337 |
340 def test_parent_done_ratio_with_child_estimate_to_0_should_reach_100 | 338 def test_parent_done_ratio_with_child_estimate_to_0_should_reach_100 |
341 parent = Issue.generate! | 339 parent = Issue.generate! |
342 issue1 = Issue.generate!(:parent_issue_id => parent.id) | 340 issue1 = parent.generate_child! |
343 issue2 = Issue.generate!(:parent_issue_id => parent.id, :estimated_hours => 0) | 341 issue2 = parent.generate_child!(:estimated_hours => 0) |
344 assert_equal 0, parent.reload.done_ratio | 342 assert_equal 0, parent.reload.done_ratio |
345 issue1.reload.update_attribute :status_id, 5 | 343 issue1.reload.close! |
346 assert_equal 50, parent.reload.done_ratio | 344 assert_equal 50, parent.reload.done_ratio |
347 issue2.reload.update_attribute :status_id, 5 | 345 issue2.reload.close! |
348 assert_equal 100, parent.reload.done_ratio | 346 assert_equal 100, parent.reload.done_ratio |
349 end | 347 end |
350 | 348 |
351 def test_parent_estimate_should_be_sum_of_leaves | 349 def test_parent_estimate_should_be_sum_of_leaves |
352 parent = Issue.generate! | 350 parent = Issue.generate! |
353 Issue.generate!(:estimated_hours => nil, :parent_issue_id => parent.id) | 351 parent.generate_child!(:estimated_hours => nil) |
354 assert_equal nil, parent.reload.estimated_hours | 352 assert_equal nil, parent.reload.estimated_hours |
355 Issue.generate!(:estimated_hours => 5, :parent_issue_id => parent.id) | 353 parent.generate_child!(:estimated_hours => 5) |
356 assert_equal 5, parent.reload.estimated_hours | 354 assert_equal 5, parent.reload.estimated_hours |
357 Issue.generate!(:estimated_hours => 7, :parent_issue_id => parent.id) | 355 parent.generate_child!(:estimated_hours => 7) |
358 assert_equal 12, parent.reload.estimated_hours | 356 assert_equal 12, parent.reload.estimated_hours |
359 end | 357 end |
360 | 358 |
359 def test_done_ratio_of_parent_with_a_child_without_estimated_time_should_not_exceed_100 | |
360 parent = Issue.generate! | |
361 parent.generate_child!(:estimated_hours => 40) | |
362 parent.generate_child!(:estimated_hours => 40) | |
363 parent.generate_child!(:estimated_hours => 20) | |
364 parent.generate_child! | |
365 parent.reload.children.each(&:close!) | |
366 assert_equal 100, parent.reload.done_ratio | |
367 end | |
368 | |
361 def test_done_ratio_of_parent_with_a_child_with_estimated_time_at_0_should_not_exceed_100 | 369 def test_done_ratio_of_parent_with_a_child_with_estimated_time_at_0_should_not_exceed_100 |
362 parent = Issue.generate! | 370 parent = Issue.generate! |
363 Issue.generate!(:estimated_hours => 40, :parent_issue_id => parent.id) | 371 parent.generate_child!(:estimated_hours => 40) |
364 Issue.generate!(:estimated_hours => 40, :parent_issue_id => parent.id) | 372 parent.generate_child!(:estimated_hours => 40) |
365 Issue.generate!(:estimated_hours => 20, :parent_issue_id => parent.id) | 373 parent.generate_child!(:estimated_hours => 20) |
366 Issue.generate!(:estimated_hours => 0, :parent_issue_id => parent.id) | 374 parent.generate_child!(:estimated_hours => 0) |
367 parent.reload.children.each do |child| | 375 parent.reload.children.each(&:close!) |
368 child.update_attribute :status_id, 5 | |
369 end | |
370 assert_equal 100, parent.reload.done_ratio | 376 assert_equal 100, parent.reload.done_ratio |
371 end | 377 end |
372 | 378 |
373 def test_move_parent_updates_old_parent_attributes | 379 def test_move_parent_updates_old_parent_attributes |
374 first_parent = Issue.generate! | 380 first_parent = Issue.generate! |
375 second_parent = Issue.generate! | 381 second_parent = Issue.generate! |
376 child = Issue.generate!(:estimated_hours => 5, :parent_issue_id => first_parent.id) | 382 child = first_parent.generate_child!(:estimated_hours => 5) |
377 assert_equal 5, first_parent.reload.estimated_hours | 383 assert_equal 5, first_parent.reload.estimated_hours |
378 child.update_attributes(:estimated_hours => 7, :parent_issue_id => second_parent.id) | 384 child.update_attributes(:estimated_hours => 7, :parent_issue_id => second_parent.id) |
379 assert_equal 7, second_parent.reload.estimated_hours | 385 assert_equal 7, second_parent.reload.estimated_hours |
380 assert_nil first_parent.reload.estimated_hours | 386 assert_nil first_parent.reload.estimated_hours |
381 end | 387 end |
382 | 388 |
383 def test_reschuling_a_parent_should_reschedule_subtasks | 389 def test_reschuling_a_parent_should_reschedule_subtasks |
384 parent = Issue.generate! | 390 parent = Issue.generate! |
385 c1 = Issue.generate!(:start_date => '2010-05-12', :due_date => '2010-05-18', :parent_issue_id => parent.id) | 391 c1 = parent.generate_child!(:start_date => '2010-05-12', :due_date => '2010-05-18') |
386 c2 = Issue.generate!(:start_date => '2010-06-03', :due_date => '2010-06-10', :parent_issue_id => parent.id) | 392 c2 = parent.generate_child!(:start_date => '2010-06-03', :due_date => '2010-06-10') |
387 parent.reload | 393 parent.reload |
388 parent.reschedule_on!(Date.parse('2010-06-02')) | 394 parent.reschedule_on!(Date.parse('2010-06-02')) |
389 c1.reload | 395 c1.reload |
390 assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-08')], [c1.start_date, c1.due_date] | 396 assert_equal [Date.parse('2010-06-02'), Date.parse('2010-06-08')], [c1.start_date, c1.due_date] |
391 c2.reload | 397 c2.reload |
395 end | 401 end |
396 | 402 |
397 def test_project_copy_should_copy_issue_tree | 403 def test_project_copy_should_copy_issue_tree |
398 p = Project.create!(:name => 'Tree copy', :identifier => 'tree-copy', :tracker_ids => [1, 2]) | 404 p = Project.create!(:name => 'Tree copy', :identifier => 'tree-copy', :tracker_ids => [1, 2]) |
399 i1 = Issue.generate!(:project => p, :subject => 'i1') | 405 i1 = Issue.generate!(:project => p, :subject => 'i1') |
400 i2 = Issue.generate!(:project => p, :subject => 'i2', :parent_issue_id => i1.id) | 406 i2 = i1.generate_child!(:project => p, :subject => 'i2') |
401 i3 = Issue.generate!(:project => p, :subject => 'i3', :parent_issue_id => i1.id) | 407 i3 = i1.generate_child!(:project => p, :subject => 'i3') |
402 i4 = Issue.generate!(:project => p, :subject => 'i4', :parent_issue_id => i2.id) | 408 i4 = i2.generate_child!(:project => p, :subject => 'i4') |
403 i5 = Issue.generate!(:project => p, :subject => 'i5') | 409 i5 = Issue.generate!(:project => p, :subject => 'i5') |
404 c = Project.new(:name => 'Copy', :identifier => 'copy', :tracker_ids => [1, 2]) | 410 c = Project.new(:name => 'Copy', :identifier => 'copy', :tracker_ids => [1, 2]) |
405 c.copy(p, :only => 'issues') | 411 c.copy(p, :only => 'issues') |
406 c.reload | 412 c.reload |
407 | 413 |