Commit fbfbd6a8bf0033da30f6f929ba686dba36d9801f
1 parent
8b24632e
Exists in
master
and in
29 other branches
Forms: Warning users about blank mandatory fields
(ActionItem2681)
Showing
3 changed files
with
43 additions
and
8 deletions
Show diff stats
plugins/custom_forms/controllers/custom_forms_plugin_profile_controller.rb
| ... | ... | @@ -27,6 +27,7 @@ class CustomFormsPluginProfileController < ProfileController |
| 27 | 27 | failed_answers.each do |answer| |
| 28 | 28 | @submission.errors.add(answer.field.name.to_sym, answer.errors[answer.field.slug.to_sym]) |
| 29 | 29 | end |
| 30 | + raise 'Submission failed: answers not valid' | |
| 30 | 31 | end |
| 31 | 32 | session[:notice] = _('Submission saved') |
| 32 | 33 | redirect_to :action => 'show' | ... | ... |
plugins/custom_forms/lib/custom_forms_plugin/helper.rb
| ... | ... | @@ -103,14 +103,17 @@ module CustomFormsPlugin::Helper |
| 103 | 103 | |
| 104 | 104 | def build_answers(submission, form) |
| 105 | 105 | answers = [] |
| 106 | - submission.each do |slug, value| | |
| 107 | - field = form.fields.select {|field| field.slug==slug}.first | |
| 108 | - if value.kind_of?(String) | |
| 109 | - final_value = value | |
| 110 | - elsif value.kind_of?(Array) | |
| 111 | - final_value = value.join(',') | |
| 112 | - elsif value.kind_of?(Hash) | |
| 113 | - final_value = value.map {|option, present| present == '1' ? option : nil}.compact.join(',') | |
| 106 | + form.fields.each do |field| | |
| 107 | + final_value = '' | |
| 108 | + if submission.has_key?(field.slug) | |
| 109 | + value = submission[field.slug] | |
| 110 | + if value.kind_of?(String) | |
| 111 | + final_value = value | |
| 112 | + elsif value.kind_of?(Array) | |
| 113 | + final_value = value.join(',') | |
| 114 | + elsif value.kind_of?(Hash) | |
| 115 | + final_value = value.map {|option, present| present == '1' ? option : nil}.compact.join(',') | |
| 116 | + end | |
| 114 | 117 | end |
| 115 | 118 | answers << CustomFormsPlugin::Answer.new(:field => field, :value => final_value) |
| 116 | 119 | end | ... | ... |
plugins/custom_forms/test/functional/custom_forms_plugin_profile_controller_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,31 @@ |
| 1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | |
| 2 | +require File.dirname(__FILE__) + '/../../controllers/custom_forms_plugin_profile_controller' | |
| 3 | + | |
| 4 | +# Re-raise errors caught by the controller. | |
| 5 | +class CustomFormsPluginProfileController; def rescue_action(e) raise e end; end | |
| 6 | + | |
| 7 | +class CustomFormsPluginProfileControllerTest < ActionController::TestCase | |
| 8 | + def setup | |
| 9 | + @controller = CustomFormsPluginProfileController.new | |
| 10 | + @request = ActionController::TestRequest.new | |
| 11 | + @response = ActionController::TestResponse.new | |
| 12 | + @profile = create_user('profile').person | |
| 13 | + login_as(@profile.identifier) | |
| 14 | + environment = Environment.default | |
| 15 | + environment.enable_plugin(CustomFormsPlugin) | |
| 16 | + end | |
| 17 | + | |
| 18 | + attr_reader :profile | |
| 19 | + | |
| 20 | + should 'save submission if fields are ok' do | |
| 21 | + form = CustomFormsPlugin::Form.create!(:profile => profile, :name => 'Free Software') | |
| 22 | + field1 = CustomFormsPlugin::TextField.create(:name => 'Name', :form => form, :mandatory => true) | |
| 23 | + field2 = CustomFormsPlugin::TextField.create(:name => 'License', :form => form) | |
| 24 | + | |
| 25 | + assert_difference CustomFormsPlugin::Submission, :count, 1 do | |
| 26 | + post :show, :profile => profile.identifier, :id => form.id, :submission => {field1.name.to_slug => 'Noosfero', field2.name.to_slug => 'GPL'} | |
| 27 | + end | |
| 28 | + assert !session[:notice].include?('not saved') | |
| 29 | + assert_redirected_to :action => 'show' | |
| 30 | + end | |
| 31 | +end | ... | ... |