##// END OF EJS Templates
remove trailing white-spaces from test/unit/lib/redmine/helpers/gantt_test.rb....
Toshi MARUYAMA -
r6668:98e7d125f160
parent child
Show More
@@ -1,779 +1,779
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 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 Redmine::Helpers::GanttTest < ActiveSupport::TestCase
21 21 # Utility methods and classes so assert_select can be used.
22 22 class GanttViewTest < ActionView::Base
23 23 include ActionView::Helpers::UrlHelper
24 24 include ActionView::Helpers::TextHelper
25 25 include ActionController::UrlWriter
26 26 include ApplicationHelper
27 27 include ProjectsHelper
28 28 include IssuesHelper
29
29
30 30 def self.default_url_options
31 31 {:only_path => true }
32 32 end
33 33
34 34 end
35 35
36 36 include ActionController::Assertions::SelectorAssertions
37 37
38 38 def setup
39 39 @response = ActionController::TestResponse.new
40 40 # Fixtures
41 41 ProjectCustomField.delete_all
42 42 Project.destroy_all
43 43
44 44 User.current = User.find(1)
45 45 end
46 46
47 47 def build_view
48 48 @view = GanttViewTest.new
49 49 end
50 50
51 51 def html_document
52 52 HTML::Document.new(@response.body)
53 53 end
54 54
55 55 # Creates a Gantt chart for a 4 week span
56 56 def create_gantt(project=Project.generate!, options={})
57 57 @project = project
58 58 @gantt = Redmine::Helpers::Gantt.new(options)
59 59 @gantt.project = @project
60 60 @gantt.query = Query.generate_default!(:project => @project)
61 61 @gantt.view = build_view
62 62 @gantt.instance_variable_set('@date_from', options[:date_from] || 2.weeks.ago.to_date)
63 63 @gantt.instance_variable_set('@date_to', options[:date_to] || 2.weeks.from_now.to_date)
64 64 end
65 65
66 66 context "#number_of_rows" do
67 67
68 68 context "with one project" do
69 69 should "return the number of rows just for that project"
70 70 end
71 71
72 72 context "with no project" do
73 73 should "return the total number of rows for all the projects, resursively"
74 74 end
75 75
76 76 should "not exceed max_rows option" do
77 77 p = Project.generate!
78 78 5.times do
79 79 Issue.generate_for_project!(p)
80 80 end
81
81
82 82 create_gantt(p)
83 83 @gantt.render
84 84 assert_equal 6, @gantt.number_of_rows
85 85 assert !@gantt.truncated
86 86
87 87 create_gantt(p, :max_rows => 3)
88 88 @gantt.render
89 89 assert_equal 3, @gantt.number_of_rows
90 90 assert @gantt.truncated
91 91 end
92 92 end
93 93
94 94 context "#number_of_rows_on_project" do
95 95 setup do
96 96 create_gantt
97 97 end
98 98
99 99 should "count 0 for an empty the project" do
100 100 assert_equal 0, @gantt.number_of_rows_on_project(@project)
101 101 end
102 102
103 103 should "count the number of issues without a version" do
104 104 @project.issues << Issue.generate_for_project!(@project, :fixed_version => nil)
105 105 assert_equal 2, @gantt.number_of_rows_on_project(@project)
106 106 end
107 107
108 108 should "count the number of issues on versions, including cross-project" do
109 109 version = Version.generate!
110 110 @project.versions << version
111 111 @project.issues << Issue.generate_for_project!(@project, :fixed_version => version)
112
112
113 113 assert_equal 3, @gantt.number_of_rows_on_project(@project)
114 114 end
115 115 end
116 116
117 117 # TODO: more of an integration test
118 118 context "#subjects" do
119 119 setup do
120 120 create_gantt
121 121 @project.enabled_module_names = [:issue_tracking]
122 122 @tracker = Tracker.generate!
123 123 @project.trackers << @tracker
124 124 @version = Version.generate!(:effective_date => 1.week.from_now.to_date, :sharing => 'none')
125 125 @project.versions << @version
126 126
127 127 @issue = Issue.generate!(:fixed_version => @version,
128 128 :subject => "gantt#line_for_project",
129 129 :tracker => @tracker,
130 130 :project => @project,
131 131 :done_ratio => 30,
132 132 :start_date => Date.yesterday,
133 133 :due_date => 1.week.from_now.to_date)
134 @project.issues << @issue
134 @project.issues << @issue
135 135 end
136
136
137 137 context "project" do
138 138 should "be rendered" do
139 139 @response.body = @gantt.subjects
140 140 assert_select "div.project-name a", /#{@project.name}/
141 141 end
142
142
143 143 should "have an indent of 4" do
144 144 @response.body = @gantt.subjects
145 145 assert_select "div.project-name[style*=left:4px]"
146 146 end
147 147 end
148
148
149 149 context "version" do
150 150 should "be rendered" do
151 151 @response.body = @gantt.subjects
152 152 assert_select "div.version-name a", /#{@version.name}/
153 153 end
154
154
155 155 should "be indented 24 (one level)" do
156 156 @response.body = @gantt.subjects
157 157 assert_select "div.version-name[style*=left:24px]"
158 158 end
159
159
160 160 context "without assigned issues" do
161 161 setup do
162 162 @version = Version.generate!(:effective_date => 2.week.from_now.to_date, :sharing => 'none', :name => 'empty_version')
163 163 @project.versions << @version
164 164 end
165
165
166 166 should "not be rendered" do
167 167 @response.body = @gantt.subjects
168 168 assert_select "div.version-name a", :text => /#{@version.name}/, :count => 0
169 169 end
170 170 end
171 171 end
172
172
173 173 context "issue" do
174 174 should "be rendered" do
175 175 @response.body = @gantt.subjects
176 176 assert_select "div.issue-subject", /#{@issue.subject}/
177 177 end
178
178
179 179 should "be indented 44 (two levels)" do
180 180 @response.body = @gantt.subjects
181 181 assert_select "div.issue-subject[style*=left:44px]"
182 182 end
183
183
184 184 context "assigned to a shared version of another project" do
185 185 setup do
186 186 p = Project.generate!
187 187 p.trackers << @tracker
188 188 p.enabled_module_names = [:issue_tracking]
189 189 @shared_version = Version.generate!(:sharing => 'system')
190 190 p.versions << @shared_version
191 191 # Reassign the issue to a shared version of another project
192
192
193 193 @issue = Issue.generate!(:fixed_version => @shared_version,
194 194 :subject => "gantt#assigned_to_shared_version",
195 195 :tracker => @tracker,
196 196 :project => @project,
197 197 :done_ratio => 30,
198 198 :start_date => Date.yesterday,
199 199 :due_date => 1.week.from_now.to_date)
200 200 @project.issues << @issue
201 201 end
202
202
203 203 should "be rendered" do
204 204 @response.body = @gantt.subjects
205 205 assert_select "div.issue-subject", /#{@issue.subject}/
206 206 end
207 207 end
208
208
209 209 context "with subtasks" do
210 210 setup do
211 211 attrs = {:project => @project, :tracker => @tracker, :fixed_version => @version}
212 212 @child1 = Issue.generate!(attrs.merge(:subject => 'child1', :parent_issue_id => @issue.id, :start_date => Date.yesterday, :due_date => 2.day.from_now.to_date))
213 213 @child2 = Issue.generate!(attrs.merge(:subject => 'child2', :parent_issue_id => @issue.id, :start_date => Date.today, :due_date => 1.week.from_now.to_date))
214 214 @grandchild = Issue.generate!(attrs.merge(:subject => 'grandchild', :parent_issue_id => @child1.id, :start_date => Date.yesterday, :due_date => 2.day.from_now.to_date))
215 215 end
216
216
217 217 should "indent subtasks" do
218 218 @response.body = @gantt.subjects
219 219 # parent task 44px
220 220 assert_select "div.issue-subject[style*=left:44px]", /#{@issue.subject}/
221 221 # children 64px
222 222 assert_select "div.issue-subject[style*=left:64px]", /child1/
223 223 assert_select "div.issue-subject[style*=left:64px]", /child2/
224 224 # grandchild 84px
225 225 assert_select "div.issue-subject[style*=left:84px]", /grandchild/, @response.body
226 226 end
227 227 end
228 228 end
229 229 end
230 230
231 231 context "#lines" do
232 232 setup do
233 233 create_gantt
234 234 @project.enabled_module_names = [:issue_tracking]
235 235 @tracker = Tracker.generate!
236 236 @project.trackers << @tracker
237 237 @version = Version.generate!(:effective_date => 1.week.from_now.to_date)
238 238 @project.versions << @version
239 239 @issue = Issue.generate!(:fixed_version => @version,
240 240 :subject => "gantt#line_for_project",
241 241 :tracker => @tracker,
242 242 :project => @project,
243 243 :done_ratio => 30,
244 244 :start_date => Date.yesterday,
245 245 :due_date => 1.week.from_now.to_date)
246 246 @project.issues << @issue
247 247
248 248 @response.body = @gantt.lines
249 249 end
250 250
251 251 context "project" do
252 252 should "be rendered" do
253 253 assert_select "div.project.task_todo"
254 254 assert_select "div.project.starting"
255 255 assert_select "div.project.ending"
256 256 assert_select "div.label.project", /#{@project.name}/
257 257 end
258 258 end
259 259
260 260 context "version" do
261 261 should "be rendered" do
262 262 assert_select "div.version.task_todo"
263 263 assert_select "div.version.starting"
264 264 assert_select "div.version.ending"
265 265 assert_select "div.label.version", /#{@version.name}/
266 266 end
267 267 end
268 268
269 269 context "issue" do
270 270 should "be rendered" do
271 271 assert_select "div.task_todo"
272 272 assert_select "div.task.label", /#{@issue.done_ratio}/
273 273 assert_select "div.tooltip", /#{@issue.subject}/
274 274 end
275 275 end
276 276 end
277 277
278 278 context "#render_project" do
279 279 should "be tested"
280 280 end
281 281
282 282 context "#render_issues" do
283 283 should "be tested"
284 284 end
285 285
286 286 context "#render_version" do
287 287 should "be tested"
288 288 end
289 289
290 290 context "#subject_for_project" do
291 291 setup do
292 292 create_gantt
293 293 end
294
294
295 295 context ":html format" do
296 296 should "add an absolute positioned div" do
297 297 @response.body = @gantt.subject_for_project(@project, {:format => :html})
298 298 assert_select "div[style*=absolute]"
299 299 end
300 300
301 301 should "use the indent option to move the div to the right" do
302 302 @response.body = @gantt.subject_for_project(@project, {:format => :html, :indent => 40})
303 303 assert_select "div[style*=left:40]"
304 304 end
305 305
306 306 should "include the project name" do
307 307 @response.body = @gantt.subject_for_project(@project, {:format => :html})
308 308 assert_select 'div', :text => /#{@project.name}/
309 309 end
310 310
311 311 should "include a link to the project" do
312 312 @response.body = @gantt.subject_for_project(@project, {:format => :html})
313 313 assert_select 'a[href=?]', "/projects/#{@project.identifier}", :text => /#{@project.name}/
314 314 end
315 315
316 316 should "style overdue projects" do
317 317 @project.enabled_module_names = [:issue_tracking]
318 318 @project.versions << Version.generate!(:effective_date => Date.yesterday)
319 319
320 320 assert @project.overdue?, "Need an overdue project for this test"
321 321 @response.body = @gantt.subject_for_project(@project, {:format => :html})
322 322
323 323 assert_select 'div span.project-overdue'
324 324 end
325 325
326 326
327 327 end
328 328
329 329 should "test the PNG format"
330 330 should "test the PDF format"
331 331 end
332 332
333 333 context "#line_for_project" do
334 334 setup do
335 335 create_gantt
336 336 @project.enabled_module_names = [:issue_tracking]
337 337 @tracker = Tracker.generate!
338 338 @project.trackers << @tracker
339 339 @version = Version.generate!(:effective_date => Date.yesterday)
340 340 @project.versions << @version
341 341
342 342 @project.issues << Issue.generate!(:fixed_version => @version,
343 343 :subject => "gantt#line_for_project",
344 344 :tracker => @tracker,
345 345 :project => @project,
346 346 :done_ratio => 30,
347 347 :start_date => 1.week.ago.to_date,
348 348 :due_date => 1.week.from_now.to_date)
349 349 end
350 350
351 351 context ":html format" do
352 352 context "todo line" do
353 353 should "start from the starting point on the left" do
354 354 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
355 355 assert_select "div.project.task_todo[style*=left:28px]", true, @response.body
356 356 end
357 357
358 358 should "be the total width of the project" do
359 359 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
360 360 assert_select "div.project.task_todo[style*=width:58px]", true, @response.body
361 361 end
362 362
363 363 end
364 364
365 365 context "late line" do
366 366 should_eventually "start from the starting point on the left" do
367 367 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
368 368 assert_select "div.project.task_late[style*=left:28px]", true, @response.body
369 369 end
370 370
371 371 should_eventually "be the total delayed width of the project" do
372 372 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
373 373 assert_select "div.project.task_late[style*=width:30px]", true, @response.body
374 374 end
375 375 end
376 376
377 377 context "done line" do
378 378 should_eventually "start from the starting point on the left" do
379 379 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
380 380 assert_select "div.project.task_done[style*=left:28px]", true, @response.body
381 381 end
382 382
383 383 should_eventually "Be the total done width of the project" do
384 384 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
385 385 assert_select "div.project.task_done[style*=width:18px]", true, @response.body
386 386 end
387 387 end
388 388
389 389 context "starting marker" do
390 390 should "not appear if the starting point is off the gantt chart" do
391 391 # Shift the date range of the chart
392 392 @gantt.instance_variable_set('@date_from', Date.today)
393 393
394 394 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
395 395 assert_select "div.project.starting", false, @response.body
396 396 end
397 397
398 398 should "appear at the starting point" do
399 399 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
400 400 assert_select "div.project.starting[style*=left:28px]", true, @response.body
401 401 end
402 402 end
403 403
404 404 context "ending marker" do
405 405 should "not appear if the starting point is off the gantt chart" do
406 406 # Shift the date range of the chart
407 407 @gantt.instance_variable_set('@date_to', 2.weeks.ago.to_date)
408 408
409 409 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
410 410 assert_select "div.project.ending", false, @response.body
411 411
412 412 end
413 413
414 414 should "appear at the end of the date range" do
415 415 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
416 416 assert_select "div.project.ending[style*=left:88px]", true, @response.body
417 417 end
418 418 end
419
419
420 420 context "status content" do
421 421 should "appear at the far left, even if it's far in the past" do
422 422 @gantt.instance_variable_set('@date_to', 2.weeks.ago.to_date)
423 423
424 424 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
425 425 assert_select "div.project.label", /#{@project.name}/
426 426 end
427 427
428 428 should "show the project name" do
429 429 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
430 430 assert_select "div.project.label", /#{@project.name}/
431 431 end
432 432
433 433 should_eventually "show the percent complete" do
434 434 @response.body = @gantt.line_for_project(@project, {:format => :html, :zoom => 4})
435 435 assert_select "div.project.label", /0%/
436 436 end
437 437 end
438 438 end
439 439
440 440 should "test the PNG format"
441 441 should "test the PDF format"
442 442 end
443 443
444 444 context "#subject_for_version" do
445 445 setup do
446 446 create_gantt
447 447 @project.enabled_module_names = [:issue_tracking]
448 448 @tracker = Tracker.generate!
449 449 @project.trackers << @tracker
450 450 @version = Version.generate!(:effective_date => Date.yesterday)
451 451 @project.versions << @version
452 452
453 453 @project.issues << Issue.generate!(:fixed_version => @version,
454 454 :subject => "gantt#subject_for_version",
455 455 :tracker => @tracker,
456 456 :project => @project,
457 457 :start_date => Date.today)
458 458
459 459 end
460 460
461 461 context ":html format" do
462 462 should "add an absolute positioned div" do
463 463 @response.body = @gantt.subject_for_version(@version, {:format => :html})
464 464 assert_select "div[style*=absolute]"
465 465 end
466 466
467 467 should "use the indent option to move the div to the right" do
468 468 @response.body = @gantt.subject_for_version(@version, {:format => :html, :indent => 40})
469 469 assert_select "div[style*=left:40]"
470 470 end
471 471
472 472 should "include the version name" do
473 473 @response.body = @gantt.subject_for_version(@version, {:format => :html})
474 474 assert_select 'div', :text => /#{@version.name}/
475 475 end
476 476
477 477 should "include a link to the version" do
478 478 @response.body = @gantt.subject_for_version(@version, {:format => :html})
479 479 assert_select 'a[href=?]', Regexp.escape("/versions/#{@version.to_param}"), :text => /#{@version.name}/
480 480 end
481 481
482 482 should "style late versions" do
483 483 assert @version.overdue?, "Need an overdue version for this test"
484 484 @response.body = @gantt.subject_for_version(@version, {:format => :html})
485 485
486 486 assert_select 'div span.version-behind-schedule'
487 487 end
488 488
489 489 should "style behind schedule versions" do
490 490 assert @version.behind_schedule?, "Need a behind schedule version for this test"
491 491 @response.body = @gantt.subject_for_version(@version, {:format => :html})
492 492
493 493 assert_select 'div span.version-behind-schedule'
494 494 end
495 495 end
496 496 should "test the PNG format"
497 497 should "test the PDF format"
498 498 end
499 499
500 500 context "#line_for_version" do
501 501 setup do
502 502 create_gantt
503 503 @project.enabled_module_names = [:issue_tracking]
504 504 @tracker = Tracker.generate!
505 505 @project.trackers << @tracker
506 506 @version = Version.generate!(:effective_date => 1.week.from_now.to_date)
507 507 @project.versions << @version
508 508
509 509 @project.issues << Issue.generate!(:fixed_version => @version,
510 510 :subject => "gantt#line_for_project",
511 511 :tracker => @tracker,
512 512 :project => @project,
513 513 :done_ratio => 30,
514 514 :start_date => 1.week.ago.to_date,
515 515 :due_date => 1.week.from_now.to_date)
516 516 end
517 517
518 518 context ":html format" do
519 519 context "todo line" do
520 520 should "start from the starting point on the left" do
521 521 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
522 522 assert_select "div.version.task_todo[style*=left:28px]", true, @response.body
523 523 end
524 524
525 525 should "be the total width of the version" do
526 526 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
527 527 assert_select "div.version.task_todo[style*=width:58px]", true, @response.body
528 528 end
529 529
530 530 end
531 531
532 532 context "late line" do
533 533 should "start from the starting point on the left" do
534 534 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
535 535 assert_select "div.version.task_late[style*=left:28px]", true, @response.body
536 536 end
537 537
538 538 should "be the total delayed width of the version" do
539 539 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
540 540 assert_select "div.version.task_late[style*=width:30px]", true, @response.body
541 541 end
542 542 end
543 543
544 544 context "done line" do
545 545 should "start from the starting point on the left" do
546 546 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
547 547 assert_select "div.version.task_done[style*=left:28px]", true, @response.body
548 548 end
549 549
550 550 should "be the total done width of the version" do
551 551 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
552 552 assert_select "div.version.task_done[style*=width:16px]", true, @response.body
553 553 end
554 554 end
555 555
556 556 context "starting marker" do
557 557 should "not appear if the starting point is off the gantt chart" do
558 558 # Shift the date range of the chart
559 559 @gantt.instance_variable_set('@date_from', Date.today)
560 560
561 561 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
562 562 assert_select "div.version.starting", false
563 563 end
564 564
565 565 should "appear at the starting point" do
566 566 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
567 567 assert_select "div.version.starting[style*=left:28px]", true, @response.body
568 568 end
569 569 end
570 570
571 571 context "ending marker" do
572 572 should "not appear if the starting point is off the gantt chart" do
573 573 # Shift the date range of the chart
574 574 @gantt.instance_variable_set('@date_to', 2.weeks.ago.to_date)
575 575
576 576 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
577 577 assert_select "div.version.ending", false
578 578
579 579 end
580 580
581 581 should "appear at the end of the date range" do
582 582 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
583 583 assert_select "div.version.ending[style*=left:88px]", true, @response.body
584 584 end
585 585 end
586
586
587 587 context "status content" do
588 588 should "appear at the far left, even if it's far in the past" do
589 589 @gantt.instance_variable_set('@date_to', 2.weeks.ago.to_date)
590 590
591 591 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
592 592 assert_select "div.version.label", /#{@version.name}/
593 593 end
594 594
595 595 should "show the version name" do
596 596 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
597 597 assert_select "div.version.label", /#{@version.name}/
598 598 end
599 599
600 600 should "show the percent complete" do
601 601 @response.body = @gantt.line_for_version(@version, {:format => :html, :zoom => 4})
602 602 assert_select "div.version.label", /30%/
603 603 end
604 604 end
605 605 end
606 606
607 607 should "test the PNG format"
608 608 should "test the PDF format"
609 609 end
610 610
611 611 context "#subject_for_issue" do
612 612 setup do
613 613 create_gantt
614 614 @project.enabled_module_names = [:issue_tracking]
615 615 @tracker = Tracker.generate!
616 616 @project.trackers << @tracker
617 617
618 618 @issue = Issue.generate!(:subject => "gantt#subject_for_issue",
619 619 :tracker => @tracker,
620 620 :project => @project,
621 621 :start_date => 3.days.ago.to_date,
622 622 :due_date => Date.yesterday)
623 623 @project.issues << @issue
624 624
625 625 end
626 626
627 627 context ":html format" do
628 628 should "add an absolute positioned div" do
629 629 @response.body = @gantt.subject_for_issue(@issue, {:format => :html})
630 630 assert_select "div[style*=absolute]"
631 631 end
632 632
633 633 should "use the indent option to move the div to the right" do
634 634 @response.body = @gantt.subject_for_issue(@issue, {:format => :html, :indent => 40})
635 635 assert_select "div[style*=left:40]"
636 636 end
637 637
638 638 should "include the issue subject" do
639 639 @response.body = @gantt.subject_for_issue(@issue, {:format => :html})
640 640 assert_select 'div', :text => /#{@issue.subject}/
641 641 end
642 642
643 643 should "include a link to the issue" do
644 644 @response.body = @gantt.subject_for_issue(@issue, {:format => :html})
645 645 assert_select 'a[href=?]', Regexp.escape("/issues/#{@issue.to_param}"), :text => /#{@tracker.name} ##{@issue.id}/
646 646 end
647 647
648 648 should "style overdue issues" do
649 649 assert @issue.overdue?, "Need an overdue issue for this test"
650 650 @response.body = @gantt.subject_for_issue(@issue, {:format => :html})
651 651
652 652 assert_select 'div span.issue-overdue'
653 653 end
654 654
655 655 end
656 656 should "test the PNG format"
657 657 should "test the PDF format"
658 658 end
659 659
660 660 context "#line_for_issue" do
661 661 setup do
662 662 create_gantt
663 663 @project.enabled_module_names = [:issue_tracking]
664 664 @tracker = Tracker.generate!
665 665 @project.trackers << @tracker
666 666 @version = Version.generate!(:effective_date => 1.week.from_now.to_date)
667 667 @project.versions << @version
668 668 @issue = Issue.generate!(:fixed_version => @version,
669 669 :subject => "gantt#line_for_project",
670 670 :tracker => @tracker,
671 671 :project => @project,
672 672 :done_ratio => 30,
673 673 :start_date => 1.week.ago.to_date,
674 674 :due_date => 1.week.from_now.to_date)
675 675 @project.issues << @issue
676 676 end
677 677
678 678 context ":html format" do
679 679 context "todo line" do
680 680 should "start from the starting point on the left" do
681 681 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
682 682 assert_select "div.task_todo[style*=left:28px]", true, @response.body
683 683 end
684 684
685 685 should "be the total width of the issue" do
686 686 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
687 687 assert_select "div.task_todo[style*=width:58px]", true, @response.body
688 688 end
689 689
690 690 end
691 691
692 692 context "late line" do
693 693 should "start from the starting point on the left" do
694 694 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
695 695 assert_select "div.task_late[style*=left:28px]", true, @response.body
696 696 end
697 697
698 698 should "be the total delayed width of the issue" do
699 699 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
700 700 assert_select "div.task_late[style*=width:30px]", true, @response.body
701 701 end
702 702 end
703 703
704 704 context "done line" do
705 705 should "start from the starting point on the left" do
706 706 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
707 707 assert_select "div.task_done[style*=left:28px]", true, @response.body
708 708 end
709 709
710 710 should "be the total done width of the issue" do
711 711 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
712 712 # 15 days * 4 px * 30% - 2 px for borders = 16 px
713 713 assert_select "div.task_done[style*=width:16px]", true, @response.body
714 714 end
715 715
716 716 should "not be the total done width if the chart starts after issue start date" do
717 717 create_gantt(@project, :date_from => 5.days.ago.to_date)
718
718
719 719 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
720 720 assert_select "div.task_done[style*=left:0px]", true, @response.body
721 721 assert_select "div.task_done[style*=width:8px]", true, @response.body
722 722 end
723
723
724 724 context "for completed issue" do
725 725 setup do
726 726 @issue.done_ratio = 100
727 727 end
728 728
729 729 should "be the total width of the issue" do
730 730 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
731 731 assert_select "div.task_done[style*=width:58px]", true, @response.body
732 732 end
733
733
734 734 should "be the total width of the issue with due_date=start_date" do
735 735 @issue.due_date = @issue.start_date
736 736 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
737 737 assert_select "div.task_done[style*=width:2px]", true, @response.body
738 738 end
739 739 end
740 740 end
741 741
742 742 context "status content" do
743 743 should "appear at the far left, even if it's far in the past" do
744 744 @gantt.instance_variable_set('@date_to', 2.weeks.ago.to_date)
745 745
746 746 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
747 747 assert_select "div.task.label", true, @response.body
748 748 end
749 749
750 750 should "show the issue status" do
751 751 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
752 752 assert_select "div.task.label", /#{@issue.status.name}/
753 753 end
754 754
755 755 should "show the percent complete" do
756 756 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
757 757 assert_select "div.task.label", /30%/
758 758 end
759 759 end
760 760 end
761 761
762 762 should "have an issue tooltip" do
763 763 @response.body = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4})
764 764 assert_select "div.tooltip", /#{@issue.subject}/
765 765 end
766 766
767 767 should "test the PNG format"
768 768 should "test the PDF format"
769 769 end
770 770
771 771 context "#to_image" do
772 772 should "be tested"
773 773 end
774 774
775 775 context "#to_pdf" do
776 776 should "be tested"
777 777 end
778
778
779 779 end
General Comments 0
You need to be logged in to leave comments. Login now