On 10/10/2011 03:14 PM, Chris Alfonso wrote:
Also added a cucumber test for the catalog images page
---
src/app/models/catalog_entry.rb | 2 +-
src/app/models/image.rb | 28 +++++++++++++-------------
src/app/models/pool.rb | 6 ++--
src/features/pool.feature | 8 +++++++
src/features/step_definitions/pool_steps.rb | 14 +++++++++++++
5 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/src/app/models/catalog_entry.rb b/src/app/models/catalog_entry.rb
index da5f8df..8c87b5c 100644
--- a/src/app/models/catalog_entry.rb
+++ b/src/app/models/catalog_entry.rb
@@ -71,7 +71,7 @@ class CatalogEntry < ActiveRecord::Base
fetch_image_uuids.each do |uuid|
images << Aeolus::Image::Warehouse::Image.find(uuid)
end
- images.compact.uniq
+ return images.compact.uniq
end
end
diff --git a/src/app/models/image.rb b/src/app/models/image.rb
index 768414a..887c379 100644
--- a/src/app/models/image.rb
+++ b/src/app/models/image.rb
@@ -45,24 +45,24 @@ class Image < WarehouseModel
# images should be an array of Aeolus::Image::Warehouse::Image objects
# Please don't shoot me for this!
def self.provider_images_for_image_list(images)
- # Fetch all of these, but only once
- provider_images = Aeolus::Image::Warehouse::ProviderImage.all
- target_images = Aeolus::Image::Warehouse::TargetImage.all
- builds = Aeolus::Image::Warehouse::ImageBuild.all
- return_objs = {}
unless images.nil?
- images.each do |image|
- _builds = builds.select{|b| b.instance_variable_get('@image') ==
image.uuid}
- _builds.each do |build|
- _target_images = target_images.select{|ti|
ti.instance_variable_get('@build') == build.uuid}
- _target_images.each do |target_image|
- _provider_images = provider_images.select{|pi|
pi.instance_variable_get('@target_image') == target_image.uuid}
- return_objs[image.uuid] = _provider_images
+ # Fetch all of these, but only once
+ provider_images = Aeolus::Image::Warehouse::ProviderImage.all
+ target_images = Aeolus::Image::Warehouse::TargetImage.all
+ builds = Aeolus::Image::Warehouse::ImageBuild.all
+ return_objs = {}
+ images.each do |image|
+ _builds = builds.select{|b| b.instance_variable_get('@image') ==
image.uuid}
+ _builds.each do |build|
+ _target_images = target_images.select{|ti|
ti.instance_variable_get('@build') == build.uuid}
+ _target_images.each do |target_image|
+ _provider_images = provider_images.select{|pi|
pi.instance_variable_get('@target_image') == target_image.uuid}
+ return_objs[image.uuid] = _provider_images
+ end
end
end
- end
+ return_objs
end
- return_objs
end
end
diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
index 7affcb7..a6b4e2c 100644
--- a/src/app/models/pool.rb
+++ b/src/app/models/pool.rb
@@ -126,17 +126,17 @@ class Pool < ActiveRecord::Base
def provider_image_map
catalog_entries = catalogs.collect{|c| c.catalog_entries}.flatten
- all_images = catalog_entries.collect{|ce| ce.fetch_images}.flatten.uniq.compact!
+ all_images = catalog_entries.collect{|ce| ce.fetch_images}.flatten.uniq.compact
provider_images = Image.provider_images_for_image_list(all_images)
return_obj = {}
catalogs.each do |catalog|
return_obj[catalog] = {}
catalog.catalog_entries.each do |catalog_entry|
- return_obj[catalog][catalog_entry] = {}
images = catalog_entry.fetch_images
unless images.nil?
+ return_obj[catalog][catalog_entry] = {}
images.each do |image|
- return_obj[catalog][catalog_entry][image] = provider_images[image.uuid]
+ return_obj[catalog][catalog_entry][image] = provider_images.nil? ? {} :
provider_images[image.uuid]
end
end
end
diff --git a/src/features/pool.feature b/src/features/pool.feature
index de4eedc..0b87b97 100644
--- a/src/features/pool.feature
+++ b/src/features/pool.feature
@@ -199,3 +199,11 @@ Feature: Manage Pools
And I should see "mock1"
And I should see "mock2"
And I should see "mock3"
+
+Scenario: Select Catalog Images on pool detail page
+ Given a pool "mockpool" exists
+ And "mockpool" has catalog "mockcatalog"
+ And "mockcatalog" has catalog_entry "mockcatalogentry"
+ When I am viewing the pool "mockpool"
+ And I follow link with ID "details_images"
+ Then I should see "mockcatalog" within "#tab"
diff --git a/src/features/step_definitions/pool_steps.rb
b/src/features/step_definitions/pool_steps.rb
index b08af4d..cf036ca 100644
--- a/src/features/step_definitions/pool_steps.rb
+++ b/src/features/step_definitions/pool_steps.rb
@@ -110,3 +110,17 @@ Given /^there are (\d+) pools$/ do |arg1|
FactoryGirl.create :pool, :name => "pool#{i}"
end
end
+
+Given /^"([^"]*)" has catalog "([^"]*)"$/ do |pool_name,
catalog_name|
+ pool_family = PoolFamily.find_by_name('default') ||
FactoryGirl.create(:pool_family)
+ quota = FactoryGirl.create(:quota)
+ pool = Pool.find_by_name('mockpool') || Pool.create!(:name => pool_name,
:pool_family => pool_family, :quota => quota, :enabled => true)
+ catalog = FactoryGirl.create :catalog, :name => catalog_name, :pool => pool
+end
+
+Given /^"([^"]*)" has catalog_entry "([^"]*)"$/ do
|catalog_name, catalog_entry_name|
+ catalog_entry = FactoryGirl.create :catalog_entry, :name => catalog_entry_name
+ catalog = Catalog.find_by_name(catalog_name)
+ catalog_entry.catalog = catalog
+ catalog_entry.save!
+end
ACK
Chris, please push it.