Commit acd66894e08e9174c1efbcc31cb8332d17b6a48b

Authored by Rodrigo Souto
1 parent 04962ef3

environment: destroy child profiles when destroyed

Also includes migration to remove already orphaned profiles.

(ActionItem2906)
app/models/environment.rb
... ... @@ -168,7 +168,7 @@ class Environment < ActiveRecord::Base
168 168  
169 169 # One Environment can be reached by many domains
170 170 has_many :domains, :as => :owner
171   - has_many :profiles
  171 + has_many :profiles, :dependent => :destroy
172 172  
173 173 has_many :organizations
174 174 has_many :enterprises
... ... @@ -783,13 +783,6 @@ class Environment < ActiveRecord::Base
783 783 self.save!
784 784 end
785 785  
786   - after_destroy :destroy_templates
787   - def destroy_templates
788   - [enterprise_template, inactive_enterprise_template, community_template, person_template].compact.each do |template|
789   - template.destroy
790   - end
791   - end
792   -
793 786 after_create :create_default_licenses
794 787 def create_default_licenses
795 788 License.create!(:name => 'CC (by)', :url => 'http://creativecommons.org/licenses/by/3.0/legalcode', :environment => self)
... ...
db/migrate/20131121162641_remove_orphan_profiles.rb 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +class RemoveOrphanProfiles < ActiveRecord::Migration
  2 + def self.up
  3 + profiles = Profile.joins('LEFT JOIN environments ON profiles.environment_id=environments.id').where('environments.id IS NULL')
  4 + profiles.map(&:destroy)
  5 + end
  6 +
  7 + def self.down
  8 + say 'This migration can not be reverted.'
  9 + end
  10 +end
... ...
test/unit/environment_test.rb
... ... @@ -293,21 +293,6 @@ class EnvironmentTest &lt; ActiveSupport::TestCase
293 293 assert_equal blocks - env_blocks, Block.count
294 294 end
295 295  
296   - should 'destroy templates' do
297   - env = fast_create(Environment)
298   - templates = [mock, mock, mock, mock]
299   - templates.each do |item|
300   - item.expects(:destroy)
301   - end
302   -
303   - env.stubs(:person_template).returns(templates[0])
304   - env.stubs(:community_template).returns(templates[1])
305   - env.stubs(:enterprise_template).returns(templates[2])
306   - env.stubs(:inactive_enterprise_template).returns(templates[3])
307   -
308   - env.destroy
309   - end
310   -
311 296 should 'have boxes and blocks upon creation' do
312 297 Environment.any_instance.stubs(:create_templates) # avoid creating templates, it's expensive
313 298 environment = Environment.create!(:name => 'a test environment')
... ...
test/unit/profile_test.rb
... ... @@ -1888,4 +1888,11 @@ class ProfileTest &lt; ActiveSupport::TestCase
1888 1888 assert !profile.may_display_location_to?(user)
1889 1889 end
1890 1890  
  1891 + should 'destroy profile if its environment is destroyed' do
  1892 + environment = fast_create(Environment)
  1893 + profile = fast_create(Profile, :environment_id => environment.id)
  1894 +
  1895 + environment.destroy
  1896 + assert_raise(ActiveRecord::RecordNotFound) {profile.reload}
  1897 + end
1891 1898 end
... ...