Skip to content

Commit

Permalink
Merge pull request #6498 from hstastna/Operations_Instances_of_Networ…
Browse files Browse the repository at this point in the history
…kRouter

Allow performing operations on Instances of a chosen Network Router
  • Loading branch information
martinpovolny committed Dec 13, 2019
2 parents 3254970 + ee25758 commit 51cf3ba
Show file tree
Hide file tree
Showing 4 changed files with 182 additions and 33 deletions.
2 changes: 1 addition & 1 deletion app/controllers/application_controller/ci_processing.rb
Expand Up @@ -636,7 +636,7 @@ def testable_action(action)
case controller
when 'ems_cluster'
ems_cluster_untestable_actions.exclude?(action)
when 'auth_key_pair_cloud', 'availability_zone', 'cloud_network', 'cloud_tenant', 'ems_cloud', 'ems_infra', 'flavor', 'host', 'host_aggregate', 'resource_pool', 'storage', 'vm_cloud'
when 'auth_key_pair_cloud', 'availability_zone', 'cloud_network', 'cloud_tenant', 'ems_cloud', 'ems_infra', 'flavor', 'host', 'host_aggregate', 'network_router', 'resource_pool', 'storage', 'vm_cloud'
other_untestable_actions.exclude?(action)
when 'vm_infra'
vm_infra_untestable_actions.exclude?(action)
Expand Down
14 changes: 1 addition & 13 deletions app/controllers/network_router_controller.rb
Expand Up @@ -23,14 +23,6 @@ def button
@refresh_div = "main_div"

case params[:pressed]
when "cloud_subnet_tag"
return tag("CloudSubnet")
when "custom_button"
custom_buttons
when 'instance_compare'
comparemiq
when "instance_tag"
return tag("VmOrTemplate")
when "network_router_add_interface"
javascript_redirect(:action => "add_interface_select", :id => checked_item_id)
when "network_router_edit"
Expand All @@ -39,12 +31,8 @@ def button
javascript_redirect(:action => "new")
when "network_router_remove_interface"
javascript_redirect(:action => "remove_interface_select", :id => checked_item_id)
when "network_router_tag"
return tag("NetworkRouter")
when "floating_ip_tag"
return tag("FloatingIp")
else
render_flash
super
end
end

Expand Down
2 changes: 2 additions & 0 deletions config/routes.rb
Expand Up @@ -1793,6 +1793,7 @@
edit
index
new
protect
remove_interface_select
show
show_list
Expand All @@ -1806,6 +1807,7 @@
create
form_field_changed
listnav_search_selected
protect
quick_search
remove_interface
remove_interface_select
Expand Down
197 changes: 178 additions & 19 deletions spec/controllers/network_router_controller_spec.rb
Expand Up @@ -58,12 +58,11 @@
login_as FactoryBot.create(:user, :features => %w(none))
end

subject do
get :show, :params => {:id => @router.id}
end
subject { get :show, :params => {:id => @router.id} }

context "render listnav partial" do
render_views

it do
is_expected.to have_http_status 200
is_expected.to render_template(:partial => "layouts/listnav/_network_router")
Expand Down Expand Up @@ -317,43 +316,203 @@
end

describe '#button' do
let(:router) { FactoryBot.create(:network_router) }

before { controller.params = params }

context 'tagging instances from a list of instances, accessed from the details page of a network router' do
let(:params) { {:pressed => "instance_tag"} }
context 'tagging Instances in a nested list' do
let(:params) { {:pressed => 'instance_tag'} }

it 'calls tag method for tagging instances' do
expect(controller).to receive(:tag).with("VmOrTemplate")
it 'calls tag method' do
expect(controller).to receive(:tag).with(VmOrTemplate)
controller.send(:button)
end
end

context 'tagging cloud subnets from a list of subnets, accessed from the details page of a network router' do
let(:params) { {:pressed => "cloud_subnet_tag"} }
%w[cloud_subnet floating_ip network_router security_group].each do |item|
context "tagging #{item.camelize}" do
let(:params) { {:pressed => "#{item}_tag"} }

it 'calls tag method for tagging cloud subnets' do
expect(controller).to receive(:tag).with("CloudSubnet")
it 'calls tag method' do
expect(controller).to receive(:tag).with(item.camelize.safe_constantize)
controller.send(:button)
end
end
end

context 'comparing Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_compare'} }

it 'calls comparemiq to compare Instances' do
expect(controller).to receive(:comparemiq)
controller.send(:button)
end
end

context 'tagging floating ips from a list of floating ips, accessed from the details page of a network router' do
let(:params) { {:pressed => "floating_ip_tag"} }
context 'adding Interface to Router' do
let(:params) { {:pressed => 'network_router_add_interface', :id => router.id.to_s} }

it 'redirects to add_interface_select' do
expect(controller).to receive(:javascript_redirect).with(:action => 'add_interface_select', :id => router.id.to_s)
controller.send(:button)
end
end

it 'calls tag method for tagging floating ips' do
expect(controller).to receive(:tag).with("FloatingIp")
context 'removing Interface from Router' do
let(:params) { {:pressed => 'network_router_remove_interface', :id => router.id.to_s} }

it 'redirects to remove_interface_select' do
expect(controller).to receive(:javascript_redirect).with(:action => 'remove_interface_select', :id => router.id.to_s)
controller.send(:button)
end
end

context 'comparing Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_compare'} }
context 'editing Network Router' do
let(:params) { {:pressed => 'network_router_edit', :id => router.id.to_s} }

it 'calls comparemiq to compare Instances' do
expect(controller).to receive(:comparemiq)
it 'redirects to edit method' do
expect(controller).to receive(:javascript_redirect).with(:action => 'edit', :id => router.id.to_s)
controller.send(:button)
end
end

context 'adding new Network Router' do
let(:params) { {:pressed => 'network_router_new'} }

it 'redirects to new method' do
expect(controller).to receive(:javascript_redirect).with(:action => 'new')
controller.send(:button)
end
end

context 'custom buttons' do
let(:params) { {:pressed => 'custom_button'} }

it 'calls custom_buttons method' do
expect(controller).to receive(:custom_buttons)
controller.send(:button)
end
end

%w[delete evacuate pause refresh reset resize retire scan shelve start stop suspend terminate].each do |action|
context "#{action} for selected Instances displayed in a nested list" do
let(:params) { {:pressed => "instance_#{action}"} }

it "calls #{action + 'vms'} method" do
allow(controller).to receive(:show)
allow(controller).to receive(:performed?).and_return(true)
expect(controller).to receive((action + 'vms').to_sym)
controller.send(:button)
end
end
end

context 'editing Instance displayed in a nested list' do
let(:params) { {:pressed => 'instance_edit'} }

it 'calls edit_record method' do
allow(controller).to receive(:render_or_redirect_partial)
expect(controller).to receive(:edit_record)
controller.send(:button)
end
end

context 'setting Ownership for Instances in a nested list' do
let(:params) { {:pressed => 'instance_ownership'} }

it 'calls set_ownership' do
expect(controller).to receive(:set_ownership)
controller.send(:button)
end
end

context 'managing policies for Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_protect'} }

it 'calls assign_policies method' do
expect(controller).to receive(:assign_policies).with(VmOrTemplate)
controller.send(:button)
end
end

context 'policy simulation for Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_policy_sim'} }

it 'calls polsimvms method' do
expect(controller).to receive(:polsimvms)
controller.send(:button)
end
end

context 'provisioning Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_miq_request_new'} }

it 'calls prov_redirect' do
allow(controller).to receive(:render_or_redirect_partial)
expect(controller).to receive(:prov_redirect)
controller.send(:button)
end
end

context 'retirement for Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_retire_now'} }

it 'calls retirevms_now' do
allow(controller).to receive(:show)
allow(controller).to receive(:performed?).and_return(true)
expect(controller).to receive(:retirevms_now)
controller.send(:button)
end
end

context 'Live Migrate of Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_live_migrate'} }

it 'calls livemigratevms' do
expect(controller).to receive(:livemigratevms)
controller.send(:button)
end
end

context 'Soft Reboot of Instances displayed in a nested list' do
let(:params) { {:pressed => 'instance_guest_restart'} }

it 'calls guestreboot' do
allow(controller).to receive(:show)
allow(controller).to receive(:performed?).and_return(true)
expect(controller).to receive(:guestreboot)
controller.send(:button)
end
end

context 'Check Compliance of Instances displayed in a nested list' do
let(:params) { {:miq_grid_checks => vm_instance.id.to_s, :pressed => 'instance_check_compliance', :id => router.id.to_s, :controller => 'network_router'} }
let(:vm_instance) { FactoryBot.create(:vm_or_template) }

before { allow(controller).to receive(:performed?).and_return(true) }

it 'calls check_compliance_vms' do
allow(controller).to receive(:show)
expect(controller).to receive(:check_compliance_vms)
controller.send(:button)
end

context 'Instance with VM Compliance policy assigned' do
let(:policy) { FactoryBot.create(:miq_policy, :mode => 'compliance', :towhat => 'Vm', :active => true) }

before do
EvmSpecHelper.create_guid_miq_server_zone
allow(controller).to receive(:assert_privileges)
allow(MiqPolicy).to receive(:policy_for_event?).and_return(true)
allow(controller).to receive(:drop_breadcrumb)
vm_instance.add_policy(policy)
end

it 'initiates Check Compliance action' do
controller.send(:button)
expect(controller.instance_variable_get(:@flash_array)).to eq([{:message => 'Check Compliance initiated for 1 VM and Instance from the ManageIQ Database', :level => :success}])
end
end
end
end
end

0 comments on commit 51cf3ba

Please sign in to comment.