Project

General

Profile

« Previous | Next » 

Revision b5f207de

Added by Ori Rabin over 7 years ago

Fixes #17810 - Deleting smart class parameters with puppetclass

View differences:

app/models/environment_class.rb
belongs_to :puppetclass_lookup_key
validates :puppetclass_lookup_key_id, :uniqueness => {:scope => [:environment_id, :puppetclass_id]}
validates :puppetclass_id, :environment_id, :presence => true
after_destroy :delete_orphaned_lookup_keys
scope :parameters_for_class, lambda {|puppetclasses_ids, environment_id|
all_parameters_for_class(puppetclasses_ids, environment_id).where(:puppetclass_lookup_keys => {:override => true})
......
def self.key_in_environment(env, puppetclass, puppetclass_lookup_key)
EnvironmentClass.where(:environment_id => env, :puppetclass_id => puppetclass, :puppetclass_lookup_key_id => puppetclass_lookup_key).first
end
def delete_orphaned_lookup_keys
if puppetclass_lookup_key.present? && puppetclass_lookup_key.environment_classes.empty?
puppetclass_lookup_key.destroy
end
end
end
db/migrate/20161205142618_delete_orphaned_smart_class_parameters.rb
class DeleteOrphanedSmartClassParameters < ActiveRecord::Migration
def up
PuppetclassLookupKey.where("NOT EXISTS (SELECT * FROM environment_classes WHERE environment_classes.puppetclass_lookup_key_id = lookup_keys.id)").destroy_all
end
def down
end
end
test/models/lookup_keys/puppetclass_lookup_key_test.rb
lookup_key.override = false
assert lookup_key.valid?
end
context "delete params with class" do
setup do
@env1 = FactoryGirl.create(:environment)
@puppetclass = FactoryGirl.create(:puppetclass)
@lookup_key = FactoryGirl.create(:puppetclass_lookup_key, :key_type => 'string',
:default_value => "test123", :override => true)
FactoryGirl.create(:environment_class, :puppetclass => @puppetclass, :environment => @env1, :puppetclass_lookup_key => @lookup_key)
end
test "deleting puppetclass should delete smart class parameters" do
env2 = FactoryGirl.create(:environment)
FactoryGirl.create(:environment_class, :puppetclass => @puppetclass, :environment => env2, :puppetclass_lookup_key => @lookup_key)
@puppetclass.destroy
refute PuppetclassLookupKey.where(:key => @lookup_key.key).present?
end
test "deleting only environment a smart class parameters is in should delete the parameter" do
@env1.destroy
refute PuppetclassLookupKey.where(:key => @lookup_key.key).present?
end
test "deleting only one environment a smart class parameters is in should not delete the parameter" do
env2 = FactoryGirl.create(:environment)
FactoryGirl.create(:environment_class, :puppetclass => @puppetclass, :environment => env2, :puppetclass_lookup_key => @lookup_key)
@env1.destroy
assert PuppetclassLookupKey.where(:key => @lookup_key.key).present?
end
end
end

Also available in: Unified diff