From: Jean-Philippe Lang Date: Sat, 31 Oct 2015 09:17:29 +0000 (+0000) Subject: New custom fields of existing issues are not initialized with their default value... X-Git-Tag: 3.2.0~100 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e6112a9710cbe33a0ee5787c14498a55ce9ba891;p=redmine.git New custom fields of existing issues are not initialized with their default value (#21074). git-svn-id: http://svn.redmine.org/redmine/trunk@14773 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/custom_value.rb b/app/models/custom_value.rb index ab6cc8fbc..d89bfbb13 100644 --- a/app/models/custom_value.rb +++ b/app/models/custom_value.rb @@ -22,7 +22,7 @@ class CustomValue < ActiveRecord::Base def initialize(attributes=nil, *args) super - if new_record? && custom_field && (customized_type.blank? || (customized && customized.new_record?)) + if new_record? && custom_field && !attributes.key?(:value) self.value ||= custom_field.default_value end end 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 9c4af77d4..6360e4e90 100644 --- a/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb +++ b/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb @@ -92,12 +92,12 @@ module Redmine if field.multiple? values = custom_values.select { |v| v.custom_field == field } if values.empty? - values << custom_values.build(:customized => self, :custom_field => field, :value => nil) + values << custom_values.build(:customized => self, :custom_field => field) end x.value = values.map(&:value) else cv = custom_values.detect { |v| v.custom_field == field } - cv ||= custom_values.build(:customized => self, :custom_field => field, :value => nil) + cv ||= custom_values.build(:customized => self, :custom_field => field) x.value = cv.value end x.value_was = x.value.dup if x.value diff --git a/test/integration/api_test/issues_test.rb b/test/integration/api_test/issues_test.rb index 18dbfaad9..5a7d64d47 100644 --- a/test/integration/api_test/issues_test.rb +++ b/test/integration/api_test/issues_test.rb @@ -562,7 +562,7 @@ JSON assert_equal "", issue.reload.custom_field_value(field) end - test "PUT /issues/:id.json with tracker change and omitted custom field specific to that tracker does not set default value" do + test "PUT /issues/:id.json with tracker change and omitted custom field specific to that tracker should set default value" do field = IssueCustomField.generate!(:default_value => "Default", :tracker_ids => [2]) issue = Issue.generate!(:project_id => 1, :tracker_id => 1) @@ -573,7 +573,7 @@ JSON end assert_equal 2, issue.reload.tracker_id - assert_nil issue.reload.custom_field_value(field) + assert_equal "Default", issue.reload.custom_field_value(field) end test "PUT /issues/:id.json with tracker change and custom field specific to that tracker set to blank should not set default value" do diff --git a/test/unit/custom_value_test.rb b/test/unit/custom_value_test.rb index b344994a4..954c3aee9 100644 --- a/test/unit/custom_value_test.rb +++ b/test/unit/custom_value_test.rb @@ -20,15 +20,25 @@ require File.expand_path('../../test_helper', __FILE__) class CustomValueTest < ActiveSupport::TestCase fixtures :custom_fields, :custom_values, :users - def test_default_value - field = CustomField.find_by_default_value('Default string') - assert_not_nil field + def test_new_without_value_should_set_default_value + field = CustomField.generate!(:default_value => 'Default string') v = CustomValue.new(:custom_field => field) assert_equal 'Default string', v.value + end + + def test_new_with_value_should_not_set_default_value + field = CustomField.generate!(:default_value => 'Default string') + + v = CustomValue.new(:custom_field => field, :value => 'String') + assert_equal 'String', v.value + end + + def test_new_with_nil_value_should_not_set_default_value + field = CustomField.generate!(:default_value => 'Default string') - v = CustomValue.new(:custom_field => field, :value => 'Not empty') - assert_equal 'Not empty', v.value + v = CustomValue.new(:custom_field => field, :value => nil) + assert_nil v.value end def test_sti_polymorphic_association