Project

General

Profile

« Previous | Next » 

Revision e0e41840

Added by Ori Rabin over 8 years ago

Fixes #12752 - Host and hostgroup clone should copy smart class parameters overrides

View differences:

app/helpers/lookup_keys_helper.rb
def lookup_key_with_diagnostic(obj, lookup_key, lookup_value)
value, matcher = value_matcher(obj, lookup_key)
inherited_value = lookup_key.value_before_type_cast(value)
effective_value = lookup_value.id.nil? ? inherited_value.to_s : lookup_value.value_before_type_cast.to_s
effective_value = lookup_value.lookup_key_id.nil? ? inherited_value.to_s : lookup_value.value_before_type_cast.to_s
warnings = lookup_key_warnings(lookup_key.required, effective_value.present?)
popover_value = lookup_key.hidden_value? ? lookup_key.hidden_value : inherited_value
app/views/puppetclasses/_class_parameters.html.erb
<% lookup_keys = overridable_lookup_keys(puppetclass, obj) %>
<% lookup_keys.each_with_index do |lookup_key, index| %>
<% lookup_value = lookup_value(obj, lookup_key) %>
<%
# LookupValue#match is generated automatically by Host#lookup_values_attributes=
# from the name, so don't present errors directly to the user. Any validation
# errors should also be visible against the Host#name field.
if lookup_value.errors[:match].any?
logger.debug("Ignoring #{lookup_value.inspect} match errors: #{lookup_value.errors[:match]}")
lookup_value.errors.delete(:match)
end
%>
<% overridden = lookup_key.overridden?(obj) %>
<% disabled = can_edit_params? && !overridden %>
<% error = lookup_value.errors %>
test/integration/host_test.rb
end
describe 'clone page' do
test 'clones lookup values' do
host = FactoryGirl.create(:host, :with_puppetclass)
lookup_key = FactoryGirl.create(:puppetclass_lookup_key, :as_smart_class_param, :with_override,
:puppetclass => host.puppetclasses.first)
lookup_value = LookupValue.create(:value => 'abc', :match => host.lookup_value_matcher, :lookup_key_id => lookup_key.id)
visit clone_host_path(host)
assert page.has_link?('Parameters', :href => '#params')
click_link 'Parameters'
a = page.find("#host_lookup_values_attributes_#{lookup_key.id}_value")
assert_equal lookup_value.value, a.value
end
test 'shows no errors on lookup values' do
host = FactoryGirl.create(:host, :with_puppetclass)
FactoryGirl.create(:puppetclass_lookup_key, :as_smart_class_param, :with_override,
......
visit clone_host_path(host)
assert page.has_link?('Parameters', :href => '#params')
click_link 'Parameters'
assert page.has_no_selector?('#params tr.has-error')
assert page.has_no_selector?('#params .has-error')
end
end
end
test/integration/hostgroup_test.rb
assert page.has_selector?('#params td.has-error')
end
test 'clones lookup values' do
group = FactoryGirl.create(:hostgroup, :with_puppetclass)
lookup_key = FactoryGirl.create(:puppetclass_lookup_key, :as_smart_class_param, :with_override,
:puppetclass => group.puppetclasses.first)
lookup_value = LookupValue.create(:value => 'abc', :match => group.lookup_value_matcher, :lookup_key_id => lookup_key.id)
visit clone_hostgroup_path(group)
assert page.has_link?('Parameters', :href => '#params')
click_link 'Parameters'
a = page.find("#hostgroup_lookup_values_attributes_#{lookup_key.id}_value")
assert_equal lookup_value.value, a.value
end
test 'clone shows no errors on lookup values' do
group = FactoryGirl.create(:hostgroup, :with_puppetclass)
FactoryGirl.create(:puppetclass_lookup_key, :as_smart_class_param, :with_override,
......
visit clone_hostgroup_path(group)
assert page.has_link?('Parameters', :href => '#params')
click_link 'Parameters'
assert page.has_no_selector?('#params tr.has-error')
assert page.has_no_selector?('#params .has-error')
end
end
test/unit/host_test.rb
describe 'cloning' do
test 'relationships are copied' do
host = FactoryGirl.create(:host, :with_config_group, :with_puppetclass, :with_parameter)
key = FactoryGirl.create(:puppetclass_lookup_key, :as_smart_class_param, :key_type => 'string',
:override => true, :puppetclass => host.puppetclasses.first)
LookupValue.create(:value => 'abc', :match => host.lookup_value_matcher, :lookup_key_id => key.id)
copy = host.clone
assert_equal host.host_classes.map(&:puppetclass_id), copy.host_classes.map(&:puppetclass_id)
assert_equal host.host_parameters.map(&:name), copy.host_parameters.map(&:name)
assert_equal host.host_parameters.map(&:value), copy.host_parameters.map(&:value)
assert_equal host.host_config_groups.map(&:config_group_id), copy.host_config_groups.map(&:config_group_id)
assert_equal host.lookup_values.map(&:key), copy.lookup_values.map(&:key)
assert_equal host.lookup_values.map(&:value), copy.lookup_values.map(&:value)
end
test '#classes etc. on cloned host return the same' do

Also available in: Unified diff