tim 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +392 -0
- data/Rakefile +33 -0
- data/app/assets/javascripts/tim/application.js +15 -0
- data/app/assets/stylesheets/tim/application.css +13 -0
- data/app/controllers/tim/application_controller.rb +19 -0
- data/app/controllers/tim/base_images_controller.rb +59 -0
- data/app/controllers/tim/entrypoint_controller.rb +8 -0
- data/app/controllers/tim/image_versions_controller.rb +48 -0
- data/app/controllers/tim/provider_images_controller.rb +59 -0
- data/app/controllers/tim/target_images_controller.rb +61 -0
- data/app/controllers/tim/templates_controller.rb +47 -0
- data/app/filters/tim/user_keys_filter.rb +59 -0
- data/app/helpers/tim/application_helper.rb +4 -0
- data/app/models/tim/base.rb +6 -0
- data/app/models/tim/base_image.rb +15 -0
- data/app/models/tim/image_version.rb +13 -0
- data/app/models/tim/provider_image.rb +51 -0
- data/app/models/tim/target_image.rb +50 -0
- data/app/models/tim/template.rb +19 -0
- data/app/responders/tim/custom_responder.rb +24 -0
- data/app/validators/template_validator.rb +15 -0
- data/app/views/layouts/tim/application.html.erb +14 -0
- data/app/views/tim/base_images/_base_image.xml.haml +11 -0
- data/app/views/tim/base_images/_base_image_minimal.xml.haml +2 -0
- data/app/views/tim/base_images/_form.html.erb +17 -0
- data/app/views/tim/base_images/edit.html.erb +6 -0
- data/app/views/tim/base_images/index.html.erb +17 -0
- data/app/views/tim/base_images/index.xml.haml +4 -0
- data/app/views/tim/base_images/new.html.erb +5 -0
- data/app/views/tim/base_images/show.html.erb +5 -0
- data/app/views/tim/base_images/show.xml.haml +2 -0
- data/app/views/tim/entrypoint/index.xml.haml +7 -0
- data/app/views/tim/image_versions/_form.html.erb +17 -0
- data/app/views/tim/image_versions/_image_version.xml.haml +9 -0
- data/app/views/tim/image_versions/_image_version_minimal.xml.haml +2 -0
- data/app/views/tim/image_versions/edit.html.erb +6 -0
- data/app/views/tim/image_versions/index.html.erb +17 -0
- data/app/views/tim/image_versions/index.xml.haml +4 -0
- data/app/views/tim/image_versions/new.html.erb +5 -0
- data/app/views/tim/image_versions/show.html.erb +5 -0
- data/app/views/tim/image_versions/show.xml.haml +2 -0
- data/app/views/tim/images/_form.html.erb +17 -0
- data/app/views/tim/images/edit.html.erb +6 -0
- data/app/views/tim/images/index.html.erb +21 -0
- data/app/views/tim/images/new.html.erb +5 -0
- data/app/views/tim/images/show.html.erb +5 -0
- data/app/views/tim/layouts/application.html.erb +14 -0
- data/app/views/tim/provider_images/_form.html.erb +17 -0
- data/app/views/tim/provider_images/_provider_image.xml.haml +12 -0
- data/app/views/tim/provider_images/_provider_image_minimal.xml.haml +2 -0
- data/app/views/tim/provider_images/edit.html.erb +6 -0
- data/app/views/tim/provider_images/index.html.erb +17 -0
- data/app/views/tim/provider_images/index.xml.haml +4 -0
- data/app/views/tim/provider_images/new.html.erb +5 -0
- data/app/views/tim/provider_images/show.html.erb +5 -0
- data/app/views/tim/provider_images/show.xml.haml +2 -0
- data/app/views/tim/target_images/_form.html.erb +17 -0
- data/app/views/tim/target_images/_target_image.xml.haml +13 -0
- data/app/views/tim/target_images/_target_image_minimal.xml.haml +2 -0
- data/app/views/tim/target_images/edit.html.erb +6 -0
- data/app/views/tim/target_images/index.html.erb +21 -0
- data/app/views/tim/target_images/index.xml.haml +4 -0
- data/app/views/tim/target_images/new.html.erb +5 -0
- data/app/views/tim/target_images/show.html.erb +5 -0
- data/app/views/tim/target_images/show.xml.haml +2 -0
- data/app/views/tim/templates/_form.html.erb +17 -0
- data/app/views/tim/templates/_template.xml.haml +8 -0
- data/app/views/tim/templates/_template_minimal.xml.haml +2 -0
- data/app/views/tim/templates/edit.html.erb +6 -0
- data/app/views/tim/templates/index.html.erb +17 -0
- data/app/views/tim/templates/index.xml.haml +4 -0
- data/app/views/tim/templates/new.html.erb +5 -0
- data/app/views/tim/templates/show.html.erb +5 -0
- data/app/views/tim/templates/show.xml.haml +2 -0
- data/config/cucumber.yml +8 -0
- data/config/initializers/haml.rb +1 -0
- data/config/routes.rb +9 -0
- data/config/schemas/tdl.rng +282 -0
- data/config/user_keys.yml +26 -0
- data/db/migrate/20120906180351_create_tim_base_images.rb +12 -0
- data/db/migrate/20120906210106_create_tim_image_versions.rb +10 -0
- data/db/migrate/20120910175233_create_tim_templates.rb +9 -0
- data/db/migrate/20120911202321_create_tim_target_images.rb +14 -0
- data/db/migrate/20120911204329_create_tim_provider_images.rb +19 -0
- data/lib/generators/tim/install_generator.rb +15 -0
- data/lib/generators/tim/templates/README +6 -0
- data/lib/generators/tim/templates/tim.rb +8 -0
- data/lib/image_factory/image_factory.rb +4 -0
- data/lib/image_factory/model/base.rb +88 -0
- data/lib/image_factory/model/provider_image.rb +6 -0
- data/lib/image_factory/model/target_image.rb +6 -0
- data/lib/tasks/cucumber.rake +59 -0
- data/lib/tasks/tim_tasks.rake +4 -0
- data/lib/tim.rb +8 -0
- data/lib/tim/engine.rb +9 -0
- data/lib/tim/version.rb +3 -0
- data/spec/controllers/base_images_controller_spec.rb +131 -0
- data/spec/controllers/entrypoint_controller_spec.rb +32 -0
- data/spec/controllers/image_versions_controller_spec.rb +146 -0
- data/spec/controllers/provider_images_controller_spec.rb +156 -0
- data/spec/controllers/target_images_controller_spec.rb +153 -0
- data/spec/controllers/templates_controller_spec.rb +41 -0
- data/spec/decorators/controllers/templates_controller_decorator_spec.rb +13 -0
- data/spec/factories/tim/base_image.rb +10 -0
- data/spec/factories/tim/image_factory/provider_image.rb +10 -0
- data/spec/factories/tim/image_factory/status_detail.rb +0 -0
- data/spec/factories/tim/image_factory/target_image.rb +7 -0
- data/spec/factories/tim/image_version.rb +20 -0
- data/spec/factories/tim/provider_image.rb +9 -0
- data/spec/factories/tim/target_image.rb +10 -0
- data/spec/factories/tim/template.rb +23 -0
- data/spec/filters/user_keys_filter_spec.rb +41 -0
- data/spec/fixtures/template.xml +13 -0
- data/spec/models/base_image_spec.rb +39 -0
- data/spec/models/dummy/pool_family_spec.rb +14 -0
- data/spec/models/dummy/provider_account_spec.rb +18 -0
- data/spec/models/dummy/provider_type_spec.rb +18 -0
- data/spec/models/dummy/user_spec.rb +14 -0
- data/spec/models/image_version_spec.rb +27 -0
- data/spec/models/provider_image_spec.rb +69 -0
- data/spec/models/target_image_spec.rb +75 -0
- data/spec/models/template_spec.rb +16 -0
- data/spec/spec_helper.rb +56 -0
- data/spec/support/routes.rb +41 -0
- data/spec/validators/template_validator_spec.rb +19 -0
- data/spec/views/base_images_spec.rb +23 -0
- data/spec/views/image_versions_spec.rb +25 -0
- data/spec/views/provider_images_spec.rb +30 -0
- data/spec/views/target_images_spec.rb +25 -0
- data/spec/views/templates_spec.rb +24 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/decorators/tim/controllers/templates_controller_decorator.rb +8 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/models/pool_family.rb +3 -0
- data/test/dummy/app/models/provider_account.rb +3 -0
- data/test/dummy/app/models/provider_type.rb +3 -0
- data/test/dummy/app/models/tim/base_image.rb +6 -0
- data/test/dummy/app/models/user.rb +3 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/tim/base_images/_custom.xml.haml +1 -0
- data/test/dummy/app/views/tim/image_versions/_custom.xml.haml +1 -0
- data/test/dummy/app/views/tim/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/tim/provider_images/_custom.xml.haml +1 -0
- data/test/dummy/app/views/tim/target_images/_custom.xml.haml +1 -0
- data/test/dummy/app/views/tim/templates/_custom.xml.haml +1 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +58 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +28 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/tim.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20120326103723532622_create_users.rb +9 -0
- data/test/dummy/db/migrate/20120423123114264114_create_pool_families.rb +7 -0
- data/test/dummy/db/migrate/20120911182850_add_pool_family_id_to_tim_base_image.rb +5 -0
- data/test/dummy/db/migrate/20120911202845_add_provider_type_id_to_tim_target_image.rb +5 -0
- data/test/dummy/db/migrate/20120911203222_create_provider_types.rb +7 -0
- data/test/dummy/db/migrate/20120911205431_create_provider_accounts.rb +7 -0
- data/test/dummy/db/schema.rb +86 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +982 -0
- data/test/dummy/log/test.log +8629 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +26 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test.rb +0 -0
- data/test/dummy/tmp/cache/assets/C7A/BB0/sprockets%2F13445f7a19078dd2df39517062aa6711 +0 -0
- data/test/dummy/tmp/cache/assets/C8C/CC0/sprockets%2F95d79f3b3096348427f3e4e38b5202e3 +0 -0
- data/test/dummy/tmp/cache/assets/CB0/2B0/sprockets%2F79106b90879c02a115d7f6f1c8390ac4 +0 -0
- data/test/dummy/tmp/cache/assets/CE0/690/sprockets%2F04c628c2a636286bfa92a4966b82b92a +0 -0
- data/test/dummy/tmp/cache/assets/D03/040/sprockets%2Fd9e94204d4b307145f12efc109b16c1f +0 -0
- data/test/dummy/tmp/cache/assets/D06/DC0/sprockets%2Fcd282851b6e4c463409ba3ece67e0510 +0 -0
- data/test/dummy/tmp/cache/assets/D23/5F0/sprockets%2F2a521f3183c6bbcd71bd26a5490b201e +0 -0
- data/test/dummy/tmp/cache/assets/D64/3A0/sprockets%2F56ac1aed10c39b12a88cb1b30f668f58 +0 -0
- data/test/dummy/tmp/cache/assets/D69/BD0/sprockets%2F0aaf75cf34556b33a9fec534fe4d0415 +0 -0
- data/test/dummy/tmp/cache/assets/D87/D80/sprockets%2Fefa3c8b210e87358c7add88cd6f49597 +0 -0
- data/test/dummy/tmp/cache/assets/D89/200/sprockets%2Ff9b4e953c874ed6a87de6490d055d9db +0 -0
- data/test/dummy/tmp/cache/assets/DF4/430/sprockets%2F403bb1de60cae4325cebd7e6c389b8ad +0 -0
- data/test/dummy/tmp/cache/assets/E00/500/sprockets%2Faaddc5b6f2cb6b98930cc54cf4c64a95 +0 -0
- data/test/dummy/tmp/cache/assets/EB3/CE0/sprockets%2Fd75a89c9fffacd99bce7eed96844eafc +0 -0
- metadata +432 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Tim
|
4
|
+
describe EntrypointController, :type => :controller do
|
5
|
+
render_views
|
6
|
+
Tim::Engine.routes.default_url_options = {:host => 'test.host'}
|
7
|
+
|
8
|
+
context "XML format response for " do
|
9
|
+
before do
|
10
|
+
send_and_accept_xml
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#index" do
|
14
|
+
before do
|
15
|
+
get :index
|
16
|
+
end
|
17
|
+
|
18
|
+
it { response.should be_success }
|
19
|
+
it { response.headers['Content-Type'].should include("application/xml") }
|
20
|
+
it "should have all resources URLs" do
|
21
|
+
resp = Hash.from_xml(response.body)
|
22
|
+
api = resp['api']
|
23
|
+
api['templates']['href'].should == templates_url
|
24
|
+
api['base_images']['href'].should == base_images_url
|
25
|
+
api['image_versions']['href'].should == image_versions_url
|
26
|
+
api['target_images']['href'].should == target_images_url
|
27
|
+
api['provider_images']['href'].should == provider_images_url
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Tim
|
4
|
+
describe ImageVersionsController do
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "Image Versions API" do
|
8
|
+
before(:each) do
|
9
|
+
send_and_accept_xml
|
10
|
+
TargetImage.any_instance.stub(:create_factory_target_image).and_return(true)
|
11
|
+
ImageVersionsController.any_instance.stub(:template_exists?).and_return false
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "Create Image Version" do
|
15
|
+
|
16
|
+
context "Success" do
|
17
|
+
it "should return a new image version as xml" do
|
18
|
+
post :create, { :image_version => {}}
|
19
|
+
response.code.should == "201"
|
20
|
+
|
21
|
+
body = Hash.from_xml(response.body)
|
22
|
+
body.keys.should == ["image_version"]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return a new image version with base image as xml" do
|
26
|
+
post :create, { :image_version => {:base_image => {:name => "Name"}}}
|
27
|
+
response.code.should == "201"
|
28
|
+
|
29
|
+
body = Hash.from_xml(response.body)
|
30
|
+
body.keys.should == ["image_version"]
|
31
|
+
body["image_version"].keys.should =~ ["base_image", "id", "href", "target_images"]
|
32
|
+
body["image_version"]["base_image"].keys.should =~ ["id", "href"]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "failure" do
|
37
|
+
it "should return a unprocessable entity error when the client sends invalid content" do
|
38
|
+
post :create, { :invalid_image => FactoryGirl.build(:image_version).attributes }
|
39
|
+
response.code.should == "422"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "Show Image Version" do
|
45
|
+
context "Success" do
|
46
|
+
it "should return an existing image version as XML" do
|
47
|
+
image_version = FactoryGirl.create(:image_version_with_base_image)
|
48
|
+
get :show, :id => image_version.id
|
49
|
+
|
50
|
+
response.code.should == "200"
|
51
|
+
|
52
|
+
body = Hash.from_xml(response.body)
|
53
|
+
body.keys.should == ["image_version"]
|
54
|
+
body["image_version"].keys.should =~ ["id", "href", "target_images", "base_image"]
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should return an existing base image as XML with target images" do
|
58
|
+
image_version = FactoryGirl.create(:image_version_with_target_images)
|
59
|
+
get :show, :id => image_version.id
|
60
|
+
|
61
|
+
response.code.should == "200"
|
62
|
+
|
63
|
+
body = Hash.from_xml(response.body)
|
64
|
+
body.keys.should == ["image_version"]
|
65
|
+
body["image_version"].keys.should =~ ["base_image", "id", "href", "target_images"]
|
66
|
+
body["image_version"]["target_images"]["target_image"].size.should == 2
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "failure" do
|
71
|
+
it "should return a not found response when an image version does not exist" do
|
72
|
+
get :show, :id => -1
|
73
|
+
response.code.should == "404"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "List Image Versions" do
|
79
|
+
context "Success" do
|
80
|
+
it "should return a list of existing base images as XML" do
|
81
|
+
3.times do
|
82
|
+
FactoryGirl.create(:image_version_with_base_image)
|
83
|
+
end
|
84
|
+
|
85
|
+
get :index
|
86
|
+
|
87
|
+
body = Hash.from_xml(response.body)
|
88
|
+
body.keys.should == ["image_versions"]
|
89
|
+
body["image_versions"]["image_version"].first.keys.should =~ ["id", "href"]
|
90
|
+
body["image_versions"]["image_version"].size.should == ImageVersion.all.size
|
91
|
+
response.code.should == "200"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "Delete Image Version" do
|
97
|
+
context "Success" do
|
98
|
+
it "should return a no content code when deleting an image version" do
|
99
|
+
image_version = FactoryGirl.create(:image_version)
|
100
|
+
delete :destroy, :id => image_version.id
|
101
|
+
response.code.should == "204"
|
102
|
+
|
103
|
+
expect { ImageVersion.find(image_version.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context "Failure" do
|
108
|
+
it "should return a not found code when deleting an image version that does not exist" do
|
109
|
+
delete :destroy, :id => -1
|
110
|
+
response.code.should == "404"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "Update Image Version" do
|
116
|
+
|
117
|
+
context "Success" do
|
118
|
+
it "should return an updated image version as xml" do
|
119
|
+
image_version = FactoryGirl.create(:image_version_with_full_tree)
|
120
|
+
image_version.base_image = FactoryGirl.create(:base_image)
|
121
|
+
put :update, :id => image_version.id, :image_version => image_version.attributes
|
122
|
+
response.code.should == "200"
|
123
|
+
|
124
|
+
body = Hash.from_xml(response.body)
|
125
|
+
body.keys.should == ["image_version"]
|
126
|
+
|
127
|
+
ImageVersion.find(image_version.id).base_image.should == image_version.base_image
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context "failure" do
|
132
|
+
it "should return a unprocessable entity error when the client sends invalid content" do
|
133
|
+
image_version = FactoryGirl.create(:image_version)
|
134
|
+
post :update, :id => image_version.id, :invalid_image => image_version.attributes
|
135
|
+
response.code.should == "422"
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should return a not found code when updating an image version that does not exist" do
|
139
|
+
post :update, :id => -1, :image_version => FactoryGirl.build(:image_version).attributes
|
140
|
+
response.code.should == "404"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Tim
|
4
|
+
describe ProviderImagesController do
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "Provider Images API" do
|
8
|
+
before(:each) do
|
9
|
+
send_and_accept_xml
|
10
|
+
TargetImage.any_instance.stub(:template).and_return(FactoryGirl.build(:template))
|
11
|
+
ProviderImage.any_instance.stub(:create_factory_provider_image).and_return(true)
|
12
|
+
TargetImage.any_instance.stub(:create_factory_target_image).and_return(true)
|
13
|
+
@status_detail = mock(:status)
|
14
|
+
@status_detail.stub(:activity).and_return("Building")
|
15
|
+
ImageFactory::TargetImage.stub(:create).and_return(FactoryGirl.build(:image_factory_target_image, :status_detail => @status_detail))
|
16
|
+
ProviderImagesController.any_instance.stub(:template_exists?).and_return false
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "Create Provider Image" do
|
20
|
+
before(:each) do
|
21
|
+
ImageFactory::ProviderImage.stub(:create).and_return(FactoryGirl.build(:image_factory_provider_image))
|
22
|
+
end
|
23
|
+
|
24
|
+
context "Success" do
|
25
|
+
it "should return a new provider image as xml" do
|
26
|
+
provider_image = FactoryGirl.build(:provider_image_with_full_tree)
|
27
|
+
post :create, { :provider_image => provider_image.attributes }
|
28
|
+
response.code.should == "201"
|
29
|
+
|
30
|
+
body = Hash.from_xml(response.body)
|
31
|
+
body.keys.should == ["provider_image"]
|
32
|
+
body["provider_image"].keys.should =~ ["external_image_id", "provider",
|
33
|
+
"snapshot", "status_detail", "progress", "href", "id","target_image", "status"]
|
34
|
+
body["provider_image"]["target_image"]["id"].should == provider_image.target_image .id.to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "failure" do
|
39
|
+
it "should return a unprocessable entity error when the client sends invalid content" do
|
40
|
+
post :create, { :invalid_image => FactoryGirl.build(:provider_image).attributes }
|
41
|
+
response.code.should == "422"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "Show Provider Image" do
|
47
|
+
context "Success" do
|
48
|
+
it "should return an existing provider image as XML" do
|
49
|
+
provider_image = FactoryGirl.create(:provider_image_with_full_tree)
|
50
|
+
get :show, :id => provider_image.id
|
51
|
+
|
52
|
+
response.code.should == "200"
|
53
|
+
|
54
|
+
body = Hash.from_xml(response.body)
|
55
|
+
body.keys.should == ["provider_image"]
|
56
|
+
body["provider_image"].keys.should =~ ["external_image_id", "provider",
|
57
|
+
"snapshot", "status_detail", "progress", "href", "id","target_image", "status"]
|
58
|
+
body["provider_image"]["target_image"]["id"].should == provider_image.target_image .id.to_s
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "failure" do
|
63
|
+
it "should return a not found response when an provider image does not exist" do
|
64
|
+
get :show, :id => -1
|
65
|
+
response.code.should == "404"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "List Image Versions" do
|
71
|
+
context "Success" do
|
72
|
+
it "should return a list of existing provider images as XML" do
|
73
|
+
3.times do
|
74
|
+
FactoryGirl.create(:provider_image)
|
75
|
+
end
|
76
|
+
|
77
|
+
get :index
|
78
|
+
|
79
|
+
body = Hash.from_xml(response.body)
|
80
|
+
body.keys.should == ["provider_images"]
|
81
|
+
body["provider_images"]["provider_image"].first.keys.should =~ ["id", "href"]
|
82
|
+
response.code.should == "200"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "Delete Provider Image" do
|
88
|
+
context "Success" do
|
89
|
+
it "should return a no content code when deleting a provider image" do
|
90
|
+
provider_image = FactoryGirl.create(:provider_image)
|
91
|
+
delete :destroy, :id => provider_image.id
|
92
|
+
response.code.should == "204"
|
93
|
+
|
94
|
+
expect { ProviderImage.find(provider_image.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "Failure" do
|
99
|
+
it "should return a not found code when deleting a provider image" do
|
100
|
+
delete :destroy, :id => -1
|
101
|
+
response.code.should == "404"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "Update Provider Image" do
|
107
|
+
|
108
|
+
context "Success" do
|
109
|
+
it "should return an updated provider image as xml" do
|
110
|
+
provider_image = FactoryGirl.create(:provider_image_with_full_tree)
|
111
|
+
provider_image.target_image = FactoryGirl.create(:target_image )
|
112
|
+
put :update, :id => provider_image.id, :provider_image => provider_image.attributes
|
113
|
+
response.code.should == "200"
|
114
|
+
|
115
|
+
body = Hash.from_xml(response.body)
|
116
|
+
body.keys.should == ["provider_image"]
|
117
|
+
|
118
|
+
ProviderImage.find(provider_image.id).target_image.should == provider_image.target_image
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
context "failure" do
|
123
|
+
it "should return a unprocessable entity error when the client sends invalid content" do
|
124
|
+
provider_image = FactoryGirl.create(:provider_image)
|
125
|
+
post :update, :id => provider_image.id, :invalid_image => provider_image.attributes
|
126
|
+
response.code.should == "422"
|
127
|
+
end
|
128
|
+
|
129
|
+
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
|
131
|
+
response.code.should == "404"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe "Update Provider Image via factory callback" do
|
137
|
+
before(:each) do
|
138
|
+
send_and_accept_json
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should update provider image status attributes via json" do
|
142
|
+
provider_image = FactoryGirl.create(:provider_image_with_full_tree)
|
143
|
+
factory_attributes = {:percent_complete => "100", "status_detail" => {:activity => "Building Image"} }
|
144
|
+
hash = provider_image.attributes.merge(factory_attributes)
|
145
|
+
put :update, :id => provider_image.id, :provider_image => hash
|
146
|
+
response.code.should == "200"
|
147
|
+
|
148
|
+
body = JSON.parse(response.body)
|
149
|
+
body.keys.should == ["provider_image"]
|
150
|
+
body["provider_image"]["status_detail"].should == "Building Image"
|
151
|
+
body["provider_image"]["progress"].should == "100"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Tim
|
4
|
+
describe TargetImagesController do
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "Target Images API" do
|
8
|
+
before(:each) do
|
9
|
+
send_and_accept_xml
|
10
|
+
TargetImage.any_instance.stub(:template).and_return(FactoryGirl.build(:template))
|
11
|
+
TargetImage.any_instance.stub(:create_factory_target_image).and_return(true)
|
12
|
+
@status_detail = mock(:status)
|
13
|
+
@status_detail.stub(:activity).and_return("Building")
|
14
|
+
TargetImagesController.any_instance.stub(:template_exists?).and_return false
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "Create Target Image" do
|
18
|
+
before(:each) do
|
19
|
+
ImageFactory::TargetImage.stub(:create).and_return(FactoryGirl.build(:image_factory_target_image, :status_detail => @status_detail))
|
20
|
+
TargetImage.any_instance.stub(:template).and_return FactoryGirl.build(:template)
|
21
|
+
end
|
22
|
+
|
23
|
+
context "Success" do
|
24
|
+
it "should return a new target image as xml" do
|
25
|
+
target_image = FactoryGirl.build(:target_image_with_full_tree)
|
26
|
+
post :create, { :target_image => target_image.attributes }
|
27
|
+
response.code.should == "201"
|
28
|
+
|
29
|
+
body = Hash.from_xml(response.body)
|
30
|
+
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"]["image_version"]["id"].should == target_image.image_version.id.to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "failure" do
|
37
|
+
it "should return a unprocessable entity error when the client sends invalid content" do
|
38
|
+
post :create, { :invalid_image => FactoryGirl.build(:target_image).attributes }
|
39
|
+
response.code.should == "422"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "Show Target Image" do
|
45
|
+
context "Success" do
|
46
|
+
it "should return an existing target image as XML" do
|
47
|
+
target_image = FactoryGirl.create(:target_image_with_full_tree)
|
48
|
+
get :show, :id => target_image.id
|
49
|
+
|
50
|
+
response.code.should == "200"
|
51
|
+
|
52
|
+
body = Hash.from_xml(response.body)
|
53
|
+
body.keys.should == ["target_image"]
|
54
|
+
body["target_image"].keys.should =~ ["id", "href", "image_version",
|
55
|
+
"provider_images", "target", "status", "status_detail", "progress"]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "failure" do
|
60
|
+
it "should return a not found response when an target image does not exist" do
|
61
|
+
get :show, :id => -1
|
62
|
+
response.code.should == "404"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "List Image Versions" do
|
68
|
+
context "Success" do
|
69
|
+
it "should return a list of existing target images as XML" do
|
70
|
+
3.times do
|
71
|
+
FactoryGirl.create(:target_image)
|
72
|
+
end
|
73
|
+
|
74
|
+
get :index
|
75
|
+
|
76
|
+
body = Hash.from_xml(response.body)
|
77
|
+
body.keys.should == ["target_images"]
|
78
|
+
body["target_images"]["target_image"].first.keys.should =~ ["id", "href"]
|
79
|
+
response.code.should == "200"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "Delete Target Image" do
|
85
|
+
context "Success" do
|
86
|
+
it "should return a no content code when deleting a target image" do
|
87
|
+
target_image = FactoryGirl.create(:target_image)
|
88
|
+
delete :destroy, :id => target_image.id
|
89
|
+
response.code.should == "204"
|
90
|
+
|
91
|
+
expect { TargetImage.find(target_image.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "Failure" do
|
96
|
+
it "should return a not found code when deleting a target image" do
|
97
|
+
delete :destroy, :id => -1
|
98
|
+
response.code.should == "404"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "Update Target Image" do
|
104
|
+
|
105
|
+
context "Success" do
|
106
|
+
it "should return an updated target image as xml" do
|
107
|
+
target_image = FactoryGirl.create(:target_image_with_full_tree)
|
108
|
+
target_image.image_version = FactoryGirl.create(:image_version)
|
109
|
+
put :update, :id => target_image.id, :target_image => target_image.attributes
|
110
|
+
response.code.should == "200"
|
111
|
+
|
112
|
+
body = Hash.from_xml(response.body)
|
113
|
+
body.keys.should == ["target_image"]
|
114
|
+
|
115
|
+
TargetImage.find(target_image.id).image_version.should == target_image.image_version
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "failure" do
|
120
|
+
it "should return a unprocessable entity error when the client sends invalid content" do
|
121
|
+
target_image = FactoryGirl.create(:target_image)
|
122
|
+
put :update, :id => target_image.id, :invalid_image => target_image.attributes
|
123
|
+
response.code.should == "422"
|
124
|
+
end
|
125
|
+
|
126
|
+
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
|
128
|
+
response.code.should == "404"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "Update Target Image via factory callback" do
|
134
|
+
before(:each) do
|
135
|
+
send_and_accept_json
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should update target image status attributes via json" do
|
139
|
+
target_image = FactoryGirl.create(:target_image_with_full_tree)
|
140
|
+
factory_attributes = {:percent_complete => "100", :status_detail => {:activity => "Building Image"} }
|
141
|
+
hash = target_image.attributes.merge(factory_attributes)
|
142
|
+
put :update, :id => target_image.id, :target_image => hash
|
143
|
+
response.code.should == "200"
|
144
|
+
|
145
|
+
body = JSON.parse(response.body)
|
146
|
+
body.keys.should == ["target_image"]
|
147
|
+
body["target_image"]["status_detail"].should == "Building Image"
|
148
|
+
body["target_image"]["progress"].should == "100"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|