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