From: Jean-Philippe Lang Date: Wed, 8 Mar 2017 21:22:08 +0000 (+0000) Subject: Adding a subtask should default to a tracker without disabled parent field (#16260). X-Git-Tag: 3.4.0~256 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ff6d8c6f5c2eac2cddec200f3c3b5d2c1366d349;p=redmine.git Adding a subtask should default to a tracker without disabled parent field (#16260). git-svn-id: http://svn.redmine.org/redmine/trunk@16383 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/issue.rb b/app/models/issue.rb index d96f61e15..a8b68ccbb 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -530,10 +530,17 @@ class Issue < ActiveRecord::Base self.tracker_id = t end end - if project + if project && tracker.nil? # Set a default tracker to accept custom field values # even if tracker is not specified - self.tracker ||= allowed_target_trackers(user).first + allowed_trackers = allowed_target_trackers(user) + + if attrs['parent_issue_id'].present? + # If parent_issue_id is present, the first tracker for which this field + # is not disabled is chosen as default + self.tracker = allowed_trackers.detect {|t| t.core_fields.include?('parent_issue_id')} + end + self.tracker ||= allowed_trackers.first end statuses_allowed = new_statuses_allowed_to(user) diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index f120baba2..24ec49a70 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -1920,6 +1920,32 @@ class IssuesControllerTest < Redmine::ControllerTest end end + def test_new_should_default_to_first_tracker + @request.session[:user_id] = 2 + + get :new, :project_id => 1 + assert_response :success + assert_select 'select[name=?]', 'issue[tracker_id]' do + assert_select 'option', 3 + assert_select 'option[value="1"][selected=selected]' + end + end + + def test_new_with_parent_issue_id_should_default_to_first_tracker_without_disabled_parent_field + tracker = Tracker.find(1) + tracker.core_fields -= ['parent_issue_id'] + tracker.save! + @request.session[:user_id] = 2 + + get :new, :project_id => 1, :issue => {:parent_issue_id => 1} + assert_response :success + assert_select 'select[name=?]', 'issue[tracker_id]' do + assert_select 'option', 2 + assert_select 'option[value="2"][selected=selected]' + assert_select 'option[value="1"]', 0 + end + end + def test_new_without_allowed_trackers_should_respond_with_403 role = Role.find(1) role.set_permission_trackers 'add_issues', []