diff --git a/app/models/metric/ci_mixin.rb b/app/models/metric/ci_mixin.rb index 6040c207168..5cf9a3aabf5 100644 --- a/app/models/metric/ci_mixin.rb +++ b/app/models/metric/ci_mixin.rb @@ -21,8 +21,9 @@ module Metric::CiMixin end supports :capture do - unless self.class.parent::MetricsCapture.instance_methods.include?(:perf_collect_metrics) - unsupported_reason_add(:metrics, _('This provider does not support metrics collection')) + metrics_capture_klass = "#{self.class.parent.name}::MetricsCapture".safe_constantize + unless metrics_capture_klass&.method_defined?(:perf_collect_metrics) + unsupported_reason_add(:capture, _('This provider does not support metrics collection')) end end end diff --git a/spec/models/metric/ci_mixin_spec.rb b/spec/models/metric/ci_mixin_spec.rb index 36b8a67bc47..0c9f01837e8 100644 --- a/spec/models/metric/ci_mixin_spec.rb +++ b/spec/models/metric/ci_mixin_spec.rb @@ -63,4 +63,26 @@ end end end + + context "#supports_capture?" do + context "with a VM" do + let(:unsupported_vm) { FactoryGirl.create(:vm_microsoft) } + let(:supported_vm) { FactoryGirl.create(:vm_vmware) } + + it "correctly checks capture support" do + expect(unsupported_vm.supports_capture?).to be_falsy + expect(supported_vm.supports_capture?).to be_truthy + end + end + + context "with a Host" do + let(:unsupported_host) { FactoryGirl.create(:host_microsoft) } + let(:supported_host) { FactoryGirl.create(:vm_vmware) } + + it "correctly checks capture support" do + expect(unsupported_host.supports_capture?).to be_falsy + expect(supported_host.supports_capture?).to be_truthy + end + end + end end