diff --git a/app/models/issue.rb b/app/models/issue.rb index ed39a5a73..3d57c722c 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -454,6 +454,11 @@ class Issue < ActiveRecord::Base if allowed_target_projects(user).where(:id => p.to_i).exists? self.project_id = p end + + if project_id_changed? && attrs['category_id'].to_s == category_id_was.to_s + # Discard submitted category on previous project + attrs.delete('category_id') + end end if (t = attrs.delete('tracker_id')) && safe_attribute?('tracker_id') diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 9c56b2a24..48ba81485 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -3096,6 +3096,22 @@ class IssuesControllerTest < ActionController::TestCase assert_equal 'This is the test_new issue', issue.subject end + def test_update_form_should_keep_category_with_same_when_changing_project + source = Project.generate! + target = Project.generate! + source_category = IssueCategory.create!(:name => 'Foo', :project => source) + target_category = IssueCategory.create!(:name => 'Foo', :project => target) + issue = Issue.generate!(:project => source, :category => source_category) + + @request.session[:user_id] = 1 + patch :edit, :id => issue.id, + :issue => {:project_id => target.id, :category_id => source_category.id} + assert_response :success + + issue = assigns(:issue) + assert_equal target_category, issue.category + end + def test_update_form_should_propose_default_status_for_existing_issue @request.session[:user_id] = 2 WorkflowTransition.delete_all