diff --git a/plugins/custom_forms/lib/custom_forms_plugin/form.rb b/plugins/custom_forms/lib/custom_forms_plugin/form.rb index a3f1154..9426f97 100644 --- a/plugins/custom_forms/lib/custom_forms_plugin/form.rb +++ b/plugins/custom_forms/lib/custom_forms_plugin/form.rb @@ -17,6 +17,11 @@ class CustomFormsPlugin::Form < Noosfero::Plugin::ActiveRecord form.access = nil if form.access.blank? end + after_destroy do |form| + tasks = CustomFormsPlugin::MembershipSurvey.from(form.profile).opened.select { |t| t.form_id == form.id } + tasks.each {|task| task.cancel} + end + named_scope :from, lambda {|profile| {:conditions => {:profile_id => profile.id}}} named_scope :on_memberships, {:conditions => {:on_membership => true, :for_admission => false}} named_scope :for_admissions, {:conditions => {:for_admission => true}} diff --git a/plugins/custom_forms/test/unit/custom_forms_plugin/form_test.rb b/plugins/custom_forms/test/unit/custom_forms_plugin/form_test.rb index 6acecd4..f56a29e 100644 --- a/plugins/custom_forms/test/unit/custom_forms_plugin/form_test.rb +++ b/plugins/custom_forms/test/unit/custom_forms_plugin/form_test.rb @@ -211,4 +211,23 @@ class CustomFormsPlugin::FormTest < ActiveSupport::TestCase assert_includes scope, f1 assert_not_includes scope, f2 end + + should 'cancel survey tasks after removing a form' do + profile = fast_create(Profile) + person = fast_create(Person) + + form1 = CustomFormsPlugin::Form.create!(:name => 'Free Software', :profile => profile) + form2 = CustomFormsPlugin::Form.create!(:name => 'Operation System', :profile => profile) + + task1 = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form1.id, :target => person, :requestor => profile) + task2 = CustomFormsPlugin::MembershipSurvey.create!(:form_id => form2.id, :target => person, :requestor => profile) + + assert_includes Task.opened, task1 + assert_includes Task.opened, task2 + form1.destroy + assert_includes Task.canceled, task1 + assert_includes Task.opened, task2 + form2.destroy + assert_includes Task.canceled, task2 + end end -- libgit2 0.21.2