diff --git a/app/models/block.rb b/app/models/block.rb index dcd17d8..578b6dd 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -32,6 +32,14 @@ class Block < ActiveRecord::Base end end + after_destroy do |block| + if block.owner.kind_of?(Profile) && block.owner.is_template? && block.mirror? + block.observers.each do |observer| + observer.destroy + end + end + end + def embedable? false end diff --git a/test/unit/block_test.rb b/test/unit/block_test.rb index 95277d0..29ee2c8 100644 --- a/test/unit/block_test.rb +++ b/test/unit/block_test.rb @@ -361,4 +361,19 @@ class BlockTest < ActiveSupport::TestCase assert block.get_limit.is_a?(Fixnum) end + should 'destroy mirrored block when deleted from template' do + profile_template = create_user('test_template').person + profile_template.is_template = true + profile_template.save! + + template_block = create(RecentDocumentsBlock, :mirror => true, :title => 'template block') + mirrored_block = create(RecentDocumentsBlock, :mirror => false, :mirror_block_id => template_block, :title => 'mirrored block') + template_block.observers << mirrored_block + + template_block.stubs(:owner).returns(profile_template) + template_block.destroy! + + assert_nil RecentDocumentsBlock.find_by_id mirrored_block.id + end + end -- libgit2 0.21.2