From ad29dcce6c36855cef9c2b2ea62298b2f8fb0f26 Mon Sep 17 00:00:00 2001 From: kumojima Date: Fri, 4 Sep 2026 20:51:19 +0900 Subject: select default_value of required custom field --- lib/redmine/field_format.rb | 8 ++++++- .../redmine/field_format/bool_format_test.rb | 21 +++++++++++++++++++ .../redmine/field_format/list_format_test.rb | 21 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/lib/redmine/field_format.rb b/lib/redmine/field_format.rb index 46ada2817..ae18799f3 100644 --- a/lib/redmine/field_format.rb +++ b/lib/redmine/field_format.rb @@ -652,9 +652,15 @@ module Redmine blank_option = view.content_tag('option', ' '.html_safe, :value => '') end end + cf = custom_value.custom_field + if !cf.multiple? && cf.is_required? && cf.default_value.present? && custom_value.value.blank? + value = cf.default_value + else + value = custom_value.value + end options_tags = blank_option + - view.options_for_select(possible_custom_value_options(custom_value), custom_value.value) + view.options_for_select(possible_custom_value_options(custom_value), value) s = view.select_tag( tag_name, options_tags, diff --git a/test/unit/lib/redmine/field_format/bool_format_test.rb b/test/unit/lib/redmine/field_format/bool_format_test.rb index c55d4ed1b..3860d4bd2 100644 --- a/test/unit/lib/redmine/field_format/bool_format_test.rb +++ b/test/unit/lib/redmine/field_format/bool_format_test.rb @@ -62,4 +62,25 @@ class Redmine::BoolFieldFormatTest < ActionView::TestCase tag = field.format.edit_tag(self, 'abc', 'xyz', value) assert_select_in tag, 'select[name=xyz]', 1 end + + def test_edit_tag_should_select_defalut_value_without_custom_value_when_required + field = IssueCustomField.new(:field_format => 'bool', :is_required => true, :default_value => '0') + value = CustomFieldValue.new(:custom_field => field, :customized => Issue.new, :value => nil) + + tag = field.format.edit_tag(self, 'id', 'name', value) + assert_select_in tag, 'select' do + assert_select 'option[selected=selected]', 1 + assert_select 'option[value=0][selected=selected]', :text => 'No' + end + end + + def test_edit_tag_should_select_defalut_value_without_custom_value_when_not_required + field = IssueCustomField.new(:field_format => 'bool', :is_required => false, :default_value => '0') + value = CustomFieldValue.new(:custom_field => field, :customized => Issue.new, :value => nil) + + tag = field.format.edit_tag(self, 'id', 'name', value) + assert_select_in tag, 'select' do + assert_select 'option[selected=selected]', 0 + end + end end diff --git a/test/unit/lib/redmine/field_format/list_format_test.rb b/test/unit/lib/redmine/field_format/list_format_test.rb index 50e870c98..643127ac3 100644 --- a/test/unit/lib/redmine/field_format/list_format_test.rb +++ b/test/unit/lib/redmine/field_format/list_format_test.rb @@ -81,6 +81,27 @@ class Redmine::ListFieldFormatTest < ActionView::TestCase end end + def test_edit_tag_should_select_defalut_value_without_custom_value_when_required + field = IssueCustomField.new(:field_format => 'list', :possible_values => ['Foo', 'Bar'], :is_required => true, :default_value => 'Bar') + value = CustomFieldValue.new(:custom_field => field, :customized => Issue.new, :value => nil) + + tag = field.format.edit_tag(self, 'id', 'name', value) + assert_select_in tag, 'select' do + assert_select 'option[selected=selected]', 1 + assert_select 'option[value=Bar][selected=selected]', :text => 'Bar' + end + end + + def test_edit_tag_should_select_defalut_value_without_custom_value_when_not_required + field = IssueCustomField.new(:field_format => 'list', :possible_values => ['Foo', 'Bar'], :is_required => false, :default_value => 'Bar') + value = CustomFieldValue.new(:custom_field => field, :customized => Issue.new, :value => nil) + + tag = field.format.edit_tag(self, 'id', 'name', value) + assert_select_in tag, 'select' do + assert_select 'option[selected=selected]', 0 + end + end + def test_edit_tag_with_multiple_should_select_current_values field = IssueCustomField.new(:field_format => 'list', :possible_values => ['Foo', 'Bar', 'Baz'], :is_required => false, :multiple => true) -- 2.43.0