diff --git a/app/models/mixins/ci_feature_mixin.rb b/app/models/mixins/ci_feature_mixin.rb index e0f5f0159f9..baee0b1c8c9 100644 --- a/app/models/mixins/ci_feature_mixin.rb +++ b/app/models/mixins/ci_feature_mixin.rb @@ -1,7 +1,5 @@ module CiFeatureMixin - extend ActiveSupport::Concern - def retireable? - resource.present? && resource.respond_to?(:retire_now) && resource.type.present? + true end end diff --git a/app/models/service.rb b/app/models/service.rb index 17f4ca8caa9..867f081300a 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -215,6 +215,10 @@ def composite? children.present? end + def retireable? + type.present? + end + def atomic? children.empty? end diff --git a/app/models/service_retire_task.rb b/app/models/service_retire_task.rb index d1fe985cbc8..0178ad104fc 100644 --- a/app/models/service_retire_task.rb +++ b/app/models/service_retire_task.rb @@ -32,7 +32,7 @@ def after_request_task_create def create_retire_subtasks(parent_service) parent_service.direct_service_children.each { |child| create_retire_subtasks(child) } parent_service.service_resources.collect do |svc_rsc| - next unless svc_rsc.try(:retireable?) + next unless svc_rsc.resource.try(:retireable?) # TODO: the next line deals with the filtering for provisioning # (https://github.com/ManageIQ/manageiq/blob/3921e87915b5a69937b9d4a70bb24ab71b97c165/app/models/service_template/filter.rb#L5) # which should be extended to retirement as part of later work diff --git a/spec/models/mixins/ci_feature_mixin_spec.rb b/spec/models/mixins/ci_feature_mixin_spec.rb new file mode 100644 index 00000000000..30fe3d8a3fa --- /dev/null +++ b/spec/models/mixins/ci_feature_mixin_spec.rb @@ -0,0 +1,41 @@ +describe CiFeatureMixin do + let(:service) { FactoryGirl.create(:service) } + describe "#retireable?" do + it "vm is retireable" do + FactoryGirl.create(:service_resource, :service => service, :resource => FactoryGirl.create(:vm)) + + expect(service.service_resources.first.resource.retireable?).to eq(true) + end + + it "orchestration stack is retireable" do + FactoryGirl.create(:service_resource, :service => service, :resource => FactoryGirl.create(:orchestration_stack_amazon)) + + expect(service.service_resources.first.resource.retireable?).to eq(true) + end + + it "job not retireable" do + FactoryGirl.create(:service_resource, :service => service, :resource => FactoryGirl.create(:embedded_ansible_job)) + + expect(service.service_resources.first.resource.retireable?).to eq(false) + end + + context "service" do + context "with type" do + let(:service1) { FactoryGirl.create(:service_ansible_tower, :type => ServiceAnsibleTower) } + it "is retireable" do + FactoryGirl.create(:service_resource, :service => service, :resource => service1) + + expect(service.service_resources.first.resource.retireable?).to eq(true) + end + end + + context "without type" do + it "is not retireable" do + FactoryGirl.create(:service_resource, :service => service, :resource => FactoryGirl.create(:service)) + + expect(service.service_resources.first.resource.retireable?).to eq(false) + end + end + end + end +end diff --git a/spec/models/service_retire_task_spec.rb b/spec/models/service_retire_task_spec.rb index d9ec99fd483..be98a73a28e 100644 --- a/spec/models/service_retire_task_spec.rb +++ b/spec/models/service_retire_task_spec.rb @@ -97,58 +97,6 @@ end end - describe "#retireable?" do - include_context "service_bundle" - - context "without srr" do - it "is not retireable" do - service.service_resources << FactoryGirl.create(:service_resource, :resource_type => "VmOrTemplate", :service_id => service_c1.id, :resource_id => nil) - @service_retire_task = FactoryGirl.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] }) - - expect(@service_retire_task.retireable?(service.service_resources.first, service)).to be(false) - end - end - - context "srr nonresponsive to retireable?" do - it "is not retireable" do - service.service_resources << FactoryGirl.create(:service_resource, :resource_type => "VmOrTemplate", :service_id => service_c1.id, :resource_id => User.first.id) - @service_retire_task = FactoryGirl.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] }) - - expect(@service_retire_task.retireable?(service.service_resources.first, service)).to be(false) - end - end - - context "srr sans type" do - let(:vm_without_type) { FactoryGirl.create(:vm, :type => nil) } - it "is not retireable" do - service.service_resources << FactoryGirl.create(:service_resource, :resource_type => "VmOrTemplate", :service_id => service_c1.id, :resource_id => vm_without_type.id) - @service_retire_task = FactoryGirl.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] }) - - expect(@service_retire_task.retireable?(service.service_resources.first, service)).to be(false) - end - end - - context "svc_rsc resource_type is not ServiceTemplate" do - it "is not retireable" do - service.service_resources << FactoryGirl.create(:service_resource, :resource_type => "VmOrTemplate", :service_id => service_c1.id, :resource_id => service_c1.id) - @service_retire_task = FactoryGirl.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] }) - allow(@service_retire_task.class).to receive(:include_service_template?).with(@service_retire_task, service.service_resources.first.id, service).and_return(true) - - expect(@service_retire_task.retireable?(service.service_resources.first, service)).to be(false) - end - end - - context "class includes service template" do - it "is not retireable" do - service.service_resources << FactoryGirl.create(:service_resource, :resource_type => "ServiceTemplate", :service_id => service_c1.id, :resource_id => vm.id) - @service_retire_task = FactoryGirl.create(:service_retire_task, :source => service, :miq_request_task_id => nil, :miq_request_id => @miq_request.id, :options => {:src_ids => [service.id] }) - allow(@service_retire_task.class).to receive(:include_service_template?).with(@service_retire_task, service.service_resources.first.id, service).and_return(false) - - expect(@service_retire_task.retireable?(service.service_resources.first, service)).to be(false) - end - end - end - describe "deliver_to_automate" do before do allow(MiqServer).to receive(:my_zone).and_return(Zone.seed.name)