From: Martyn Taylor <mtaylor(a)redhat.com>
---
lib/aeolus_image/model/warehouse/image.rb | 9 +++++++++
lib/aeolus_image/model/warehouse/image_build.rb | 9 +++++++++
spec/models/warehouse/image_build_spec.rb | 20 ++++++++++++++++----
spec/models/warehouse/image_spec.rb | 14 +++++++++++++-
4 files changed, 47 insertions(+), 5 deletions(-)
diff --git a/lib/aeolus_image/model/warehouse/image.rb
b/lib/aeolus_image/model/warehouse/image.rb
index 8f505d4..6b12f73 100644
--- a/lib/aeolus_image/model/warehouse/image.rb
+++ b/lib/aeolus_image/model/warehouse/image.rb
@@ -49,6 +49,15 @@ module Aeolus
ImageBuild.where("($image == \"" + @uuid.to_s +
"\")")
end
+ # Return all Provider Images associated with this Image
+ def provider_images
+ provider_images = []
+ image_builds.each do |b|
+ provider_images = provider_images + b.provider_images
+ end
+ provider_images
+ end
+
#TODO: We should get the image fields from the object body once we have it
defined.
def name
unless @name
diff --git a/lib/aeolus_image/model/warehouse/image_build.rb
b/lib/aeolus_image/model/warehouse/image_build.rb
index 2e94d08..234a3aa 100644
--- a/lib/aeolus_image/model/warehouse/image_build.rb
+++ b/lib/aeolus_image/model/warehouse/image_build.rb
@@ -26,6 +26,15 @@ module Aeolus
TargetImage.where("($build == \"" + @uuid.to_s +
"\")")
end
+ # Convenience Method to get all provider images for this build
+ def provider_images
+ provider_images = []
+ target_images.each do |t|
+ provider_images = provider_images + t.provider_images
+ end
+ provider_images
+ end
+
# Deletes this image and all child objects
def delete!
begin
diff --git a/spec/models/warehouse/image_build_spec.rb
b/spec/models/warehouse/image_build_spec.rb
index 15ae1cc..37fd573 100644
--- a/spec/models/warehouse/image_build_spec.rb
+++ b/spec/models/warehouse/image_build_spec.rb
@@ -32,9 +32,9 @@ module Aeolus
end
@image_build = ImageBuild.new(@object)
- @target_image_mock_with_no_build = mock(TargetImage, :build => nil)
- @target_image_mock_with_correct_build = mock(TargetImage, :build =>
@image_build)
- @other_target_image_mock_with_correct_build = mock(TargetImage, :build =>
@image_build)
+ @target_image_mock_with_no_build = mock(TargetImage, :build => nil,
:provider_images => [mock(ProviderImage)])
+ @target_image_mock_with_correct_build = mock(TargetImage, :build =>
@image_build, :provider_images => [mock(ProviderImage)])
+ @other_target_image_mock_with_correct_build = mock(TargetImage, :build =>
@image_build, :provider_images => [mock(ProviderImage)])
@other_image_build_attributes = @image_build_attributes.merge(:uuid =>
'other_uuid')
@other_object = mock(Object, :attr_list =>
@other_image_build_attributes.keys, :attrs => @other_image_build_attributes)
@@ -43,7 +43,7 @@ module Aeolus
end
@other_image_build = ImageBuild.new(@other_object)
- @target_image_mock_with_other_image_build = mock(TargetImage, :build =>
@other_image_build)
+ @target_image_mock_with_other_image_build = mock(TargetImage, :build =>
@other_image_build, :provider_images => [mock(ProviderImage)] * 2)
@all_target_images = [ @target_image_mock_with_no_build,
@target_image_mock_with_correct_build, @other_target_image_mock_with_correct_build,
@target_image_mock_with_other_image_build ]
@@ -154,6 +154,18 @@ module Aeolus
end
end
+ context "#provider_images" do
+ before(:each) do
+ TargetImage.stub(:where).and_return(@all_target_images)
+ end
+
+ context "should return collection" do
+ it "with correct amount of provider images" do
+ @image_build.provider_images.size.should == 5
+ end
+ end
+ end
+
context "#delete!" do
before(:each) do
diff --git a/spec/models/warehouse/image_spec.rb b/spec/models/warehouse/image_spec.rb
index bd17165..61d6752 100644
--- a/spec/models/warehouse/image_spec.rb
+++ b/spec/models/warehouse/image_spec.rb
@@ -87,10 +87,22 @@ module Aeolus
before(:each) do
@target_template = mock(Template, :body => @template_xml.to_s)
@target_image = [ mock(TargetImage, :target_template =>
@target_template) ]
- @image_builds = [ mock(ImageBuild, :target_images => @target_image) ]
+ @image_builds = [ mock(ImageBuild, :target_images => @target_image,
:provider_images => [mock(ProviderImage)] * 2) ] * 2
@image.stub(:image_builds).and_return(@image_builds)
end
+ context "#provider_images" do
+ before(:each) do
+ ImageBuild.stub(:where).and_return(@image_builds)
+ end
+
+ context "should return collection" do
+ it "with correct amount of provider images" do
+ @image.provider_images.size.should == 4
+ end
+ end
+ end
+
# TODO: There shoud be a way to test equality of Nokogiri::XML documents
better than string comparison
it "should return correct template" do
@image.template_xml.to_s.should be_eql((a)template_xml.to_s)
--
1.7.6.4
Show replies by date
On 11/29/2011 10:41 AM, mtaylor(a)redhat.com wrote:
From: Martyn Taylor<mtaylor(a)redhat.com>
---
lib/aeolus_image/model/warehouse/image.rb | 9 +++++++++
lib/aeolus_image/model/warehouse/image_build.rb | 9 +++++++++
spec/models/warehouse/image_build_spec.rb | 20 ++++++++++++++++----
spec/models/warehouse/image_spec.rb | 14 +++++++++++++-
4 files changed, 47 insertions(+), 5 deletions(-)
Ack.