From 8e4ca34c3516445d6dd4b8ed59f59cb9bb3248c6 Mon Sep 17 00:00:00 2001 From: Jens Kraemer Date: Wed, 30 Mar 2016 14:05:35 +0800 Subject: [PATCH] Do not propose trackers which disallow parent_issue_id for new child issues - also removes the tracker_id from the "Add new child issue" link in case it doesn't allow parent_issue_id --- app/helpers/issues_helper.rb | 2 +- app/views/issues/_form.html.erb | 2 +- test/functional/issues_controller_test.rb | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 0d6f699..b505765 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -162,9 +162,9 @@ module IssuesHelper # Returns a link for adding a new subtask to the given issue def link_to_new_subtask(issue) attrs = { - :tracker_id => issue.tracker, :parent_issue_id => issue } + attrs[:tracker_id] = issue.tracker unless issue.tracker.disabled_core_fields.include?('parent_issue_id') link_to(l(:button_add), new_project_issue_path(issue.project, :issue => attrs)) end diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index 5c0ced1..f9907c3 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -14,7 +14,7 @@ <% end %> <% if @issue.safe_attribute? 'tracker_id' %> -

<%= f.select :tracker_id, @issue.project.trackers.collect {|t| [t.name, t.id]}, {:required => true}, +

<%= f.select :tracker_id, @issue.project.trackers.reject { |t| @issue.new_record? && @issue.parent_issue_id.present? && @issue.tracker_id != t.id && t.disabled_core_fields.include?('parent_issue_id') }.collect {|t| [t.name, t.id]}, {:required => true}, :onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)" %>

<% end %> diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 2dd0f46..3f10fe9 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -1988,6 +1988,23 @@ class IssuesControllerTest < ActionController::TestCase assert_response 404 end + def test_new_with_parent_id_should_only_propose_valid_trackers + @request.session[:user_id] = 2 + t = Tracker.find(3) + assert !t.disabled_core_fields.include?('parent_issue_id') + + get :new, :project_id => 1, issue: { parent_issue_id: 1 } + assert_response :success + assert_select 'option', text: /#{t.name}/, count: 1 + + t.core_fields = Tracker::CORE_FIELDS - ['parent_issue_id'] + t.save! + assert t.disabled_core_fields.include?('parent_issue_id') + get :new, :project_id => 1, issue: { parent_issue_id: 1 } + assert_response :success + assert_select 'option', text: /#{t.name}/, count: 0 + end + def test_update_form_for_new_issue @request.session[:user_id] = 2 xhr :post, :new, :project_id => 1, -- 2.1.4