To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / test / unit / issue_status_test.rb @ 442:753f1380d6bc

History | View | Annotate | Download (4.65 KB)

1
# redMine - project management software
2
# Copyright (C) 2006-2007  Jean-Philippe Lang
3
#
4
# This program is free software; you can redistribute it and/or
5
# modify it under the terms of the GNU General Public License
6
# as published by the Free Software Foundation; either version 2
7
# of the License, or (at your option) any later version.
8
# 
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
# 
14
# You should have received a copy of the GNU General Public License
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.
17

    
18
require File.expand_path('../../test_helper', __FILE__)
19

    
20
class IssueStatusTest < ActiveSupport::TestCase
21
  fixtures :issue_statuses, :issues, :roles, :trackers
22

    
23
  def test_create
24
    status = IssueStatus.new :name => "Assigned"
25
    assert !status.save
26
    # status name uniqueness
27
    assert_equal 1, status.errors.count
28
    
29
    status.name = "Test Status"
30
    assert status.save
31
    assert !status.is_default
32
  end
33
  
34
  def test_destroy
35
    status = IssueStatus.find(3)
36
    assert_difference 'IssueStatus.count', -1 do
37
      assert status.destroy
38
    end
39
    assert_nil Workflow.first(:conditions => {:old_status_id => status.id})
40
    assert_nil Workflow.first(:conditions => {:new_status_id => status.id})
41
  end
42

    
43
  def test_destroy_status_in_use
44
    # Status assigned to an Issue
45
    status = Issue.find(1).status
46
    assert_raise(RuntimeError, "Can't delete status") { status.destroy }
47
  end
48

    
49
  def test_default
50
    status = IssueStatus.default
51
    assert_kind_of IssueStatus, status
52
  end
53
  
54
  def test_change_default
55
    status = IssueStatus.find(2)
56
    assert !status.is_default
57
    status.is_default = true
58
    assert status.save
59
    status.reload
60
    
61
    assert_equal status, IssueStatus.default
62
    assert !IssueStatus.find(1).is_default
63
  end
64
  
65
  def test_reorder_should_not_clear_default_status
66
    status = IssueStatus.default
67
    status.move_to_bottom
68
    status.reload
69
    assert status.is_default?
70
  end
71
  
72
  def test_new_statuses_allowed_to
73
    Workflow.delete_all
74
    
75
    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2, :author => false, :assignee => false)
76
    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3, :author => true, :assignee => false)
77
    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 4, :author => false, :assignee => true)
78
    Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5, :author => true, :assignee => true)
79
    status = IssueStatus.find(1)
80
    role = Role.find(1)
81
    tracker = Tracker.find(1)
82

    
83
    assert_equal [2], status.new_statuses_allowed_to([role], tracker, false, false).map(&:id)
84
    assert_equal [2], status.find_new_statuses_allowed_to([role], tracker, false, false).map(&:id)
85
    
86
    assert_equal [2, 3], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id)
87
    assert_equal [2, 3], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id)
88
    
89
    assert_equal [2, 4], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id)
90
    assert_equal [2, 4], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id)
91
    
92
    assert_equal [2, 3, 4, 5], status.new_statuses_allowed_to([role], tracker, true, true).map(&:id)
93
    assert_equal [2, 3, 4, 5], status.find_new_statuses_allowed_to([role], tracker, true, true).map(&:id)
94
  end
95

    
96
  context "#update_done_ratios" do
97
    setup do
98
      @issue = Issue.find(1)
99
      @issue_status = IssueStatus.find(1)
100
      @issue_status.update_attribute(:default_done_ratio, 50)
101
    end
102
    
103
    context "with Setting.issue_done_ratio using the issue_field" do
104
      setup do
105
        Setting.issue_done_ratio = 'issue_field'
106
      end
107
      
108
      should "change nothing" do
109
        IssueStatus.update_issue_done_ratios
110

    
111
        assert_equal 0, Issue.count(:conditions => {:done_ratio => 50})
112
      end
113
    end
114

    
115
    context "with Setting.issue_done_ratio using the issue_status" do
116
      setup do
117
        Setting.issue_done_ratio = 'issue_status'
118
      end
119
      
120
      should "update all of the issue's done_ratios to match their Issue Status" do
121
        IssueStatus.update_issue_done_ratios
122
        
123
        issues = Issue.find([1,3,4,5,6,7,9,10])
124
        issues.each do |issue|
125
          assert_equal @issue_status, issue.status
126
          assert_equal 50, issue.read_attribute(:done_ratio)
127
        end
128
      end
129
    end
130
  end
131
end