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