Commit 6fcf788e02ff6731733cb3bc6abb5dba63fa0ac9

Authored by Daniela Feitosa
1 parent 0484736d

[custom_forms] destroy answers when remove field

Also:
- fix to avoid crash if there is some answer without a related field
plugins/custom_forms/lib/custom_forms_plugin/field.rb
... ... @@ -6,7 +6,7 @@ class CustomFormsPlugin::Field < ActiveRecord::Base
6 6 attr_accessible :name, :form, :mandatory, :type, :position, :default_value, :select_field_type, :alternatives_attributes
7 7  
8 8 belongs_to :form, :class_name => 'CustomFormsPlugin::Form'
9   - has_many :answers, :class_name => 'CustomFormsPlugin::Answer'
  9 + has_many :answers, :class_name => 'CustomFormsPlugin::Answer', :dependent => :destroy
10 10  
11 11 has_many :alternatives, :order => 'position', :class_name => 'CustomFormsPlugin::Alternative'
12 12 accepts_nested_attributes_for :alternatives, :allow_destroy => true
... ...
plugins/custom_forms/lib/custom_forms_plugin/submission.rb
... ... @@ -52,7 +52,7 @@ class CustomFormsPlugin::Submission < Noosfero::Plugin::ActiveRecord
52 52 self.answers.each do |answer|
53 53 answer.valid?
54 54 answer.errors.each do |attribute, msg|
55   - self.errors.add answer.field.id.to_s.to_sym, msg
  55 + self.errors.add answer.field.id.to_s.to_sym, msg if answer.field.present?
56 56 end
57 57 end
58 58 end
... ...
plugins/custom_forms/test/unit/custom_forms_plugin/field_test.rb
... ... @@ -33,6 +33,18 @@ class CustomFormsPlugin::FieldTest < ActiveSupport::TestCase
33 33 assert_equal form.fields, [license_field]
34 34 end
35 35  
  36 + should 'destroy its answers after removing a field' do
  37 + form = CustomFormsPlugin::Form.create!(:name => 'Free Software', :profile => fast_create(Profile))
  38 + field = CustomFormsPlugin::Field.create!(:name => 'Project name', :form => form)
  39 +
  40 + CustomFormsPlugin::Answer.create(:field => field, :value => 'My Project')
  41 + CustomFormsPlugin::Answer.create(:field => field, :value => 'Other Project')
  42 +
  43 + assert_difference 'CustomFormsPlugin::Answer.count', -2 do
  44 + field.destroy
  45 + end
  46 + end
  47 +
36 48 should 'have alternative if type is SelectField' do
37 49 select = CustomFormsPlugin::Field.new(:name => 'select_field001', :type => 'CustomFormsPlugin::SelectField')
38 50 assert !select.save
... ...