From f99535bba2840b141a6f836e152397bc706ddeb4 2013-01-20 16:41:31 From: Jean-Philippe Lang Date: 2013-01-20 16:41:31 Subject: [PATCH] "Parent task is invalid" while editing child issues with restricted Issues Visibility (#12851). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11228 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/issue.rb b/app/models/issue.rb index 0714933..5d2bf24 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -430,7 +430,7 @@ class Issue < ActiveRecord::Base if attrs['parent_issue_id'].present? s = attrs['parent_issue_id'].to_s - unless (m = s.match(%r{\A#?(\d+)\z})) && Issue.visible(user).exists?(m[1]) + unless (m = s.match(%r{\A#?(\d+)\z})) && (m[1] == parent_id.to_s || Issue.visible(user).exists?(m[1])) @invalid_parent_issue_id = attrs.delete('parent_issue_id') end end diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index b279781..de4c717 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -2916,6 +2916,20 @@ class IssuesControllerTest < ActionController::TestCase assert_equal spent_hours_before + 2.5, issue.spent_hours end + def test_put_update_should_preserve_parent_issue_even_if_not_visible + parent = Issue.generate!(:project_id => 1, :is_private => true) + issue = Issue.generate!(:parent_issue_id => parent.id) + assert !parent.visible?(User.find(3)) + @request.session[:user_id] = 3 + + get :edit, :id => issue.id + assert_select 'input[name=?][value=?]', 'issue[parent_issue_id]', parent.id.to_s + + put :update, :id => issue.id, :issue => {:subject => 'New subject', :parent_issue_id => parent.id.to_s} + assert_response 302 + assert_equal parent, issue.parent + end + def test_put_update_with_attachment_only set_tmp_attachments_directory