From bfc0d0edbe592962d2bcdc2923060cc7cb04bc90 Mon Sep 17 00:00:00 2001 From: Larissa Reis Date: Mon, 20 Jan 2014 14:05:17 -0300 Subject: [PATCH] Prevents new forms to be saved with select field without alternatives --- plugins/custom_forms/lib/custom_forms_plugin/field.rb | 4 ++++ plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb | 8 ++++++++ 2 files changed, 12 insertions(+), 0 deletions(-) diff --git a/plugins/custom_forms/lib/custom_forms_plugin/field.rb b/plugins/custom_forms/lib/custom_forms_plugin/field.rb index 9cec849..5b1d45c 100644 --- a/plugins/custom_forms/lib/custom_forms_plugin/field.rb +++ b/plugins/custom_forms/lib/custom_forms_plugin/field.rb @@ -8,6 +8,10 @@ class CustomFormsPlugin::Field < ActiveRecord::Base has_many :alternatives, :order => 'position', :class_name => 'CustomFormsPlugin::Alternative' accepts_nested_attributes_for :alternatives, :allow_destroy => true + #FIXME This validation should be in the subclass, but since we are using Single Table + # Inheritance we are instantiating a Field object with the type as a param. So the validation + # had to go here or rails would skip it. + validates_length_of :alternatives, :minimum => 1, :message => 'can\'t be empty', :if => Proc.new { |f| f.type == 'CustomFormsPlugin::SelectField' } before_validation do |field| field.slug = field.name.to_slug if field.name.present? diff --git a/plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb b/plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb index 4154785..82e9225 100644 --- a/plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb +++ b/plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb @@ -33,6 +33,14 @@ class CustomFormsPlugin::FieldTest < ActiveSupport::TestCase assert_equal form.fields, [license_field] end + should 'have alternative if type is SelectField' do + select = CustomFormsPlugin::Field.new(:name => 'select_field001', :type => 'CustomFormsPlugin::SelectField') + assert !select.save + + select.alternatives << CustomFormsPlugin::Alternative.new(:label => 'option') + assert select.save + end + should 'sort alternatives by position' do field = CustomFormsPlugin::Field.create!(:name => 'field001') second = CustomFormsPlugin::Alternative.create!(:label => 'second', :field => field, :position => 2) -- libgit2 0.21.2