]> source.dussan.org Git - redmine.git/commitdiff
Backported r14670 (#20677).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 7 Nov 2015 08:16:50 +0000 (08:16 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 7 Nov 2015 08:16:50 +0000 (08:16 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/2.6-stable@14801 e93f8b46-1217-0410-a6f0-8f06a7374b81

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

index 3d9627c1f93810677bbda819c843455aa2a5a524..0d52c8f0e9b747585e703b7bbdc9b2a1ebe88086 100644 (file)
@@ -637,7 +637,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 5c5960401482558fb80237d33181d8ec3e3e867c..5df62cd92bedc57aa96d6fdf1ce21dfd762da3a9 100644 (file)
@@ -2021,6 +2021,31 @@ class IssuesControllerTest < ActionController::TestCase
     assert_error_tag :content => /Bar #{ESCAPED_CANT} 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_error_tag :content => /Foo #{ESCAPED_CANT} be blank/i
+    assert_error_tag :content => /Bar #{ESCAPED_CANT} 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])