From d88e9221901f0079a60ecf11fd00a37b875fa4dc Mon Sep 17 00:00:00 2001 From: Greg McCullough Date: Tue, 18 Oct 2016 17:32:44 +0200 Subject: [PATCH] Merge pull request #11718 from lfu/event_no_set_type_1379854 Fix the issue that user can't add alerts. (cherry picked from commit 8b43521a41cf3a6fe9832badf9a2e78b4cbb8430) https://bugzilla.redhat.com/show_bug.cgi?id=1379854 --- .../miq_policy_controller/alerts.rb | 3 +- app/models/miq_event_definition.rb | 8 ++-- spec/models/miq_event_definition_spec.rb | 44 +++++++++++++++++++ 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/app/controllers/miq_policy_controller/alerts.rb b/app/controllers/miq_policy_controller/alerts.rb index 5197d2c940f..ae92788fdae 100644 --- a/app/controllers/miq_policy_controller/alerts.rb +++ b/app/controllers/miq_policy_controller/alerts.rb @@ -277,8 +277,7 @@ def alert_build_edit_screen # Build hash of arrays of all events by event type @edit[:events] = {} - MiqEventDefinition.all_events.each do |e| - next if e.name.ends_with?("compliance_check") + MiqEventDefinition.all_control_events.each do |e| @edit[:events][e.id] = (e.etype.description + ": " + e.description) end diff --git a/app/models/miq_event_definition.rb b/app/models/miq_event_definition.rb index 1ba307c2d1e..72e6599c86a 100644 --- a/app/models/miq_event_definition.rb +++ b/app/models/miq_event_definition.rb @@ -21,6 +21,10 @@ def self.all_events where(:event_type => "Default") end + def self.all_control_events + all_events.where.not("name like ?", "%compliance_check").select { |e| e.etype } + end + def miq_policies p_ids = MiqPolicyContent.where(:miq_event_definition_id => id).uniq.pluck(:miq_policy_id) MiqPolicy.where(:id => p_ids).to_a @@ -63,9 +67,7 @@ def self.import_from_hash(event, options = {}) end def etype - set = memberof.first - raise "unexpected error, no type found for event #{name}" if set.nil? - set + memberof.first.tap { |set| _log.error("No type found for event #{name}") if set.nil? } end def self.etypes diff --git a/spec/models/miq_event_definition_spec.rb b/spec/models/miq_event_definition_spec.rb index ce7e81cc342..0b2ec5c7216 100644 --- a/spec/models/miq_event_definition_spec.rb +++ b/spec/models/miq_event_definition_spec.rb @@ -55,4 +55,48 @@ def create_set!(name) end end end + + describe '#etype' do + it "returns event set type" do + set_type = 'set_testing' + set = MiqEventDefinitionSet.create(:name => set_type, :description => "Set testing") + event = FactoryGirl.create(:miq_event_definition, :name => "vm_start") + set.add_member(event) + + expect(event.etype.name).to eq(set_type) + end + + it "returns nil when not belong to any event set" do + event = FactoryGirl.create(:miq_event_definition, :name => "test_event") + expect(event.etype).to be_nil + end + end + + describe '.all_control_events' do + subject { MiqEventDefinition.all_control_events } + + before do + com_set = MiqEventDefinitionSet.create(:name => "compliance", :description => "Compliance Events") + FactoryGirl.create(:miq_event_definition, + :name => "host_compliance_check", + :event_type => "Default").tap { |e| com_set.add_member(e) } + end + + it 'has all default control policy events with set type' do + event = FactoryGirl.create(:miq_event_definition, :name => "some_event", :event_type => "Default") + set = MiqEventDefinitionSet.create(:name => "evm_operations", :description => "EVM Events") + set.add_member(event) + + expect(subject.include?(event)).to be true + end + + it 'has not the events for compliance policy' do + expect(subject.any? { |e| e.name.ends_with?("compliance_check") }).to be false + end + + it 'has not the events without a set type' do + event = FactoryGirl.create(:miq_event_definition, :name => "test_event", :event_type => "Default") + expect(subject.include?(event)).to be false + end + end end