Mercurial > hg > soundsoftware-site
diff test/unit/lib/redmine/helpers/gantt_test.rb @ 1517:dffacf8a6908 redmine-2.5
Update to Redmine SVN revision 13367 on 2.5-stable branch
author | Chris Cannam |
---|---|
date | Tue, 09 Sep 2014 09:29:00 +0100 |
parents | e248c7af89ec |
children |
line wrap: on
line diff
--- a/test/unit/lib/redmine/helpers/gantt_test.rb Tue Sep 09 09:28:31 2014 +0100 +++ b/test/unit/lib/redmine/helpers/gantt_test.rb Tue Sep 09 09:29:00 2014 +0100 @@ -29,7 +29,6 @@ :versions, :groups_users - include ApplicationHelper include ProjectsHelper include IssuesHelper include ERB::Util @@ -43,6 +42,7 @@ def today @today ||= Date.today end + private :today # Creates a Gantt chart for a 4 week span def create_gantt(project=Project.generate!, options={}) @@ -54,195 +54,174 @@ @gantt.instance_variable_set('@date_from', options[:date_from] || (today - 14)) @gantt.instance_variable_set('@date_to', options[:date_to] || (today + 14)) end + private :create_gantt - context "#number_of_rows" do - context "with one project" do - should "return the number of rows just for that project" do - p1, p2 = Project.generate!, Project.generate! - i1, i2 = Issue.generate!(:project => p1), Issue.generate!(:project => p2) - create_gantt(p1) - assert_equal 2, @gantt.number_of_rows - end - end - - context "with no project" do - should "return the total number of rows for all the projects, resursively" do - p1, p2 = Project.generate!, Project.generate! - create_gantt(nil) - #fix the return value of #number_of_rows_on_project() to an arbitrary value - #so that we really only test #number_of_rows - @gantt.stubs(:number_of_rows_on_project).returns(7) - #also fix #projects because we want to test #number_of_rows in isolation - @gantt.stubs(:projects).returns(Project.all) - #actual test - assert_equal Project.count*7, @gantt.number_of_rows - end - end - - should "not exceed max_rows option" do - p = Project.generate! - 5.times do - Issue.generate!(:project => p) - end - create_gantt(p) - @gantt.render - assert_equal 6, @gantt.number_of_rows - assert !@gantt.truncated - create_gantt(p, :max_rows => 3) - @gantt.render - assert_equal 3, @gantt.number_of_rows - assert @gantt.truncated - end + test "#number_of_rows with one project should return the number of rows just for that project" do + p1, p2 = Project.generate!, Project.generate! + i1, i2 = Issue.generate!(:project => p1), Issue.generate!(:project => p2) + create_gantt(p1) + assert_equal 2, @gantt.number_of_rows end - context "#number_of_rows_on_project" do - setup do - create_gantt - end - - should "count 0 for an empty the project" do - assert_equal 0, @gantt.number_of_rows_on_project(@project) - end - - should "count the number of issues without a version" do - @project.issues << Issue.generate!(:project => @project, :fixed_version => nil) - assert_equal 2, @gantt.number_of_rows_on_project(@project) - end - - should "count the number of issues on versions, including cross-project" do - version = Version.generate! - @project.versions << version - @project.issues << Issue.generate!(:project => @project, :fixed_version => version) - assert_equal 3, @gantt.number_of_rows_on_project(@project) - end + test "#number_of_rows with no project should return the total number of rows for all the projects, resursively" do + p1, p2 = Project.generate!, Project.generate! + create_gantt(nil) + # fix the return value of #number_of_rows_on_project() to an arbitrary value + # so that we really only test #number_of_rows + @gantt.stubs(:number_of_rows_on_project).returns(7) + # also fix #projects because we want to test #number_of_rows in isolation + @gantt.stubs(:projects).returns(Project.all) + # actual test + assert_equal Project.count*7, @gantt.number_of_rows end - # TODO: more of an integration test - context "#subjects" do - setup do - create_gantt - @project.enabled_module_names = [:issue_tracking] - @tracker = Tracker.generate! - @project.trackers << @tracker - @version = Version.generate!(:effective_date => (today + 7), :sharing => 'none') - @project.versions << @version - @issue = Issue.generate!(:fixed_version => @version, + test "#number_of_rows should not exceed max_rows option" do + p = Project.generate! + 5.times do + Issue.generate!(:project => p) + end + create_gantt(p) + @gantt.render + assert_equal 6, @gantt.number_of_rows + assert !@gantt.truncated + create_gantt(p, :max_rows => 3) + @gantt.render + assert_equal 3, @gantt.number_of_rows + assert @gantt.truncated + end + + test "#number_of_rows_on_project should count 0 for an empty the project" do + create_gantt + assert_equal 0, @gantt.number_of_rows_on_project(@project) + end + + test "#number_of_rows_on_project should count the number of issues without a version" do + create_gantt + @project.issues << Issue.generate!(:project => @project, :fixed_version => nil) + assert_equal 2, @gantt.number_of_rows_on_project(@project) + end + + test "#number_of_rows_on_project should count the number of issues on versions, including cross-project" do + create_gantt + version = Version.generate! + @project.versions << version + @project.issues << Issue.generate!(:project => @project, :fixed_version => version) + assert_equal 3, @gantt.number_of_rows_on_project(@project) + end + + def setup_subjects + create_gantt + @project.enabled_module_names = [:issue_tracking] + @tracker = Tracker.generate! + @project.trackers << @tracker + @version = Version.generate!(:effective_date => (today + 7), :sharing => 'none') + @project.versions << @version + @issue = Issue.generate!(:fixed_version => @version, :subject => "gantt#line_for_project", :tracker => @tracker, :project => @project, :done_ratio => 30, :start_date => (today - 1), :due_date => (today + 7)) - @project.issues << @issue - end + @project.issues << @issue + end + private :setup_subjects - context "project" do - should "be rendered" do - @output_buffer = @gantt.subjects - assert_select "div.project-name a", /#{@project.name}/ - end + # TODO: more of an integration test + test "#subjects project should be rendered" do + setup_subjects + @output_buffer = @gantt.subjects + assert_select "div.project-name a", /#{@project.name}/ + end - should "have an indent of 4" do - @output_buffer = @gantt.subjects - assert_select "div.project-name[style*=left:4px]" - end - end + test "#subjects project should have an indent of 4" do + setup_subjects + @output_buffer = @gantt.subjects + assert_select "div.project-name[style*=left:4px]" + end - context "version" do - should "be rendered" do - @output_buffer = @gantt.subjects - assert_select "div.version-name a", /#{@version.name}/ - end + test "#subjects version should be rendered" do + setup_subjects + @output_buffer = @gantt.subjects + assert_select "div.version-name a", /#{@version.name}/ + end - should "be indented 24 (one level)" do - @output_buffer = @gantt.subjects - assert_select "div.version-name[style*=left:24px]" - end + test "#subjects version should be indented 24 (one level)" do + setup_subjects + @output_buffer = @gantt.subjects + assert_select "div.version-name[style*=left:24px]" + end - context "without assigned issues" do - setup do - @version = Version.generate!(:effective_date => (today + 14), + test "#subjects version without assigned issues should not be rendered" do + setup_subjects + @version = Version.generate!(:effective_date => (today + 14), :sharing => 'none', :name => 'empty_version') - @project.versions << @version - end + @project.versions << @version + @output_buffer = @gantt.subjects + assert_select "div.version-name a", :text => /#{@version.name}/, :count => 0 + end - should "not be rendered" do - @output_buffer = @gantt.subjects - assert_select "div.version-name a", :text => /#{@version.name}/, :count => 0 - end - end - end + test "#subjects issue should be rendered" do + setup_subjects + @output_buffer = @gantt.subjects + assert_select "div.issue-subject", /#{@issue.subject}/ + end - context "issue" do - should "be rendered" do - @output_buffer = @gantt.subjects - assert_select "div.issue-subject", /#{@issue.subject}/ - end + test "#subjects issue should be indented 44 (two levels)" do + setup_subjects + @output_buffer = @gantt.subjects + assert_select "div.issue-subject[style*=left:44px]" + end - should "be indented 44 (two levels)" do - @output_buffer = @gantt.subjects - assert_select "div.issue-subject[style*=left:44px]" - end - - context "assigned to a shared version of another project" do - setup do - p = Project.generate! - p.enabled_module_names = [:issue_tracking] - @shared_version = Version.generate!(:sharing => 'system') - p.versions << @shared_version - # Reassign the issue to a shared version of another project - @issue = Issue.generate!(:fixed_version => @shared_version, + test "#subjects issue assigned to a shared version of another project should be rendered" do + setup_subjects + p = Project.generate! + p.enabled_module_names = [:issue_tracking] + @shared_version = Version.generate!(:sharing => 'system') + p.versions << @shared_version + # Reassign the issue to a shared version of another project + @issue = Issue.generate!(:fixed_version => @shared_version, :subject => "gantt#assigned_to_shared_version", :tracker => @tracker, :project => @project, :done_ratio => 30, :start_date => (today - 1), :due_date => (today + 7)) - @project.issues << @issue - end + @project.issues << @issue + @output_buffer = @gantt.subjects + assert_select "div.issue-subject", /#{@issue.subject}/ + end - should "be rendered" do - @output_buffer = @gantt.subjects - assert_select "div.issue-subject", /#{@issue.subject}/ - end - end - - context "with subtasks" do - setup do - attrs = {:project => @project, :tracker => @tracker, :fixed_version => @version} - @child1 = Issue.generate!( + test "#subjects issue with subtasks should indent subtasks" do + setup_subjects + attrs = {:project => @project, :tracker => @tracker, :fixed_version => @version} + @child1 = Issue.generate!( attrs.merge(:subject => 'child1', :parent_issue_id => @issue.id, :start_date => (today - 1), :due_date => (today + 2)) ) - @child2 = Issue.generate!( + @child2 = Issue.generate!( attrs.merge(:subject => 'child2', :parent_issue_id => @issue.id, :start_date => today, :due_date => (today + 7)) ) - @grandchild = Issue.generate!( + @grandchild = Issue.generate!( attrs.merge(:subject => 'grandchild', :parent_issue_id => @child1.id, :start_date => (today - 1), :due_date => (today + 2)) ) - end - - should "indent subtasks" do - @output_buffer = @gantt.subjects - # parent task 44px - assert_select "div.issue-subject[style*=left:44px]", /#{@issue.subject}/ - # children 64px - assert_select "div.issue-subject[style*=left:64px]", /child1/ - assert_select "div.issue-subject[style*=left:64px]", /child2/ - # grandchild 84px - assert_select "div.issue-subject[style*=left:84px]", /grandchild/, @output_buffer - end - end - end + @output_buffer = @gantt.subjects + # parent task 44px + assert_select "div.issue-subject[style*=left:44px]", /#{@issue.subject}/ + # children 64px + assert_select "div.issue-subject[style*=left:64px]", /child1/ + assert_select "div.issue-subject[style*=left:64px]", /child2/ + # grandchild 84px + assert_select "div.issue-subject[style*=left:84px]", /grandchild/, @output_buffer end context "#lines" do @@ -291,18 +270,6 @@ end end - context "#render_project" do - should "be tested" - end - - context "#render_issues" do - should "be tested" - end - - context "#render_version" do - should "be tested" - end - context "#subject_for_project" do setup do create_gantt @@ -337,8 +304,6 @@ assert_select 'div span.project-overdue' end end - should "test the PNG format" - should "test the PDF format" end context "#line_for_project" do @@ -371,30 +336,6 @@ end end - context "late line" do - should_eventually "start from the starting point on the left" do - @output_buffer = @gantt.line_for_project(@project, {:format => :html, :zoom => 4}) - assert_select "div.project.task_late[style*=left:28px]", true, @output_buffer - end - - should_eventually "be the total delayed width of the project" do - @output_buffer = @gantt.line_for_project(@project, {:format => :html, :zoom => 4}) - assert_select "div.project.task_late[style*=width:30px]", true, @output_buffer - end - end - - context "done line" do - should_eventually "start from the starting point on the left" do - @output_buffer = @gantt.line_for_project(@project, {:format => :html, :zoom => 4}) - assert_select "div.project.task_done[style*=left:28px]", true, @output_buffer - end - - should_eventually "Be the total done width of the project" do - @output_buffer = @gantt.line_for_project(@project, {:format => :html, :zoom => 4}) - assert_select "div.project.task_done[style*=width:18px]", true, @output_buffer - end - end - context "starting marker" do should "not appear if the starting point is off the gantt chart" do # Shift the date range of the chart @@ -434,15 +375,8 @@ @output_buffer = @gantt.line_for_project(@project, {:format => :html, :zoom => 4}) assert_select "div.project.label", /#{@project.name}/ end - - should_eventually "show the percent complete" do - @output_buffer = @gantt.line_for_project(@project, {:format => :html, :zoom => 4}) - assert_select "div.project.label", /0%/ - end end end - should "test the PNG format" - should "test the PDF format" end context "#subject_for_version" do @@ -494,8 +428,6 @@ assert_select 'div span.version-behind-schedule' end end - should "test the PNG format" - should "test the PDF format" end context "#line_for_version" do @@ -598,8 +530,6 @@ end end end - should "test the PNG format" - should "test the PDF format" end context "#subject_for_issue" do @@ -643,8 +573,6 @@ assert_select 'div span.issue-overdue' end end - should "test the PNG format" - should "test the PDF format" end context "#line_for_issue" do @@ -750,16 +678,6 @@ @output_buffer = @gantt.line_for_issue(@issue, {:format => :html, :zoom => 4}) assert_select "div.tooltip", /#{@issue.subject}/ end - should "test the PNG format" - should "test the PDF format" - end - - context "#to_image" do - should "be tested" - end - - context "#to_pdf" do - should "be tested" end def test_sort_issues_no_date