diff --git a/app/controllers/enumerations_controller.rb b/app/controllers/enumerations_controller.rb index e5e3cc3def..ea4f049eb2 100644 --- a/app/controllers/enumerations_controller.rb +++ b/app/controllers/enumerations_controller.rb @@ -91,8 +91,10 @@ class EnumerationsController < ApplicationController def build_new_enumeration class_name = params[:enumeration] && params[:enumeration][:type] || params[:type] - @enumeration = Enumeration.new_subclass_instance(class_name, enumeration_params) - if @enumeration.nil? + @enumeration = Enumeration.new_subclass_instance(class_name) + if @enumeration + @enumeration.attributes = enumeration_params || {} + else render_404 end end @@ -105,6 +107,7 @@ class EnumerationsController < ApplicationController def enumeration_params # can't require enumeration on #new action - params.permit(:enumeration => [:name, :active, :is_default, :position])[:enumeration] + custom_field_keys = (@enumeration.try(:custom_field_values) || []).map{|c| c.custom_field_id.to_s} + params.permit(:enumeration => [:name, :active, :is_default, :position, :custom_field_values => custom_field_keys])[:enumeration] end end diff --git a/test/functional/enumerations_controller_test.rb b/test/functional/enumerations_controller_test.rb index 1e0b75fb5d..2f4573f843 100644 --- a/test/functional/enumerations_controller_test.rb +++ b/test/functional/enumerations_controller_test.rb @@ -67,6 +67,21 @@ class EnumerationsControllerTest < Redmine::ControllerTest assert_not_nil e end + def test_create_with_custom_field_values + custom_field_id = CustomField.find_by(:type => "TimeEntryActivityCustomField").id + assert_difference 'TimeEntryActivity.count' do + post :create, :params => { + :enumeration => { + :type => 'TimeEntryActivity', + :name => 'Sample', + :custom_field_values => {custom_field_id.to_s => "1"} + } + } + end + assert_redirected_to '/enumerations' + assert_equal "1", Enumeration.find_by(:name => 'Sample').custom_field_values.first.value + end + def test_create_with_failure assert_no_difference 'IssuePriority.count' do post :create, :params => { @@ -136,6 +151,20 @@ class EnumerationsControllerTest < Redmine::ControllerTest assert_equal 1, Enumeration.find(2).position end + def test_update_custom_field_values + enumeration = Enumeration.find(9) + assert_equal "", enumeration.custom_field_values.first.value + custom_field_id = enumeration.custom_field_values.first.custom_field.id + put :update, :params => { + :id => enumeration.id, + :enumeration => { + :custom_field_values => {custom_field_id.to_s => "1"} + } + } + assert_response 302 + assert_equal "1", enumeration.reload.custom_field_values.first.value + end + def test_destroy_enumeration_not_in_use assert_difference 'IssuePriority.count', -1 do delete :destroy, :params => {