comparison test/unit/lib/redmine/helpers/gantt_test.rb @ 1115:433d4f72a19b redmine-2.2

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