]> source.dussan.org Git - redmine.git/commitdiff
List custom fields with multiple values set as required by workflow can be blank...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 14 Oct 2015 18:02:12 +0000 (18:02 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 14 Oct 2015 18:02:12 +0000 (18:02 +0000)
Patch by Pavel Rosický.

git-svn-id: http://svn.redmine.org/redmine/trunk@14670 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
test/functional/issues_controller_test.rb

index 70573dd95e421d19e3abc680509c5d11f01bab56..ed39a5a737530368606ceb23073635e296941035 100644 (file)
@@ -660,7 +660,7 @@ class Issue < ActiveRecord::Base
       if attribute =~ /^\d+$/
         attribute = attribute.to_i
         v = custom_field_values.detect {|v| v.custom_field_id == attribute }
-        if v && v.value.blank?
+        if v && Array(v.value).detect(&:present?).nil?
           errors.add :base, v.custom_field.name + ' ' + l('activerecord.errors.messages.blank')
         end
       else
index 158ba4316c7ef6ad1e54e550c79254ab8ebdf247..390da19a3964e2ec5b3d50932781ea451c695a4d 100644 (file)
@@ -2169,6 +2169,31 @@ class IssuesControllerTest < ActionController::TestCase
     assert_select_error /Bar cannot be blank/i
   end
 
+  def test_create_should_validate_required_list_fields
+    cf1 = IssueCustomField.create!(:name => 'Foo', :field_format => 'list', :is_for_all => true, :tracker_ids => [1, 2], :multiple => false, :possible_values => ['a', 'b'])
+    cf2 = IssueCustomField.create!(:name => 'Bar', :field_format => 'list', :is_for_all => true, :tracker_ids => [1, 2], :multiple => true, :possible_values => ['a', 'b'])
+    WorkflowPermission.delete_all
+    WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 2, :role_id => 1, :field_name => cf1.id.to_s, :rule => 'required')
+    WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 2, :role_id => 1, :field_name => cf2.id.to_s, :rule => 'required')
+    @request.session[:user_id] = 2
+
+    assert_no_difference 'Issue.count' do
+      post :create, :project_id => 1, :issue => {
+        :tracker_id => 2,
+        :status_id => 1,
+        :subject => 'Test',
+        :start_date => '',
+        :due_date => '',
+        :custom_field_values => {cf1.id.to_s => '', cf2.id.to_s => ['']}
+      }
+      assert_response :success
+      assert_template 'new'
+    end
+
+    assert_select_error /Foo cannot be blank/i
+    assert_select_error /Bar cannot be blank/i
+  end
+
   def test_create_should_ignore_readonly_fields
     cf1 = IssueCustomField.create!(:name => 'Foo', :field_format => 'string', :is_for_all => true, :tracker_ids => [1, 2])
     cf2 = IssueCustomField.create!(:name => 'Bar', :field_format => 'string', :is_for_all => true, :tracker_ids => [1, 2])