diff --git a/app/models/host/managed.rb b/app/models/host/managed.rb index bbf42b13473..c3268d4488a 100644 --- a/app/models/host/managed.rb +++ b/app/models/host/managed.rb @@ -779,11 +779,8 @@ def refresh_statuses(which = HostStatus.status_registry) end def get_status(type) status = host_statuses.detect { |s| s.type == type.to_s } - if status.nil? - host_statuses.new(:host => self, :type => type.to_s) - else - status - end + return status unless status.nil? + host_statuses.new(:host => self, :type => type.to_s) end def build_global_status(options = {}) @@ -952,7 +949,12 @@ def remove_reports end def refresh_build_status - get_status(HostStatus::BuildStatus).refresh + refresh_method = if new_record? + 'refresh' + else + 'refresh!' + end + get_status(HostStatus::BuildStatus).send(refresh_method) end def extract_params_from_object_ancestors(object) diff --git a/test/models/host_test.rb b/test/models/host_test.rb index 5485276e4a1..13b10911567 100644 --- a/test/models/host_test.rb +++ b/test/models/host_test.rb @@ -474,6 +474,25 @@ class HostTest < ActiveSupport::TestCase assert_equal status, new_status end + test 'host #get_status(HostStatus::BuildStatus).to_status matches in DB stored "status' do + host = FactoryBot.build(:host) + host.build = false + status = host.get_status(HostStatus::BuildStatus) + original_status = status.to_status + status.save! + host.save! + + assert_equal status.status, status.to_status + + host.build = true + host.valid? + + assert host.build? + status = host.get_status(HostStatus::BuildStatus) + assert_equal status.status, status.to_status + assert_not_equal original_status, status.to_status + end + test 'host #get_status(type) only builds a new status once' do host = FactoryBot.build_stubbed(:host) status1 = host.get_status(HostStatus::BuildStatus) @@ -518,7 +537,7 @@ class HostTest < ActiveSupport::TestCase end test 'build status is updated on host validation' do - host = FactoryBot.build_stubbed(:host) + host = FactoryBot.build(:host) host.build = false host.valid? original_status = host.get_status(HostStatus::BuildStatus).to_status @@ -808,7 +827,7 @@ class HostTest < ActiveSupport::TestCase end test "should allow build mode for unmanaged hosts" do - h = FactoryBot.build_stubbed(:host) + h = FactoryBot.build(:host) assert h.valid? h.build = true assert h.valid?