tim 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. data/Gemfile +17 -0
  2. data/README.rdoc +231 -8
  3. data/app/controllers/tim/application_controller.rb +6 -3
  4. data/app/controllers/tim/base_images_controller.rb +10 -18
  5. data/app/controllers/tim/image_versions_controller.rb +10 -9
  6. data/app/controllers/tim/provider_images_controller.rb +13 -10
  7. data/app/controllers/tim/target_images_controller.rb +9 -7
  8. data/app/controllers/tim/templates_controller.rb +7 -7
  9. data/app/exceptions/tim/exceptions.rb +6 -0
  10. data/app/filters/tim/resource_link_filter.rb +56 -0
  11. data/app/models/tim/base_image.rb +7 -3
  12. data/app/models/tim/image_version.rb +4 -2
  13. data/app/models/tim/provider_image.rb +42 -6
  14. data/app/models/tim/target_image.rb +48 -9
  15. data/app/models/tim/template.rb +18 -3
  16. data/app/patches/rails/active_record/autosave_association.rb +29 -0
  17. data/app/validators/template_validator.rb +9 -5
  18. data/app/views/tim/base_images/_base_image.xml.haml +1 -0
  19. data/app/views/tim/target_images/_target_image.xml.haml +1 -0
  20. data/db/migrate/20121115151914_add_import_to_tim_base_images.rb +5 -0
  21. data/db/migrate/20121210131423_add_build_method_to_target_image.rb +5 -0
  22. data/db/migrate/20121216131814_rename_provider_account_id_attribute.rb +13 -0
  23. data/db/migrate/20121216134538_add_factory_base_image_id_to_image_versions.rb +5 -0
  24. data/lib/image_factory/model/base_image.rb +6 -0
  25. data/lib/tim/engine.rb +12 -0
  26. data/lib/tim/version.rb +1 -1
  27. data/spec/controllers/base_images_controller_spec.rb +24 -8
  28. data/spec/controllers/image_versions_controller_spec.rb +20 -7
  29. data/spec/controllers/provider_images_controller_spec.rb +19 -6
  30. data/spec/controllers/target_images_controller_spec.rb +22 -8
  31. data/spec/factories/tim/base_image.rb +5 -1
  32. data/spec/factories/tim/image_factory/target_image.rb +1 -0
  33. data/spec/factories/tim/image_version.rb +4 -0
  34. data/spec/factories/tim/provider_image.rb +4 -1
  35. data/spec/factories/tim/target_image.rb +6 -2
  36. data/spec/filters/resource_link_filter_spec.rb +158 -0
  37. data/spec/models/base_image_spec.rb +5 -5
  38. data/spec/models/dummy/pool_family_spec.rb +1 -1
  39. data/spec/models/dummy/provider_account_spec.rb +3 -1
  40. data/spec/models/dummy/provider_type_spec.rb +2 -1
  41. data/spec/models/dummy/user_spec.rb +1 -1
  42. data/spec/models/image_version_spec.rb +4 -3
  43. data/spec/models/provider_image_spec.rb +28 -5
  44. data/spec/models/target_image_spec.rb +74 -4
  45. data/spec/models/template_spec.rb +11 -2
  46. data/spec/validators/template_validator_spec.rb +10 -0
  47. data/spec/views/base_images_spec.rb +2 -1
  48. data/spec/views/provider_images_spec.rb +1 -0
  49. data/test/dummy/app/decorators/tim/controllers/base_images_controller_decorator.rb +13 -0
  50. data/test/dummy/config/database.yml +0 -3
  51. data/test/dummy/config/initializers/tim.rb +1 -1
  52. data/test/dummy/config/routes.rb +6 -1
  53. data/test/dummy/db/migrate/20121216133232_add_provider_account_id_to_provider_images.rb +5 -0
  54. data/test/dummy/db/schema.rb +28 -24
  55. data/tim.gemspec +32 -0
  56. metadata +46 -60
  57. data/test/dummy/db/development.sqlite3 +0 -0
  58. data/test/dummy/db/test.sqlite3 +0 -0
  59. data/test/dummy/log/development.log +0 -982
  60. data/test/dummy/log/test.log +0 -8629
  61. data/test/dummy/tmp/cache/assets/C7A/BB0/sprockets%2F13445f7a19078dd2df39517062aa6711 +0 -0
  62. data/test/dummy/tmp/cache/assets/C8C/CC0/sprockets%2F95d79f3b3096348427f3e4e38b5202e3 +0 -0
  63. data/test/dummy/tmp/cache/assets/CB0/2B0/sprockets%2F79106b90879c02a115d7f6f1c8390ac4 +0 -0
  64. data/test/dummy/tmp/cache/assets/CE0/690/sprockets%2F04c628c2a636286bfa92a4966b82b92a +0 -0
  65. data/test/dummy/tmp/cache/assets/D03/040/sprockets%2Fd9e94204d4b307145f12efc109b16c1f +0 -0
  66. data/test/dummy/tmp/cache/assets/D06/DC0/sprockets%2Fcd282851b6e4c463409ba3ece67e0510 +0 -0
  67. data/test/dummy/tmp/cache/assets/D23/5F0/sprockets%2F2a521f3183c6bbcd71bd26a5490b201e +0 -0
  68. data/test/dummy/tmp/cache/assets/D64/3A0/sprockets%2F56ac1aed10c39b12a88cb1b30f668f58 +0 -0
  69. data/test/dummy/tmp/cache/assets/D69/BD0/sprockets%2F0aaf75cf34556b33a9fec534fe4d0415 +0 -0
  70. data/test/dummy/tmp/cache/assets/D87/D80/sprockets%2Fefa3c8b210e87358c7add88cd6f49597 +0 -0
  71. data/test/dummy/tmp/cache/assets/D89/200/sprockets%2Ff9b4e953c874ed6a87de6490d055d9db +0 -0
  72. data/test/dummy/tmp/cache/assets/DF4/430/sprockets%2F403bb1de60cae4325cebd7e6c389b8ad +0 -0
  73. data/test/dummy/tmp/cache/assets/E00/500/sprockets%2Faaddc5b6f2cb6b98930cc54cf4c64a95 +0 -0
  74. data/test/dummy/tmp/cache/assets/EB3/CE0/sprockets%2Fd75a89c9fffacd99bce7eed96844eafc +0 -0
@@ -4,12 +4,16 @@ class TemplateValidator < ActiveModel::Validator
4
4
  @@template_rng = File.join(Tim::Engine.root, "config/schemas", "tdl.rng")
5
5
 
6
6
  def validate(record)
7
- rng = Nokogiri::XML::RelaxNG(File.read(@@template_rng))
8
- xml = Nokogiri::XML(record.xml) { |config| config.strict }
7
+ begin
8
+ rng = Nokogiri::XML::RelaxNG(File.read(@@template_rng))
9
+ xml = Nokogiri::XML(record.xml) { |config| config.strict }
9
10
 
10
- rng.validate(xml).each do |error|
11
- record.errors.add :xml, error.message
12
- end
11
+ rng.validate(xml).each do |error|
12
+ record.errors.add :xml, error.message
13
+ end
14
+ rescue Nokogiri::XML::SyntaxError => e
15
+ record.errors.add :xml, "Syntax error on line #{e.line} at column #{e.column}: #{e.message}"
16
+ end
13
17
  end
14
18
 
15
19
  end
@@ -4,6 +4,7 @@
4
4
  %description= base_image.description
5
5
  - if base_image.template
6
6
  = render :partial => 'tim/templates/template_minimal', :locals => {:template => base_image.template}
7
+ %import= base_image.import
7
8
  %image_versions
8
9
  - base_image.image_versions.each do |image_version|
9
10
  = render :partial => 'tim/image_versions/image_version_minimal', :locals => {:image_version => image_version}
@@ -1,6 +1,7 @@
1
1
  !!! XML
2
2
  %target_image{:id => target_image.id, :href => target_image_url(target_image.id) }
3
3
  %target= target_image.target
4
+ %build_method= target_image.build_method
4
5
  %status= target_image.status
5
6
  %status_detail= target_image.status_detail
6
7
  %progress= target_image.progress
@@ -0,0 +1,5 @@
1
+ class AddImportToTimBaseImages < ActiveRecord::Migration
2
+ def change
3
+ add_column :tim_base_images, :import, :boolean, :default => false
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddBuildMethodToTargetImage < ActiveRecord::Migration
2
+ def change
3
+ add_column :tim_target_images, :build_method, :string, :default => "BARE_METAL"
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ class RenameProviderAccountIdAttribute < ActiveRecord::Migration
2
+ def up
3
+ change_table :tim_provider_images do |t|
4
+ t.rename :provider_account_id, :factory_provider_account_id
5
+ end
6
+ end
7
+
8
+ def down
9
+ change_table :tim_provider_images do |t|
10
+ t.rename :factory_provider_account_id, :provider_account_id
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ class AddFactoryBaseImageIdToImageVersions < ActiveRecord::Migration
2
+ def change
3
+ add_column :tim_image_versions, :factory_base_image_id, :string
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module Tim
2
+ module ImageFactory
3
+ class BaseImage < Base
4
+ end
5
+ end
6
+ end
@@ -5,5 +5,17 @@ module Tim
5
5
  g.test_framework :rspec, :view_specs => false
6
6
  g.template_engine :haml
7
7
  end
8
+
9
+ # Load Host Decorator Classes
10
+ config.to_prepare do |c|
11
+ # Load everything under patches, exceptions and decorators dir
12
+ [
13
+ Dir[Rails.root.join('app', 'decorators', '**', '*_decorator.rb')],
14
+ Dir[Tim::Engine.root.join('app', 'patches', '**', '*.rb')],
15
+ Dir[Tim::Engine.root.join('app', 'exceptions', '**', '*.rb')]
16
+ ].flatten.each do |f|
17
+ Rails.application.config.cache_classes ? require(f) : load(f)
18
+ end
19
+ end
8
20
  end
9
21
  end
@@ -1,3 +1,3 @@
1
1
  module Tim
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -14,7 +14,10 @@ module Tim
14
14
 
15
15
  context "Success" do
16
16
  it "should return a new base image as xml" do
17
- post :create, { :base_image => { :name => "Name", :description => "Description"}}
17
+ template = FactoryGirl.build(:template)
18
+ post :create, { :base_image => { :name => "Name",
19
+ :description => "Description",
20
+ :template_attributes => {:xml => template.xml }}}
18
21
  response.code.should == "201"
19
22
 
20
23
  body = Hash.from_xml(response.body)
@@ -30,11 +33,24 @@ module Tim
30
33
 
31
34
  body = Hash.from_xml(response.body)
32
35
  body.keys.should == ["base_image"]
33
- body["base_image"].keys.should =~ ["template", "id", "href", "name", "description", "image_versions"]
36
+ body["base_image"].keys.should =~ ["template", "id", "href", "name", "description", "image_versions", "import"]
34
37
  body["base_image"]["template"].keys.should =~ ["id", "href"]
35
38
  end
36
39
  end
37
40
 
41
+ it "should return a new base image with an existing template" do
42
+ template = FactoryGirl.create(:template)
43
+ post :create, { :base_image => { :name => "Name",
44
+ :description => "Description",
45
+ :template => {:id => template.id}}}
46
+ response.code.should == "201"
47
+
48
+ body = Hash.from_xml(response.body)
49
+ body.keys.should == ["base_image"]
50
+ body["base_image"].keys.should =~ ["template", "id", "href", "name", "description", "image_versions", "import"]
51
+ body["base_image"]["template"].keys.should =~ ["id", "href"]
52
+ end
53
+
38
54
  context "failure" do
39
55
  it "should return a unprocessable entity error when the client sends invalid content" do
40
56
  post :create, { :invalid_image => FactoryGirl.build(:base_image).attributes }
@@ -46,14 +62,14 @@ module Tim
46
62
  describe "Show Base Image" do
47
63
  context "Success" do
48
64
  it "should return an existing base image as XML" do
49
- base_image = FactoryGirl.create(:base_image)
65
+ base_image = FactoryGirl.create(:base_image, :import => true)
50
66
  get :show, :id => base_image.id
51
67
 
52
68
  response.code.should == "200"
53
69
 
54
70
  body = Hash.from_xml(response.body)
55
71
  body.keys.should == ["base_image"]
56
- body["base_image"].keys.should =~ ["id", "href", "name", "description", "image_versions"]
72
+ body["base_image"].keys.should =~ ["id", "href", "name", "description", "image_versions", "import"]
57
73
  end
58
74
 
59
75
  it "should return an existing base image as XML with template" do
@@ -64,7 +80,7 @@ module Tim
64
80
 
65
81
  body = Hash.from_xml(response.body)
66
82
  body.keys.should == ["base_image"]
67
- body["base_image"].keys.should =~ ["template", "id", "href", "name", "description", "image_versions"]
83
+ body["base_image"].keys.should =~ ["template", "id", "href", "name", "description", "image_versions", "import"]
68
84
  body["base_image"]["template"].keys.should =~ ["id", "href"]
69
85
  end
70
86
 
@@ -80,7 +96,7 @@ module Tim
80
96
 
81
97
  body = Hash.from_xml(response.body)
82
98
  body.keys.should == ["base_image"]
83
- body["base_image"].keys.should =~ ["image_versions", "template", "id", "href", "name", "description"]
99
+ body["base_image"].keys.should =~ ["image_versions", "template", "id", "href", "name", "description", "import"]
84
100
  body["base_image"]["image_versions"]["image_version"].size.should == 2
85
101
  end
86
102
  end
@@ -97,7 +113,7 @@ module Tim
97
113
  context "Success" do
98
114
  it "should return a list of existing base images as XML" do
99
115
  3.times do
100
- FactoryGirl.create(:base_image)
116
+ FactoryGirl.create(:base_image_with_template)
101
117
  end
102
118
 
103
119
  get :index
@@ -113,7 +129,7 @@ module Tim
113
129
  describe "List Delete Image" do
114
130
  context "Success" do
115
131
  it "should return a no content code when deleting an image" do
116
- base_image = FactoryGirl.create(:base_image)
132
+ base_image = FactoryGirl.create(:base_image_with_template)
117
133
  delete :destroy, :id => base_image.id
118
134
  response.code.should == "204"
119
135
  end
@@ -15,7 +15,8 @@ module Tim
15
15
 
16
16
  context "Success" do
17
17
  it "should return a new image version as xml" do
18
- post :create, { :image_version => {}}
18
+ image_version = FactoryGirl.build(:image_version_with_full_tree)
19
+ post :create, { :image_version => image_version.attributes }
19
20
  response.code.should == "201"
20
21
 
21
22
  body = Hash.from_xml(response.body)
@@ -23,7 +24,19 @@ module Tim
23
24
  end
24
25
 
25
26
  it "should return a new image version with base image as xml" do
26
- post :create, { :image_version => {:base_image => {:name => "Name"}}}
27
+ image_version = FactoryGirl.build(:image_version_with_full_tree)
28
+ post :create, { :image_version => image_version.attributes }
29
+ response.code.should == "201"
30
+
31
+ body = Hash.from_xml(response.body)
32
+ body.keys.should == ["image_version"]
33
+ body["image_version"].keys.should =~ ["base_image", "id", "href", "target_images"]
34
+ body["image_version"]["base_image"].keys.should =~ ["id", "href"]
35
+ end
36
+
37
+ it "should return a new image version with existing base image" do
38
+ base_image = FactoryGirl.create(:base_image_with_template)
39
+ post :create, { :image_version => {:base_image => {:id => base_image.id}}}
27
40
  response.code.should == "201"
28
41
 
29
42
  body = Hash.from_xml(response.body)
@@ -44,7 +57,7 @@ module Tim
44
57
  describe "Show Image Version" do
45
58
  context "Success" do
46
59
  it "should return an existing image version as XML" do
47
- image_version = FactoryGirl.create(:image_version_with_base_image)
60
+ image_version = FactoryGirl.create(:image_version_with_full_tree)
48
61
  get :show, :id => image_version.id
49
62
 
50
63
  response.code.should == "200"
@@ -79,7 +92,7 @@ module Tim
79
92
  context "Success" do
80
93
  it "should return a list of existing base images as XML" do
81
94
  3.times do
82
- FactoryGirl.create(:image_version_with_base_image)
95
+ FactoryGirl.create(:image_version_with_full_tree)
83
96
  end
84
97
 
85
98
  get :index
@@ -96,7 +109,7 @@ module Tim
96
109
  describe "Delete Image Version" do
97
110
  context "Success" do
98
111
  it "should return a no content code when deleting an image version" do
99
- image_version = FactoryGirl.create(:image_version)
112
+ image_version = FactoryGirl.create(:image_version_with_full_tree)
100
113
  delete :destroy, :id => image_version.id
101
114
  response.code.should == "204"
102
115
 
@@ -117,7 +130,7 @@ module Tim
117
130
  context "Success" do
118
131
  it "should return an updated image version as xml" do
119
132
  image_version = FactoryGirl.create(:image_version_with_full_tree)
120
- image_version.base_image = FactoryGirl.create(:base_image)
133
+ image_version.base_image = FactoryGirl.create(:base_image_with_template)
121
134
  put :update, :id => image_version.id, :image_version => image_version.attributes
122
135
  response.code.should == "200"
123
136
 
@@ -130,7 +143,7 @@ module Tim
130
143
 
131
144
  context "failure" do
132
145
  it "should return a unprocessable entity error when the client sends invalid content" do
133
- image_version = FactoryGirl.create(:image_version)
146
+ image_version = FactoryGirl.create(:image_version_with_full_tree)
134
147
  post :update, :id => image_version.id, :invalid_image => image_version.attributes
135
148
  response.code.should == "422"
136
149
  end
@@ -10,6 +10,7 @@ module Tim
10
10
  TargetImage.any_instance.stub(:template).and_return(FactoryGirl.build(:template))
11
11
  ProviderImage.any_instance.stub(:create_factory_provider_image).and_return(true)
12
12
  TargetImage.any_instance.stub(:create_factory_target_image).and_return(true)
13
+ TargetImage.any_instance.stub(:imported?).and_return(false)
13
14
  @status_detail = mock(:status)
14
15
  @status_detail.stub(:activity).and_return("Building")
15
16
  ImageFactory::TargetImage.stub(:create).and_return(FactoryGirl.build(:image_factory_target_image, :status_detail => @status_detail))
@@ -33,11 +34,23 @@ module Tim
33
34
  "snapshot", "status_detail", "progress", "href", "id","target_image", "status"]
34
35
  body["provider_image"]["target_image"]["id"].should == provider_image.target_image .id.to_s
35
36
  end
37
+
38
+ it "should return a new provider image awith existing target image" do
39
+ target_image = FactoryGirl.create(:target_image_with_full_tree)
40
+ post :create, { :provider_image => { :target_image => { :id => target_image.id }}}
41
+ response.code.should == "201"
42
+
43
+ body = Hash.from_xml(response.body)
44
+ body.keys.should == ["provider_image"]
45
+ body["provider_image"].keys.should =~ ["external_image_id", "provider",
46
+ "snapshot", "status_detail", "progress", "href", "id","target_image", "status"]
47
+ body["provider_image"]["target_image"]["id"].should == target_image .id.to_s
48
+ end
36
49
  end
37
50
 
38
51
  context "failure" do
39
52
  it "should return a unprocessable entity error when the client sends invalid content" do
40
- post :create, { :invalid_image => FactoryGirl.build(:provider_image).attributes }
53
+ post :create, { :invalid_image => FactoryGirl.build(:provider_image_with_full_tree).attributes }
41
54
  response.code.should == "422"
42
55
  end
43
56
  end
@@ -71,7 +84,7 @@ module Tim
71
84
  context "Success" do
72
85
  it "should return a list of existing provider images as XML" do
73
86
  3.times do
74
- FactoryGirl.create(:provider_image)
87
+ FactoryGirl.create(:provider_image_with_full_tree)
75
88
  end
76
89
 
77
90
  get :index
@@ -87,7 +100,7 @@ module Tim
87
100
  describe "Delete Provider Image" do
88
101
  context "Success" do
89
102
  it "should return a no content code when deleting a provider image" do
90
- provider_image = FactoryGirl.create(:provider_image)
103
+ provider_image = FactoryGirl.create(:provider_image_with_full_tree)
91
104
  delete :destroy, :id => provider_image.id
92
105
  response.code.should == "204"
93
106
 
@@ -108,7 +121,7 @@ module Tim
108
121
  context "Success" do
109
122
  it "should return an updated provider image as xml" do
110
123
  provider_image = FactoryGirl.create(:provider_image_with_full_tree)
111
- provider_image.target_image = FactoryGirl.create(:target_image )
124
+ provider_image.target_image = FactoryGirl.create(:target_image_with_full_tree )
112
125
  put :update, :id => provider_image.id, :provider_image => provider_image.attributes
113
126
  response.code.should == "200"
114
127
 
@@ -121,13 +134,13 @@ module Tim
121
134
 
122
135
  context "failure" do
123
136
  it "should return a unprocessable entity error when the client sends invalid content" do
124
- provider_image = FactoryGirl.create(:provider_image)
137
+ provider_image = FactoryGirl.create(:provider_image_with_full_tree)
125
138
  post :update, :id => provider_image.id, :invalid_image => provider_image.attributes
126
139
  response.code.should == "422"
127
140
  end
128
141
 
129
142
  it "should return a not found code when updating a Provider image that does not exist" do
130
- delete :update, :id => -1, :provider_image => FactoryGirl.create(:provider_image).attributes
143
+ delete :update, :id => -1, :provider_image => FactoryGirl.create(:provider_image_with_full_tree).attributes
131
144
  response.code.should == "404"
132
145
  end
133
146
  end
@@ -9,6 +9,7 @@ module Tim
9
9
  send_and_accept_xml
10
10
  TargetImage.any_instance.stub(:template).and_return(FactoryGirl.build(:template))
11
11
  TargetImage.any_instance.stub(:create_factory_target_image).and_return(true)
12
+ TargetImage.any_instance.stub(:imported?).and_return(false)
12
13
  @status_detail = mock(:status)
13
14
  @status_detail.stub(:activity).and_return("Building")
14
15
  TargetImagesController.any_instance.stub(:template_exists?).and_return false
@@ -28,14 +29,27 @@ module Tim
28
29
 
29
30
  body = Hash.from_xml(response.body)
30
31
  body.keys.should == ["target_image"]
31
- body["target_image"].keys.should =~ ["target", "status", "status_detail", "progress", "href", "id", "provider_images", "image_version"]
32
+ body["target_image"].keys.should =~ ["target", "status", "status_detail", "progress", "href", "id",
33
+ "provider_images", "image_version", "build_method"]
32
34
  body["target_image"]["image_version"]["id"].should == target_image.image_version.id.to_s
33
35
  end
36
+
37
+ it "should create a new target image for imported images" do
38
+ image_version = FactoryGirl.create(:image_version_import)
39
+ post :create, { :target_image => {:image_version => {:id => image_version.id}, :target => "mock"}}
40
+ response.code.should == "201"
41
+
42
+ body = Hash.from_xml(response.body)
43
+ body.keys.should == ["target_image"]
44
+ body["target_image"].keys.should =~ ["target", "status", "status_detail", "progress", "href", "id",
45
+ "provider_images", "image_version", "build_method"]
46
+ body["target_image"]["image_version"]["id"].should == image_version.id.to_s
47
+ end
34
48
  end
35
49
 
36
50
  context "failure" do
37
51
  it "should return a unprocessable entity error when the client sends invalid content" do
38
- post :create, { :invalid_image => FactoryGirl.build(:target_image).attributes }
52
+ post :create, { :invalid_image => FactoryGirl.build(:target_image_with_full_tree).attributes }
39
53
  response.code.should == "422"
40
54
  end
41
55
  end
@@ -52,7 +66,7 @@ module Tim
52
66
  body = Hash.from_xml(response.body)
53
67
  body.keys.should == ["target_image"]
54
68
  body["target_image"].keys.should =~ ["id", "href", "image_version",
55
- "provider_images", "target", "status", "status_detail", "progress"]
69
+ "provider_images", "target", "status", "status_detail", "progress", "build_method"]
56
70
  end
57
71
  end
58
72
 
@@ -68,7 +82,7 @@ module Tim
68
82
  context "Success" do
69
83
  it "should return a list of existing target images as XML" do
70
84
  3.times do
71
- FactoryGirl.create(:target_image)
85
+ FactoryGirl.create(:target_image_with_full_tree)
72
86
  end
73
87
 
74
88
  get :index
@@ -84,7 +98,7 @@ module Tim
84
98
  describe "Delete Target Image" do
85
99
  context "Success" do
86
100
  it "should return a no content code when deleting a target image" do
87
- target_image = FactoryGirl.create(:target_image)
101
+ target_image = FactoryGirl.create(:target_image_with_full_tree)
88
102
  delete :destroy, :id => target_image.id
89
103
  response.code.should == "204"
90
104
 
@@ -105,7 +119,7 @@ module Tim
105
119
  context "Success" do
106
120
  it "should return an updated target image as xml" do
107
121
  target_image = FactoryGirl.create(:target_image_with_full_tree)
108
- target_image.image_version = FactoryGirl.create(:image_version)
122
+ target_image.image_version = FactoryGirl.create(:image_version_with_full_tree)
109
123
  put :update, :id => target_image.id, :target_image => target_image.attributes
110
124
  response.code.should == "200"
111
125
 
@@ -118,13 +132,13 @@ module Tim
118
132
 
119
133
  context "failure" do
120
134
  it "should return a unprocessable entity error when the client sends invalid content" do
121
- target_image = FactoryGirl.create(:target_image)
135
+ target_image = FactoryGirl.create(:target_image_with_full_tree)
122
136
  put :update, :id => target_image.id, :invalid_image => target_image.attributes
123
137
  response.code.should == "422"
124
138
  end
125
139
 
126
140
  it "should return a not found code when updating a target image that does not exist" do
127
- delete :update, :id => -1, :target_image => FactoryGirl.build(:target_image).attributes
141
+ delete :update, :id => -1, :target_image => FactoryGirl.build(:target_image_with_full_tree).attributes
128
142
  response.code.should == "404"
129
143
  end
130
144
  end
@@ -7,4 +7,8 @@ FactoryGirl.define do
7
7
  factory :base_image_with_template, :parent => :base_image do
8
8
  association :template, :factory => :template
9
9
  end
10
- end
10
+
11
+ factory :base_image_import, :parent => :base_image do
12
+ import true
13
+ end
14
+ end
@@ -3,5 +3,6 @@ FactoryGirl.define do
3
3
  status "NEW"
4
4
  id '4cc3b024-5fe7-4b0b-934b-c5d463b990b0'
5
5
  percent_complete '0'
6
+ base_image_id '2cc3b024-5fe7-4b0b-934b-c5d463b990b0'
6
7
  end
7
8
  end