From f505efc2ebb4ea72aa008feee4d998d1f29bbbf2 Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Fri, 2 Aug 2019 06:32:55 -0400 Subject: [PATCH] Merge pull request #19087 from fdupont-redhat/v2v_dont_allow_ordering_finished_plan [V2V] Prevent a finished transformation plan from starting (cherry picked from commit 29aa3b6b26d1e42cb51006a67cd1c1313a7f75fc) https://bugzilla.redhat.com/show_bug.cgi?id=1718858 --- .../service_template_transformation_plan.rb | 3 ++- ...rvice_template_transformation_plan_spec.rb | 23 +++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/models/service_template_transformation_plan.rb b/app/models/service_template_transformation_plan.rb index c9b1ca76d54..64c2b545566 100644 --- a/app/models/service_template_transformation_plan.rb +++ b/app/models/service_template_transformation_plan.rb @@ -24,7 +24,8 @@ def transformation_mapping_resource end def validate_order - true + # Service template should not be orderable if all VMs have already been migrated + vm_resources.reject { |res| res.resource.is_tagged_with?('transformation_status/migrated', :ns => '/managed') }.present? end alias orderable? validate_order diff --git a/spec/models/service_template_transformation_plan_spec.rb b/spec/models/service_template_transformation_plan_spec.rb index bca388e191b..8b469c426c3 100644 --- a/spec/models/service_template_transformation_plan_spec.rb +++ b/spec/models/service_template_transformation_plan_spec.rb @@ -9,13 +9,6 @@ it { expect(subject.request_type).to eq("transformation_plan") } end - describe '#validate_order' do - it 'always allows a plan to be ordered' do - expect(subject.validate_order).to be_truthy - expect(subject.orderable?).to be_truthy # alias - end - end - let(:transformation_mapping) { FactoryBot.create(:transformation_mapping) } let(:transformation_mapping2) { FactoryBot.create(:transformation_mapping) } let(:apst) { FactoryBot.create(:service_template_ansible_playbook) } @@ -110,6 +103,22 @@ let(:miq_requests) { [FactoryBot.create(:service_template_transformation_plan_request, :request_state => "finished")] } let(:miq_requests_with_in_progress_request) { [FactoryBot.create(:service_template_transformation_plan_request, :request_state => "active")] } + describe '#validate_order' do + let(:service_template) { described_class.create_catalog_item(catalog_item_options) } + + it 'allows a plan to be ordered if all VMs have not been migrated' do + expect(service_template.validate_order).to be_truthy + expect(service_template.orderable?).to be_truthy # alias + end + + it 'denies a plan from bring ordered if all VMs have been migrated' do + vm1.tag_add('transformation_status/migrated', :ns => '/managed') + vm2.tag_add('transformation_status/migrated', :ns => '/managed') + expect(service_template.validate_order).to be_falsey + expect(service_template.orderable?).to be_falsey # alias + end + end + describe '.public_service_templates' do it 'display public service templates' do st1 = FactoryBot.create(:service_template_transformation_plan)