On 11/15/2010 12:20 PM, [email protected] wrote:
> From: Martyn Taylor<[email protected]>
>
> ---
> src/app/controllers/provider_controller.rb | 27 +++++++++------
> src/app/models/provider.rb | 1 +
> src/app/views/provider/_providers.haml | 2 +
> src/db/test.sqlite3-journal | Bin 0 -> 7736 bytes
> src/features/provider.feature | 19 ++++++++++-
> src/features/step_definitions/provider_steps.rb | 41
> +++++++++++++++++++++-
> src/features/support/custom.rb | 12 +++---
> src/spec/factories/replicated_image.rb | 5 +++
> 8 files changed, 87 insertions(+), 20 deletions(-)
> create mode 100644 src/db/test.sqlite3-journal
> create mode 100644 src/spec/factories/replicated_image.rb
>
> diff --git a/src/app/controllers/provider_controller.rb
> b/src/app/controllers/provider_controller.rb
> index da5c9bb..8d6ff1f 100644
> --- a/src/app/controllers/provider_controller.rb
> +++ b/src/app/controllers/provider_controller.rb
> @@ -99,19 +99,24 @@ class ProviderController< ApplicationController
> end
>
> def destroy
> - if request.post?
> - @provider = Provider.find(params[:provider][:id])
> - require_privilege(Privilege::PROVIDER_MODIFY, p)
> - if @provider.destroy and @provider.destroyed?
> - redirect_to :action => "index"
> - else
> - flash[:error] = {
> - :summary => "Failed to delete Provider",
> - :failures => @provider.errors.full_messages,
> - }
> - render :action => 'show'
> + if request.post? || request.delete?
> + @provider = Provider.find(params[:id])
> + require_privilege(Privilege::PROVIDER_MODIFY, @provider)
> + if @provider.destroyable?
destroyable? is defined as before_destroy callback, no need to call it
explicitly
> + if @provider.destroy and @provider.destroyed?
> + redirect_to :action => "index"
> + flash[:notice] = "Provider Deleted"
> + return
> + end
> end
> +
> + flash[:error] = {
> + :summary => "Failed to delete Provider",
> + :failures => @provider.errors.full_messages,
> + }
> + render :action => 'show'
this render is not necessary because of another render 2 lines below
> end
> + render :action => 'show'
> end
>
> def hardware_profiles
> diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb
> index 6ec3cc3..40ad1b5 100644
> --- a/src/app/models/provider.rb
> +++ b/src/app/models/provider.rb
> @@ -126,4 +126,5 @@ class Provider< ActiveRecord::Base
> def valid_framework?
> connect.nil? ? false : true
> end
> +
> end
> diff --git a/src/app/views/provider/_providers.haml
> b/src/app/views/provider/_providers.haml
> index f051692..f4eeef9 100644
> --- a/src/app/views/provider/_providers.haml
> +++ b/src/app/views/provider/_providers.haml
> @@ -11,3 +11,5 @@
> = submit_tag t(:edit), :disabled => ('disabled' unless @provider and
> ['show', 'accounts'].include? controller.action_name)
> - form_tag({:controller => 'provider', :action => 'new'}, {:method =>
> :get , :class => 'buttononly'}) do
> %input{ :type => 'submit', :value => t(:add), :disabled =>
> ('disabled' unless @providers.length == 0) }
> + - form_tag({:controller => 'provider', :action => 'destroy', :id =>
> @provider}, {:method => :post , :class => 'buttononly'}) do
> + = submit_tag 'delete', :disabled => ('disabled' unless @provider and
> ['show', 'accounts'].include? controller.action_name)
> \ No newline at end of file
> diff --git a/src/db/test.sqlite3-journal b/src/db/test.sqlite3-journal
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..fa1b22dd162cf2d1ec3691ec9f59d1b861bdc67c
> GIT binary patch
> literal 7736
> zcmeh{...@15co6jk0b`_f;FUol$HJ=3J1Qnfo1%t>}zLXBG!5P`HkNbv5l*&fR{6Y
> zcFlIo?YuGFARq~(_jf!X5fMPZo<Mq_;sN`qDF^{cAU$y40f~qJ0`>&b12-P9pPGUY
> ekOa~L9S=xE1Q4(%kRB*_z<z29LO>Fj9{2(N6$j4%
>
> literal 0
> HcmV?d00001
>
> diff --git a/src/features/provider.feature b/src/features/provider.feature
> index c332667..12047bb 100644
> --- a/src/features/provider.feature
> +++ b/src/features/provider.feature
> @@ -85,4 +85,21 @@ Feature: Manage Providers
> And I fill in "cloud_account[password]" with "incorrect_password"
> And I fill in "cloud_account[account_number]" with "12345678"
> And I press "test_account"
> - Then I should see "Test Connection Failed: Invalid Account Details"
> \ No newline at end of file
> + Then I should see "Test Connection Failed: Invalid Account Details"
> +
> + Scenario: Delete a provider
> + Given I am on the homepage
> + And there is a provider named "provider1"
> + And this provider has 5 replicated images
> + And this provider has 5 hardware profiles
> + And this provider has a realm
> + And this provider has a cloud account
> + When I go to the providers page
> + And I follow "provider1"
> + And I press "delete"
> + Then I should see "Provider Deleted"
> + And there should not exist a provider named "provider1"
> + And there should not be any replicated images
> + And there should not be any hardware profiles
> + And there should not be a cloud account
> + And there should not be a realm
> \ No newline at end of file
> diff --git a/src/features/step_definitions/provider_steps.rb
> b/src/features/step_definitions/provider_steps.rb
> index e593d43..abc4662 100644
> --- a/src/features/step_definitions/provider_steps.rb
> +++ b/src/features/step_definitions/provider_steps.rb
> @@ -1,7 +1,12 @@
> -Given /^there is not a provider named "([^\"]*)"$/ do |name|
> +Given /^there should not exist a provider named "([^\"]*)"$/ do |name|
> Provider.find_by_name(name).should be_nil
> end
>
> +Given /^there is not a provider named "([^"]*)"$/ do |name|
> + provider = Provider.find_by_name(name)
> + if provider then provider.destroy end
> +end
> +
> Given /^there is a provider named "([^\"]*)"$/ do |name|
> @provider = Factory(:mock_provider, :name => name)
> end
> @@ -20,9 +25,41 @@ When /^I delete provider$/ do
> click_button "Delete provider"
> end
>
> -
> Given /^there are these providers:$/ do |table|
> table.hashes.each do |hash|
> Factory(:mock_provider, :name => hash['name'])
> end
> end
> +
> +Given /^this provider has (\d+) replicated images$/ do |number|
> + number.to_i.times { |i| Factory(:replicated_image, :provider =>
> @provider) }
> +end
> +
> +Given /^this provider has (\d+) hardware profiles$/ do |number|
> + number.to_i.times { |i| Factory(:mock_hwp1, :provider => @provider) }
> +end
> +
> +
> +Given /^this provider has a realm$/ do
> + Factory(:realm, :provider => @provider)
> +end
> +
> +Given /^this provider has a cloud account$/ do
> + Factory(:mock_cloud_account, :provider => @provider)
> +end
> +
> +Then /^there should not be any replicated images$/ do
> + ReplicatedImage.find(:all, :conditions => { :provider_id =>
> @provider.id} ).size.should == 0
> +end
> +
> +Then /^there should not be any hardware profiles$/ do
> + HardwareProfile.find(:all, :conditions => { :provider_id =>
> @provider.id} ).size.should == 0
> +end
> +
> +Then /^there should not be a cloud account$/ do
> + CloudAccount.find(:all, :conditions => { :provider_id => @provider.id}
> ).size.should == 0
> +end
> +
> +Then /^there should not be a realm$/ do
> + Realm.find(:all, :conditions => { :provider_id => @provider.id}
> ).size.should == 0
> +end
> diff --git a/src/features/support/custom.rb b/src/features/support/custom.rb
> index 6e4e1ef..b5440ae 100644
> --- a/src/features/support/custom.rb
> +++ b/src/features/support/custom.rb
> @@ -34,12 +34,12 @@ CloudAccount.class_eval do
> def generate_cloud_account_key
> end
>
> - def instance_key
> - @key = mock('Key', :null_object => true)
> - @key.stub!(:pem).and_return("PEM")
> - @key.stub!(:id).and_return("1_user")
> - @key
> - end
> +# def instance_key
> +# @key = mock('Key', :null_object => true)
> +# @key.stub!(:pem).and_return("PEM")
> +# @key.stub!(:id).and_return("1_user")
> +# @key
> +# end
> end
>
> RepositoryManager.class_eval do
> diff --git a/src/spec/factories/replicated_image.rb
> b/src/spec/factories/replicated_image.rb
> new file mode 100644
> index 0000000..f989380
> --- /dev/null
> +++ b/src/spec/factories/replicated_image.rb
> @@ -0,0 +1,5 @@
> +Factory.define :replicated_image do |ri|
> + ri.association :image
> + ri.association :provider
> + ri.sequence(:provider_image_key) { |n| "provider_image_key#(n)" }
> +end
> \ No newline at end of file
ACK with two notes inline
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel