From 4eaf7cd06bc56539ae606b17e6e0455f80599290 Mon Sep 17 00:00:00 2001 From: Adam Ruzicka Date: Tue, 26 Mar 2024 13:35:20 +0100 Subject: [PATCH] Fixes #37299 - Fix puppet class assignment In case the puppet facet does not exist --- .../foreman_puppet/extensions/host_common.rb | 3 +-- test/models/foreman_puppet/host_test.rb | 12 ++++++++++++ test/models/foreman_puppet/hostgroup_test.rb | 12 ++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/models/concerns/foreman_puppet/extensions/host_common.rb b/app/models/concerns/foreman_puppet/extensions/host_common.rb index 1dacbd09..1fd5f5ab 100644 --- a/app/models/concerns/foreman_puppet/extensions/host_common.rb +++ b/app/models/concerns/foreman_puppet/extensions/host_common.rb @@ -9,8 +9,7 @@ def all_puppetclasses(env = environment) end def puppetclasses - return ForemanPuppet::Puppetclass.none unless puppet - puppet.puppetclasses + (puppet || build_puppet).puppetclasses end end end diff --git a/test/models/foreman_puppet/host_test.rb b/test/models/foreman_puppet/host_test.rb index aaa7eab0..b69245c8 100644 --- a/test/models/foreman_puppet/host_test.rb +++ b/test/models/foreman_puppet/host_test.rb @@ -325,5 +325,17 @@ class HostTest < ActiveSupport::TestCase h.save! assert_empty h.puppet.config_groups end + + test 'assign a puppet class to host without puppet facet' do + puppet_class = FactoryBot.create(:puppetclass) + host = FactoryBot.create(:host) + # This would raise the following exception + # NoMethodError: undefined method `<<' for # + host.puppetclasses << puppet_class + + assert_not_nil host.puppet + assert_includes host.puppet.puppetclasses, puppet_class + assert_includes host.puppetclasses, puppet_class + end end end diff --git a/test/models/foreman_puppet/hostgroup_test.rb b/test/models/foreman_puppet/hostgroup_test.rb index 352571f6..c70c16cc 100644 --- a/test/models/foreman_puppet/hostgroup_test.rb +++ b/test/models/foreman_puppet/hostgroup_test.rb @@ -10,5 +10,17 @@ class HostgroupTest < ActiveSupport::TestCase assert_equal 1, hostgroups.count assert_equal hostgroups.pluck(:id).sort, hostgroups.map(&:id).sort end + + test 'assign a puppet class to hostgroup without puppet facet' do + puppet_class = FactoryBot.create(:puppetclass) + hostgroup = FactoryBot.create(:hostgroup) + # This would raise the following exception + # NoMethodError: undefined method `<<' for # + hostgroup.puppetclasses << puppet_class + + assert_not_nil hostgroup.puppet + assert_includes hostgroup.puppet.puppetclasses, puppet_class + assert_includes hostgroup.puppetclasses, puppet_class + end end end