diff --git a/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb b/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb index 96fdbf8b6..3703a5e65 100644 --- a/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb +++ b/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb @@ -145,7 +145,9 @@ module Redmine end end self.custom_values = target_custom_values + custom_values_changed = custom_values.any?(&:changed?) custom_values.each(&:save) + touch if persisted? && custom_values_changed @custom_field_values_changed = false true end diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index 89bfacee6..5c7b8ff94 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -976,6 +976,30 @@ class ProjectsControllerTest < Redmine::ControllerTest assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort end + def test_update_custom_field_should_update_updated_on + @request.session[:user_id] = 2 + project = Project.find(1) + project.update_attribute :updated_on, nil + assert_equal 'Stable', project.custom_value_for(3).value + + travel_to Time.current do + post( + :update, + :params => { + :id => 1, + :project => { + :custom_field_values => {'3' => 'Alpha'} + } + } + ) + assert_redirected_to '/projects/ecookbook/settings' + assert_equal 'Successful update.', flash[:notice] + project.reload + assert_equal 'Alpha', project.custom_value_for(3).value + assert_equal Time.current, project.updated_on + end + end + def test_destroy_leaf_project_without_confirmation_should_show_confirmation @request.session[:user_id] = 1 # admin