[PATCH conductor] RM 3481 - delete provider account via api
John Eckersberg
jeckersb at redhat.com
Wed Jul 25 16:55:50 UTC 2012
Richard Su <rwsu at redhat.com> writes:
> https://www.aeolusproject.org/redmine/issues/3461
>
> Raises ProviderAccountNotFound exception and 404 when provider account
> is not found.
> ---
> .../controllers/provider_accounts_controller.rb | 26 ++++++++++++++----
> src/app/views/provider_accounts/destroy.xml.haml | 3 ++
> src/config/locales/en.yml | 1 +
> src/config/routes.rb | 2 +-
> .../provider_accounts_controller_spec.rb | 28 ++++++++++++++++++++
> 5 files changed, 53 insertions(+), 7 deletions(-)
> create mode 100644 src/app/views/provider_accounts/destroy.xml.haml
>
> diff --git a/src/app/controllers/provider_accounts_controller.rb b/src/app/controllers/provider_accounts_controller.rb
> index ce0d2ab..9db4e39 100644
> --- a/src/app/controllers/provider_accounts_controller.rb
> +++ b/src/app/controllers/provider_accounts_controller.rb
> @@ -144,13 +144,27 @@ class ProviderAccountsController < ApplicationController
> def destroy
> @provider_account = ProviderAccount.find(params[:id])
> require_privilege(Privilege::MODIFY, @provider_account)
> - @provider = Provider.find(params[:provider_id])
> - if @provider_account.destroy
> - flash[:notice] = t"provider_accounts.flash.notice.deleted"
> - else
> - flash[:error] = t"provider_accounts.flash.error.not_deleted"
> + is_deleted = @provider_account && @provider_account.destroy
> +
> + respond_to do |format|
> + format.html {
> + if is_deleted
> + flash[:notice] = t"provider_accounts.flash.notice.deleted"
> + else
> + flash[:error] = t"provider_accounts.flash.error.not_deleted"
> + end
> +
> + @provider = Provider.find(params[:provider_id])
> + redirect_to edit_provider_path(@provider, :details_tab => 'accounts')
> + }
> + format.xml {
> + if is_deleted
> + render 'destroy', :locals => { :provider_account_id => @provider_account.id }
> + else
> + raise(Aeolus::Conductor::API::ProviderAccountNotFound.new(404, t("api.error_messages.provider_account_not_found_for_id", :id => params[:id])))
> + end
> + }
> end
> - redirect_to edit_provider_path(@provider, :details_tab => 'accounts')
> end
>
> def multi_destroy
> diff --git a/src/app/views/provider_accounts/destroy.xml.haml b/src/app/views/provider_accounts/destroy.xml.haml
> new file mode 100644
> index 0000000..1f62636
> --- /dev/null
> +++ b/src/app/views/provider_accounts/destroy.xml.haml
> @@ -0,0 +1,3 @@
> +!!! XML
> +%provider_account{:id => provider_account_id}
> + %status="DELETED"
> diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
> index 9295373..ed03450 100644
> --- a/src/config/locales/en.yml
> +++ b/src/config/locales/en.yml
> @@ -1437,6 +1437,7 @@ en:
> no_matching_target_image: Could not find any matching Target Images
> no_provider_account_given: No provider account given
> provider_account_not_found: Could not find provider account for name %{name}
> + provider_account_not_found_for_id: Could not find provider account for id %{id}
> provider_image_not_found: Could not find ProviderImage %{providerimage}
> provider_image_status_not_found: Could not find status for ProviderImage %{providerimage}
> push_error: "Could not push TargetImage %{targetimage} to %{account} and error %{error}"
> diff --git a/src/config/routes.rb b/src/config/routes.rb
> index e7f26c5..d03009f 100644
> --- a/src/config/routes.rb
> +++ b/src/config/routes.rb
> @@ -283,7 +283,7 @@ Conductor::Application.routes.draw do
> resources :providers, :only => [:index, :show, :create, :update, :destroy] do
> resources :provider_accounts, :only => [:index]
> end
> - resources :provider_accounts, :only => [:index, :show]
> + resources :provider_accounts, :only => [:index, :show, :destroy]
> resources :provider_types, :only => [:index, :show]
> end
>
> diff --git a/src/spec/controllers/provider_accounts_controller_spec.rb b/src/spec/controllers/provider_accounts_controller_spec.rb
> index a88bd25..3ed4250 100644
> --- a/src/spec/controllers/provider_accounts_controller_spec.rb
> +++ b/src/spec/controllers/provider_accounts_controller_spec.rb
> @@ -242,6 +242,34 @@ describe ProviderAccountsController do
>
> end
> end # #index
> +
> + describe "#destroy" do
> + before(:each) do
> + @provider_account = FactoryGirl.create(:mock_provider_account)
> + end
> +
> + it "when requested provider account exists" do
> + ProviderAccount.stub(:find).and_return(@provider_account)
> + get :destroy, :id => @provider_account.id
> + response.status.should be_eql(200)
> + response.should have_content_type("application/xml")
> + response.body.should be_xml
> + subject = Nokogiri::XML(response.body)
> + xml_provider_account = subject.xpath("//provider_account[@id=\"#{@provider_account.id}\"]")
> + xml_provider_account.xpath('@id').text.strip.should == "#{@provider_account.id}"
> + xml_provider_account.xpath('status').text.strip.should == "DELETED"
> + end
> +
> + it "when requested provider account doesn't exists" do
> + ProviderAccount.stub(:find).and_return(nil)
> + get :destroy, :id => "id_that_does_not_exist"
> + response.status.should be_eql(404)
> + response.should have_content_type("application/xml")
> + response.body.should be_xml
> + subject = Nokogiri::XML(response.body)
> + subject.xpath('//error/code').text.strip.should == "ProviderAccountNotFound"
> + end
> + end #destroy
> end
>
> end
> --
> 1.7.7.6
ACK and pushed, works as advertised!
More information about the aeolus-devel
mailing list