[PATCH conductor] BZ 788018 Destroy deployables when deleting its last catalog

jtomasek at redhat.com jtomasek at redhat.com
Wed Feb 8 13:37:13 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                        |   13 +++++++++----
 src/config/locales/en.yml                        |    2 +-
 src/spec/controllers/catalogs_controller_spec.rb |   22 +++++++++++++++-------
 3 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/src/app/models/catalog.rb b/src/app/models/catalog.rb
index 00d1e7a..2cfc163 100644
--- a/src/app/models/catalog.rb
+++ b/src/app/models/catalog.rb
@@ -38,7 +38,8 @@ class Catalog < ActiveRecord::Base
            :include => [:role],
            :order => "permissions.id ASC"
 
-  before_destroy :check_deployable_references
+  #before_destroy :check_deployable_references
+  before_destroy :destroy_deployables_related_only_to_self
 
   validates_presence_of :pool
   validates_presence_of :name
@@ -48,9 +49,13 @@ 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 check_deployable_references
+  #  return true if deployables.empty?
+  #  !(deployables.any? {|d| d.catalogs.count == 1})
+  #end
+
+  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..3ccb252 100644
--- a/src/spec/controllers/catalogs_controller_spec.rb
+++ b/src/spec/controllers/catalogs_controller_spec.rb
@@ -33,21 +33,29 @@ 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
+      #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)
+      #end
 
     context "given catalog with one deployable, that is exclusive in this catalog" do
       before(:each) 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
+      #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)
+      #end
     end
     end
 
-- 
1.7.7.6




More information about the aeolus-devel mailing list