Skip to content

Commit

Permalink
fixes #12095 - prevent escaping of lookup key default value with ERB
Browse files Browse the repository at this point in the history
When the current default value is retrieved from a lookup key via
default_value_before_type_cast, do not re-dump values containing ERB as
they will not have been cast already.  This prevents them being escaped
again in the Puppet class edit form, and matches LookupValue behaviour.
  • Loading branch information
Dominic Cleal committed Oct 9, 2015
1 parent e33ae20 commit bedfa61
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 6 deletions.
1 change: 1 addition & 0 deletions app/models/lookup_keys/lookup_key.rb
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ def default_value_before_type_cast
end

def value_before_type_cast(val)
return val if val.nil? || contains_erb?(val)
case key_type.to_sym
when :json, :array
begin
Expand Down
72 changes: 66 additions & 6 deletions test/unit/lookup_key_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,72 @@ def test_parameters_multiple_paths
assert_equal default, Classification::GlobalParam.new(:host=>@host3).enc['dns']
end

def test_value_should_not_be_changed
param = lookup_keys(:three)
default = param.default_value
param.save
assert_equal default, param.default_value
assert_equal default, param.default_value_before_type_cast
describe '#default_value_before_type_cast' do
test 'nil value should remain nil' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'string',
:default_value => nil, :puppetclass => puppetclasses(:one))
param.valid?
assert_nil param.default_value
assert_nil param.default_value_before_type_cast
end

test 'boolean value should remain casted' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'boolean',
:default_value => 'false', :puppetclass => puppetclasses(:one))
param.valid?
assert_equal false, param.default_value
assert_equal false, param.default_value_before_type_cast
end

test 'array value should be an unchanged string' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'array',
:default_value => '["test"]', :puppetclass => puppetclasses(:one))
default = param.default_value
param.valid?
assert_equal ['test'], param.default_value
assert_equal default, param.default_value_before_type_cast
end

test 'JSON value should be an unchanged string' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'json',
:default_value => '["test"]', :puppetclass => puppetclasses(:one))
default = param.default_value
param.valid?
assert_equal ['test'], param.default_value
assert_equal default, param.default_value_before_type_cast
end

test 'hash value should be an unchanged string' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'hash',
:default_value => "foo: bar\n", :puppetclass => puppetclasses(:one))
param.valid?
assert_equal({'foo' => 'bar'}, param.default_value)
assert_equal "foo: bar\n", param.default_value_before_type_cast
end

test 'YAML value should be an unchanged string' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'yaml',
:default_value => "- test\n", :puppetclass => puppetclasses(:one))
param.valid?
assert_equal ['test'], param.default_value
assert_equal "- test\n", param.default_value_before_type_cast
end

test 'uncast value containing ERB should be an unchanged string' do
param = FactoryGirl.build(:puppetclass_lookup_key, :as_smart_class_param,
:override => true, :key_type => 'array',
:default_value => '["<%= @host.name %>"]', :puppetclass => puppetclasses(:one))
default = param.default_value
param.valid?
assert_equal '["<%= @host.name %>"]', param.default_value
assert_equal default, param.default_value_before_type_cast
end
end

test "this is a smart variable?" do
Expand Down

0 comments on commit bedfa61

Please sign in to comment.