From d836a8383f1188f23b6ffbffa1a8fbbf52bef139 Mon Sep 17 00:00:00 2001 From: orrabin Date: Thu, 29 Dec 2016 16:14:06 +0200 Subject: [PATCH] Fixes #17870 - Empty boolean matcher should not turn into false --- app/models/lookup_value.rb | 15 +++++---------- test/models/lookup_value_test.rb | 7 +++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/models/lookup_value.rb b/app/models/lookup_value.rb index feef4d4da18..9ee01f639d3 100644 --- a/app/models/lookup_value.rb +++ b/app/models/lookup_value.rb @@ -11,8 +11,8 @@ class LookupValue < ActiveRecord::Base delegate :key, :to => :lookup_key before_validation :sanitize_match - before_validation :validate_and_cast_value, :unless => Proc.new{|p| p.omit } - validate :validate_value, :ensure_fqdn_exists, :ensure_hostgroup_exists, :ensure_matcher_exists + validate :ensure_fqdn_exists, :ensure_hostgroup_exists, :ensure_matcher_exists + validate :validate_value, :unless => Proc.new{|p| p.omit } attr_accessor :host_or_hostgroup @@ -44,6 +44,7 @@ def value_before_type_cast end def validate_value + validate_and_cast_value Foreman::Parameters::Validator.new(self, :type => lookup_key.validator_type, :validate_with => lookup_key.validator_rule, @@ -58,17 +59,11 @@ def sanitize_match end def validate_and_cast_value - return true if self.marked_for_destruction? || !self.value.is_a?(String) - begin - unless self.lookup_key.contains_erb?(value) - Foreman::Parameters::Caster.new(self, :attribute_name => :value, :to => lookup_key.key_type).cast! - end - true + return if !self.value.is_a?(String) || self.lookup_key.contains_erb?(value) + Foreman::Parameters::Caster.new(self, :attribute_name => :value, :to => lookup_key.key_type).cast! rescue StandardError, SyntaxError => e Foreman::Logging.exception("Error while parsing #{lookup_key}", e) errors.add(:value, _("is invalid %s") % lookup_key.key_type) - false - end end def ensure_fqdn_exists diff --git a/test/models/lookup_value_test.rb b/test/models/lookup_value_test.rb index 466c8ec770d..80cc3fdc272 100644 --- a/test/models/lookup_value_test.rb +++ b/test/models/lookup_value_test.rb @@ -213,6 +213,13 @@ def valid_attrs2 assert_equal "something does not exist in order field", value.errors[:match].first end + test "shouldn't save with empty boolean matcher for smart class parameter" do + lookup_key = FactoryGirl.create(:puppetclass_lookup_key, :key_type => 'boolean', :override => true, + :default_value => "true", :description => 'description') + lookup_value = FactoryGirl.build(:lookup_value, :lookup_key => lookup_key, :match => "os=fake", :value => '') + refute lookup_value.valid? + end + context "when key is a boolean and default_value is a string" do def setup @key = FactoryGirl.create(:puppetclass_lookup_key, :as_smart_class_param,