Fixed that improper statuses are proposed when changing status before tracker on the issue form (#10619).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9378 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
6d62ab64e6
commit
ea307619be
|
@ -348,8 +348,6 @@ private
|
||||||
# from the params
|
# from the params
|
||||||
# TODO: Refactor, not everything in here is needed by #edit
|
# TODO: Refactor, not everything in here is needed by #edit
|
||||||
def update_issue_from_params
|
def update_issue_from_params
|
||||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
|
||||||
@priorities = IssuePriority.active
|
|
||||||
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
||||||
@time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
|
@time_entry = TimeEntry.new(:issue => @issue, :project => @issue.project)
|
||||||
@time_entry.attributes = params[:time_entry]
|
@time_entry.attributes = params[:time_entry]
|
||||||
|
@ -371,6 +369,8 @@ private
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@issue.safe_attributes = issue_attributes
|
@issue.safe_attributes = issue_attributes
|
||||||
|
@priorities = IssuePriority.active
|
||||||
|
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -509,17 +509,25 @@ class Issue < ActiveRecord::Base
|
||||||
!relations_to.detect {|ir| ir.relation_type == 'blocks' && !ir.issue_from.closed?}.nil?
|
!relations_to.detect {|ir| ir.relation_type == 'blocks' && !ir.issue_from.closed?}.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns an array of status that user is able to apply
|
# Returns an array of statuses that user is able to apply
|
||||||
def new_statuses_allowed_to(user=User.current, include_default=false)
|
def new_statuses_allowed_to(user=User.current, include_default=false)
|
||||||
statuses = status.find_new_statuses_allowed_to(
|
initial_status = nil
|
||||||
|
if new_record?
|
||||||
|
initial_status = IssueStatus.default
|
||||||
|
elsif status_id_was
|
||||||
|
initial_status = IssueStatus.find_by_id(status_id_was)
|
||||||
|
end
|
||||||
|
initial_status ||= status
|
||||||
|
|
||||||
|
statuses = initial_status.find_new_statuses_allowed_to(
|
||||||
user.admin ? Role.all : user.roles_for_project(project),
|
user.admin ? Role.all : user.roles_for_project(project),
|
||||||
tracker,
|
tracker,
|
||||||
author == user,
|
author == user,
|
||||||
assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
|
assigned_to_id_changed? ? assigned_to_id_was == user.id : assigned_to_id == user.id
|
||||||
)
|
)
|
||||||
statuses << status unless statuses.empty?
|
statuses << initial_status unless statuses.empty?
|
||||||
statuses << IssueStatus.default if include_default
|
statuses << IssueStatus.default if include_default
|
||||||
statuses = statuses.uniq.sort
|
statuses = statuses.compact.uniq.sort
|
||||||
blocked? ? statuses.reject {|s| s.is_closed?} : statuses
|
blocked? ? statuses.reject {|s| s.is_closed?} : statuses
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1363,6 +1363,22 @@ class IssuesControllerTest < ActionController::TestCase
|
||||||
assert_equal 'This is the test_new issue', issue.subject
|
assert_equal 'This is the test_new issue', issue.subject
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_update_new_form_should_propose_transitions_based_on_initial_status
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
Workflow.delete_all
|
||||||
|
Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2)
|
||||||
|
Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 5)
|
||||||
|
Workflow.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 5, :new_status_id => 4)
|
||||||
|
|
||||||
|
xhr :post, :new, :project_id => 1,
|
||||||
|
:issue => {:tracker_id => 1,
|
||||||
|
:status_id => 5,
|
||||||
|
:subject => 'This is an issue'}
|
||||||
|
|
||||||
|
assert_equal 5, assigns(:issue).status_id
|
||||||
|
assert_equal [1,2,5], assigns(:allowed_statuses).map(&:id).sort
|
||||||
|
end
|
||||||
|
|
||||||
def test_post_create
|
def test_post_create
|
||||||
@request.session[:user_id] = 2
|
@request.session[:user_id] = 2
|
||||||
assert_difference 'Issue.count' do
|
assert_difference 'Issue.count' do
|
||||||
|
@ -2171,6 +2187,23 @@ class IssuesControllerTest < ActionController::TestCase
|
||||||
assert_equal 'This is the test_new issue', issue.subject
|
assert_equal 'This is the test_new issue', issue.subject
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_update_edit_form_should_propose_transitions_based_on_initial_status
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
Workflow.delete_all
|
||||||
|
Workflow.create!(:role_id => 1, :tracker_id => 2, :old_status_id => 2, :new_status_id => 1)
|
||||||
|
Workflow.create!(:role_id => 1, :tracker_id => 2, :old_status_id => 2, :new_status_id => 5)
|
||||||
|
Workflow.create!(:role_id => 1, :tracker_id => 2, :old_status_id => 5, :new_status_id => 4)
|
||||||
|
|
||||||
|
xhr :put, :new, :project_id => 1,
|
||||||
|
:id => 2,
|
||||||
|
:issue => {:tracker_id => 2,
|
||||||
|
:status_id => 5,
|
||||||
|
:subject => 'This is an issue'}
|
||||||
|
|
||||||
|
assert_equal 5, assigns(:issue).status_id
|
||||||
|
assert_equal [1,2,5], assigns(:allowed_statuses).map(&:id).sort
|
||||||
|
end
|
||||||
|
|
||||||
def test_update_edit_form_with_project_change
|
def test_update_edit_form_with_project_change
|
||||||
@request.session[:user_id] = 2
|
@request.session[:user_id] = 2
|
||||||
xhr :put, :new, :project_id => 1,
|
xhr :put, :new, :project_id => 1,
|
||||||
|
|
Loading…
Reference in New Issue