Project

General

Profile

« Previous | Next » 

Revision c007f069

Added by Dominic Cleal about 10 years ago

fixes #1902 - audit changes to lookup keys and values/overrides

(cherry picked from commit 971fee795383d2f7dc757a91ceb46bd693e20a4d)

View differences:

app/helpers/audits_helper.rb
end
elsif !main_object? audit
["#{audit_action_name(audit).humanize} #{id_to_label audit.audited_changes.keys[0], audit.audited_changes.values[0]}
#{audit_action_name(audit)=="removed" ? "from" : "to"} #{id_to_label audit.audited_changes.keys[1], audit.audited_changes.values[1]}"]
#{audit_action_name(audit)=="removed" ? "from" : "to"} #{audit.associated_name || id_to_label(audit.audited_changes.keys[1], audit.audited_changes.values[1])}"]
else
[]
end
......
'Puppet Class'
when 'Parameter'
"#{audit.associated_type || 'Global'}-#{type_name}"
when 'LookupKey'
'Smart Variable'
when 'LookupValue'
'Override Value'
else
audit.auditable_type
end
app/models/lookup_key.rb
KEY_DELM = ","
EQ_DELM = "="
audited :associated_with => :audit_class, :allow_mass_assignment => true
serialize :default_value
belongs_to :puppetclass, :inverse_of => :lookup_keys, :counter_cache => true
......
param_classes.first
end
def audit_class
param_class || puppetclass
end
has_many :lookup_values, :dependent => :destroy, :inverse_of => :lookup_key
accepts_nested_attributes_for :lookup_values, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true
......
nil
end
def to_label
"#{audit_class}::#{key}"
end
def is_smart_variable?
puppetclass_id.to_i > 0
end
app/models/lookup_value.rb
class LookupValue < ActiveRecord::Base
include Authorizable
audited :associated_with => :lookup_key, :allow_mass_assignment => true
belongs_to :lookup_key, :counter_cache => true
validates :match, :presence => true, :uniqueness => {:scope => :lookup_key_id}
delegate :key, :to => :lookup_key
test/factories/puppet_related.rb
factory :environment_class
factory :lookup_key do
sequence(:key) {|n| "param#{n}" }
ignore do
overrides({})
end
after_create do |lkey,evaluator|
evaluator.overrides.each do |match,value|
FactoryGirl.create :lookup_value, :lookup_key_id => lkey.id, :value => value, :match => match
end
lkey.reload
end
trait :with_override do
override true
default_value "default value"
path "fqdn\ncomment"
overrides({"comment=override" => "overridden value"})
end
trait :as_smart_class_param do
is_param true
ignore do
puppetclass nil
end
after_create do |lkey,evaluator|
evaluator.puppetclass.environments.each do |env|
FactoryGirl.create :environment_class, :puppetclass_id => evaluator.puppetclass.id, :environment_id => env.id, :lookup_key_id => lkey.id
end
end
end
end
factory :lookup_value
factory :puppetclass do
sequence(:name) {|n| "class#{n}" }
ignore do
environments []
end
after_create do |pc,evaluator|
evaluator.environments.each do |env|
FactoryGirl.create :environment_class, :puppetclass_id => pc.id, :environment_id => env.id
end
end
trait :with_parameters do
after_create do |pc,evaluator|
3.times do
evaluator.environments.each do |env|
lkey = FactoryGirl.create :lookup_key, :is_param => true
FactoryGirl.create :environment_class, :puppetclass_id => pc.id, :environment_id => env.id, :lookup_key_id => lkey.id
end
end
end
end
end
end
test/unit/lookup_key_test.rb
assert lookup_keys(:complex).is_smart_class_parameter?
end
test "when changed, an audit entry should be added" do
env = FactoryGirl.create(:environment)
pc = FactoryGirl.create(:puppetclass, :with_parameters, :environments => [env])
key = pc.class_params.first
assert_difference('Audit.count') do
key.override = true
key.default_value = "new default value"
key.save!
end
assert_equal pc.name, key.audits.last.associated_name
end
end
test/unit/lookup_value_test.rb
assert lk.value.is_a? Array
assert_equal lk.value_before_type_cast, "[{\"foo\":\"bar\"},{\"baz\":\"qux\"},\"baz\"]"
end
test "when created, an audit entry should be added" do
env = FactoryGirl.create(:environment)
pc = FactoryGirl.create(:puppetclass, :with_parameters, :environments => [env])
key = pc.class_params.first
lvalue = nil
assert_difference('Audit.count') do
lvalue = FactoryGirl.create :lookup_value, :lookup_key_id => key.id, :value => 'test', :match => 'foo=bar'
end
assert_equal "#{pc.name}::#{key.key}", lvalue.audits.last.associated_name
end
test "when changed, an audit entry should be added" do
env = FactoryGirl.create(:environment)
pc = FactoryGirl.create(:puppetclass, :environments => [env])
key = FactoryGirl.create(:lookup_key, :as_smart_class_param, :with_override, :puppetclass => pc)
lvalue = key.lookup_values.first
assert_difference('Audit.count') do
lvalue.value = 'new overridden value'
lvalue.save!
end
assert_equal "#{pc.name}::#{key.key}", lvalue.audits.last.associated_name
end
end

Also available in: Unified diff