From: Martyn Taylor mtaylor@redhat.com
--- 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? + 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' 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{!3n@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
On 11/15/2010 12:20 PM, mtaylor@redhat.com wrote:
From: Martyn Taylormtaylor@redhat.com
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{!3n@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@lists.fedorahosted.org