[PATCH conductor] BZ 788018 Destroy deployables when deleting its last catalog
jtomasek at redhat.com
jtomasek at redhat.com
Wed Feb 8 14:21:50 UTC 2012
From: Jiri Tomasek <jtomasek at redhat.com>
When a Catalog is deleted, all deployables related only to it are destroyed too.
---
src/app/models/catalog.rb | 8 ++++----
src/config/locales/en.yml | 2 +-
src/spec/controllers/catalogs_controller_spec.rb | 13 ++++++-------
3 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/src/app/models/catalog.rb b/src/app/models/catalog.rb
index 00d1e7a..3472c59 100644
--- a/src/app/models/catalog.rb
+++ b/src/app/models/catalog.rb
@@ -38,7 +38,7 @@ class Catalog < ActiveRecord::Base
:include => [:role],
:order => "permissions.id ASC"
- before_destroy :check_deployable_references
+ before_destroy :destroy_deployables_related_only_to_self
validates_presence_of :pool
validates_presence_of :name
@@ -48,9 +48,9 @@ class Catalog < ActiveRecord::Base
PRESET_FILTERS_OPTIONS = [
{:title => I18n.t("catalogs.preset_filters.belongs_to_default_pool"), :id => "belongs_to_default_pool", :query => includes(:pool).where("pools.name" => "Default")}
]
- def check_deployable_references
- return true if deployables.empty?
- !(deployables.any? {|d| d.catalogs.count == 1})
+
+ def destroy_deployables_related_only_to_self
+ deployables.each {|d| d.destroy if d.catalogs.count == 1}
end
private
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 048047b..971f0f8 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -411,7 +411,7 @@ en:
owner: Owner
pending: Pending
failed: Failed
- confirm_delete: "Are you sure you want to delete this pool?"
+ confirm_delete: "Are you sure you want to delete this pool? All related catalogs and deployables will be deleted too!"
overview: Overview
your_pools: Your Pools
pool_details: Pool details
diff --git a/src/spec/controllers/catalogs_controller_spec.rb b/src/spec/controllers/catalogs_controller_spec.rb
index 50a53bf..8e46aaf 100644
--- a/src/spec/controllers/catalogs_controller_spec.rb
+++ b/src/spec/controllers/catalogs_controller_spec.rb
@@ -33,10 +33,9 @@ describe CatalogsController do
response.should redirect_to catalogs_path
end
- it "cannot remove catalog2 because it is the last deployable's reference " do
- delete :destroy, :id => @catalog.id
- expect {delete :destroy, :id => @catalog2.id}.not_to change(Catalog, :count).by(-1)
- response.should redirect_to catalog_path(@catalog2)
+ it "cannot remove deployable related to catalog because it is also related to catalog2" do
+ expect {delete :destroy, :id => @catalog.id}.not_to change(Deployable, :count).by(-1)
+ response.should redirect_to catalogs_path
end
context "given catalog with one deployable, that is exclusive in this catalog" do
@@ -44,9 +43,9 @@ describe CatalogsController do
@catalog = Factory :catalog_with_deployable
end
- it "cannot be deleted when its deployables has no reference to other catalogs" do
- expect {delete :destroy, :id => @catalog.id}.not_to change(Catalog, :count).by(-1)
- response.should redirect_to catalog_path(@catalog)
+ it "should delete its deployables if its deployables have no reference to other catalogs" do
+ expect {delete :destroy, :id => @catalog.id}.to change(Deployable, :count).by(-1)
+ response.should redirect_to catalogs_path
end
end
end
--
1.7.7.6
More information about the aeolus-devel
mailing list