https://www.aeolusproject.org/redmine/issues/3560 --- src/app/controllers/pools_controller.rb | 11 +++++++ src/app/views/pools/destroy.xml.haml | 3 ++ src/config/routes.rb | 2 +- src/spec/controllers/pools_controller_spec.rb | 36 ++++++++++++++++++++++++- 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 src/app/views/pools/destroy.xml.haml
diff --git a/src/app/controllers/pools_controller.rb b/src/app/controllers/pools_controller.rb index 931d25d..3be0ba5 100644 --- a/src/app/controllers/pools_controller.rb +++ b/src/app/controllers/pools_controller.rb @@ -259,7 +259,9 @@ class PoolsController < ApplicationController failed = [] permission_failed = [] error_messages = [] + pool_id = nil Pool.find(ids_list(['pools_selected'])).each do |pool| + pool_id = pool.id if pool.id == MetadataObject.lookup("self_service_default_pool").id error_messages << t("pools.flash.error.default_pool_not_deleted") elsif !check_privilege(Privilege::MODIFY, pool) @@ -287,6 +289,15 @@ class PoolsController < ApplicationController render :partial => 'list' end format.json { render :json => {:success => destroyed, :errors => failed} } + format.xml { + if failed.present? + raise(Aeolus::Conductor::API::Error.new(500, flash[:error])) + elsif error_messages.present? + raise(Aeolus::Conductor::API::Error.new(500, error_messages)) + else + render :destroy, :locals => { :pool_id => pool_id } + end + } end end
diff --git a/src/app/views/pools/destroy.xml.haml b/src/app/views/pools/destroy.xml.haml new file mode 100644 index 0000000..4ce7e46 --- /dev/null +++ b/src/app/views/pools/destroy.xml.haml @@ -0,0 +1,3 @@ +!!! XML +%pool{:id => pool_id} + %status="DELETED" diff --git a/src/config/routes.rb b/src/config/routes.rb index 8373342..54231f0 100644 --- a/src/config/routes.rb +++ b/src/config/routes.rb @@ -287,7 +287,7 @@ Conductor::Application.routes.draw do resources :provider_accounts, :only => [:index, :show, :destroy] resources :provider_types, :only => [:index, :show] resources :hardware_profiles, :only => [:index, :show, :destroy, :create] - resources :pools, :only => [:index, :show, :create, :update] + resources :pools, :only => [:index, :show, :create, :update, :destroy] end
#match 'matching_profiles', :to => '/hardware_profiles/matching_profiles/:hardware_profile_id/provider/:provider_id', :controller => 'hardware_profiles', :action => 'matching_profiles', :conditions => { :method => :get }, :as =>'matching_profiles' diff --git a/src/spec/controllers/pools_controller_spec.rb b/src/spec/controllers/pools_controller_spec.rb index 5afc66c..87cdcdb 100644 --- a/src/spec/controllers/pools_controller_spec.rb +++ b/src/spec/controllers/pools_controller_spec.rb @@ -252,9 +252,43 @@ describe PoolsController do xml = Nokogiri::XML(response.body) xml.xpath("/errors/error/message").text.should == "Name can't be blank" end - end
+ describe "#destroy" do + + it "delete an existing pool" do + @pool = FactoryGirl.create :pool + get :destroy, :id => @pool.id + + response.status.should be_eql(200) + response.should have_content_type("application/xml") + response.body.should be_xml + xml = Nokogiri::XML(response.body) + xml.xpath("/pool/@id").text.should == "#{@pool.id}" + xml.xpath("/pool/status").text.should == "DELETED" + end + + it "delete a missing pool should throw error" do + get :destroy, :id => -1 + + response.status.should be_eql(404) + response.should have_content_type("application/xml") + response.body.should be_xml + xml = Nokogiri::XML(response.body) + xml.xpath("/error/message").text.should == "Couldn't find Pool with id=-1" + end + + it "delete default pool should throw error" do + @pool = FactoryGirl.create :pool + get :destroy, :id => 1 + + response.status.should be_eql(500) + response.should have_content_type("application/xml") + response.body.should be_xml + xml = Nokogiri::XML(response.body) + xml.xpath("/error/message").text.should == "The default pool cannot be deleted" + end + end end