Commit acd66894e08e9174c1efbcc31cb8332d17b6a48b
1 parent
04962ef3
Exists in
master
and in
28 other branches
environment: destroy child profiles when destroyed
Also includes migration to remove already orphaned profiles. (ActionItem2906)
Showing
4 changed files
with
18 additions
and
23 deletions
Show diff stats
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) | ... | ... |
... | ... | @@ -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 < 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 < 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 | ... | ... |