chef-server-api 0.10.8 → 0.10.10.beta.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -162,13 +162,17 @@ class Cookbooks < Application
162
162
  begin
163
163
  cookbook = Chef::CookbookVersion.cdb_load(cookbook_name, cookbook_version)
164
164
  cookbook.manifest = params['inflated_object'].manifest
165
+ new_cookbook = false
165
166
  rescue Chef::Exceptions::CouchDBNotFound => e
166
167
  Chef::Log.debug("Cookbook #{cookbook_name} version #{cookbook_version} does not exist")
167
168
  cookbook = params['inflated_object']
169
+ new_cookbook = true
168
170
  end
169
171
 
170
- if cookbook.frozen_version? && params[:force].nil?
171
- raise Conflict, "The cookbook #{cookbook.name} at version #{cookbook.version} is frozen. Use the 'force' option to override."
172
+ unless new_cookbook
173
+ if cookbook.frozen_version? && params[:force].nil?
174
+ raise Conflict, "The cookbook #{cookbook.name} at version #{cookbook.version} is frozen. Use the 'force' option to override."
175
+ end
172
176
  end
173
177
 
174
178
  cookbook.freeze_version if params["inflated_object"].frozen_version?
@@ -1,3 +1,3 @@
1
1
  module ChefServerApi
2
- VERSION = '0.10.8'
2
+ VERSION = '0.10.10.beta.1'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -49,6 +49,19 @@ def post_json(path, post_body, env = {}, &block)
49
49
  end
50
50
  end
51
51
 
52
+ def put_json(path, put_body, env = {}, &block)
53
+ request_json("PUT", path, {}, env) do |controller|
54
+ # Merb FakeRequest allows me no way to pass JSON across the
55
+ # FakeRequest/StringIO boundary, so we hack it here.
56
+ if put_body.is_a?(Hash)
57
+ controller.params.merge!(put_body)
58
+ else
59
+ controller.params['inflated_object'] = put_body
60
+ end
61
+ block.call if block
62
+ end
63
+ end
64
+
52
65
  # Make an HTTP call of <method>, assign the accept header to
53
66
  # application/json, and return the JSON-parsed output.
54
67
  #
@@ -98,4 +98,48 @@ describe "Cookbooks Controller" do
98
98
  end
99
99
  end
100
100
  end
101
+
102
+ describe "when uploading a cookbook" do
103
+ before do
104
+ @cookbook = make_cookbook("cookbook1", "1.0.0")
105
+ end
106
+
107
+ describe "and the cookbook is new" do
108
+ it "should upload a standard cookbook" do
109
+ Chef::CookbookVersion.stub!(:cdb_load).and_raise(Chef::Exceptions::CouchDBNotFound)
110
+ @cookbook.should_receive(:cdb_save).and_return(true)
111
+ response = put_json("/cookbooks/#{@cookbook.name}/#{@cookbook.version}", @cookbook)
112
+ end
113
+
114
+ it "should upload a frozen cookbook" do
115
+ @cookbook.freeze_version
116
+ Chef::CookbookVersion.stub!(:cdb_load).and_raise(Chef::Exceptions::CouchDBNotFound)
117
+ @cookbook.should_receive(:cdb_save).and_return(true)
118
+ response = put_json("/#{@cookbook.save_url}", @cookbook)
119
+ end
120
+ end
121
+
122
+ describe "and the cookbook already exists" do
123
+ it "should overwrite the existing version" do
124
+ Chef::CookbookVersion.stub!(:cdb_load).and_return(@cookbook)
125
+ @cookbook.should_receive(:cdb_save).and_return(true)
126
+ response = put_json("/#{@cookbook.save_url}", @cookbook)
127
+ end
128
+
129
+ it "should not overwrite a frozen version" do
130
+ @cookbook.freeze_version
131
+ Chef::CookbookVersion.stub!(:cdb_load).and_return(@cookbook)
132
+ lambda do
133
+ put_json("/#{@cookbook.save_url}", @cookbook)
134
+ end.should raise_error(Merb::ControllerExceptions::Conflict, /The cookbook (\S+) at version (\S+) is frozen/)
135
+ end
136
+
137
+ it "should overwrite a frozen version if forced" do
138
+ @cookbook.freeze_version
139
+ Chef::CookbookVersion.stub!(:cdb_load).and_return(@cookbook)
140
+ @cookbook.should_receive(:cdb_save).and_return(true)
141
+ response = put_json("/#{@cookbook.force_save_url}", @cookbook)
142
+ end
143
+ end
144
+ end
101
145
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-server-api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 39
5
- prerelease:
6
- segments:
7
- - 0
8
- - 10
9
- - 8
10
- version: 0.10.8
4
+ prerelease: 8
5
+ version: 0.10.10.beta.1
11
6
  platform: ruby
12
7
  authors:
13
8
  - Opscode
@@ -15,134 +10,96 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-12-16 00:00:00 Z
13
+ date: 2012-04-06 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
16
+ name: merb-core
21
17
  requirement: &id001 !ruby/object:Gem::Requirement
22
18
  none: false
23
19
  requirements:
24
20
  - - ~>
25
21
  - !ruby/object:Gem::Version
26
- hash: 19
27
- segments:
28
- - 1
29
- - 1
30
- - 0
31
22
  version: 1.1.0
32
- version_requirements: *id001
33
- name: merb-core
34
- prerelease: false
35
23
  type: :runtime
24
+ prerelease: false
25
+ version_requirements: *id001
36
26
  - !ruby/object:Gem::Dependency
27
+ name: merb-assets
37
28
  requirement: &id002 !ruby/object:Gem::Requirement
38
29
  none: false
39
30
  requirements:
40
31
  - - ~>
41
32
  - !ruby/object:Gem::Version
42
- hash: 19
43
- segments:
44
- - 1
45
- - 1
46
- - 0
47
33
  version: 1.1.0
48
- version_requirements: *id002
49
- name: merb-assets
50
- prerelease: false
51
34
  type: :runtime
35
+ prerelease: false
36
+ version_requirements: *id002
52
37
  - !ruby/object:Gem::Dependency
38
+ name: merb-helpers
53
39
  requirement: &id003 !ruby/object:Gem::Requirement
54
40
  none: false
55
41
  requirements:
56
42
  - - ~>
57
43
  - !ruby/object:Gem::Version
58
- hash: 19
59
- segments:
60
- - 1
61
- - 1
62
- - 0
63
44
  version: 1.1.0
64
- version_requirements: *id003
65
- name: merb-helpers
66
- prerelease: false
67
45
  type: :runtime
46
+ prerelease: false
47
+ version_requirements: *id003
68
48
  - !ruby/object:Gem::Dependency
49
+ name: merb-param-protection
69
50
  requirement: &id004 !ruby/object:Gem::Requirement
70
51
  none: false
71
52
  requirements:
72
53
  - - ~>
73
54
  - !ruby/object:Gem::Version
74
- hash: 19
75
- segments:
76
- - 1
77
- - 1
78
- - 0
79
55
  version: 1.1.0
80
- version_requirements: *id004
81
- name: merb-param-protection
82
- prerelease: false
83
56
  type: :runtime
57
+ prerelease: false
58
+ version_requirements: *id004
84
59
  - !ruby/object:Gem::Dependency
60
+ name: mixlib-authentication
85
61
  requirement: &id005 !ruby/object:Gem::Requirement
86
62
  none: false
87
63
  requirements:
88
64
  - - ">="
89
65
  - !ruby/object:Gem::Version
90
- hash: 21
91
- segments:
92
- - 1
93
- - 1
94
- - 3
95
66
  version: 1.1.3
96
- version_requirements: *id005
97
- name: mixlib-authentication
98
- prerelease: false
99
67
  type: :runtime
68
+ prerelease: false
69
+ version_requirements: *id005
100
70
  - !ruby/object:Gem::Dependency
71
+ name: dep_selector
101
72
  requirement: &id006 !ruby/object:Gem::Requirement
102
73
  none: false
103
74
  requirements:
104
75
  - - ">="
105
76
  - !ruby/object:Gem::Version
106
- hash: 25
107
- segments:
108
- - 0
109
- - 0
110
- - 3
111
77
  version: 0.0.3
112
- version_requirements: *id006
113
- name: dep_selector
114
- prerelease: false
115
78
  type: :runtime
79
+ prerelease: false
80
+ version_requirements: *id006
116
81
  - !ruby/object:Gem::Dependency
82
+ name: uuidtools
117
83
  requirement: &id007 !ruby/object:Gem::Requirement
118
84
  none: false
119
85
  requirements:
120
86
  - - ~>
121
87
  - !ruby/object:Gem::Version
122
- hash: 9
123
- segments:
124
- - 2
125
- - 1
126
- - 1
127
88
  version: 2.1.1
128
- version_requirements: *id007
129
- name: uuidtools
130
- prerelease: false
131
89
  type: :runtime
90
+ prerelease: false
91
+ version_requirements: *id007
132
92
  - !ruby/object:Gem::Dependency
93
+ name: thin
133
94
  requirement: &id008 !ruby/object:Gem::Requirement
134
95
  none: false
135
96
  requirements:
136
97
  - - ">="
137
98
  - !ruby/object:Gem::Version
138
- hash: 3
139
- segments:
140
- - 0
141
99
  version: "0"
142
- version_requirements: *id008
143
- name: thin
144
- prerelease: false
145
100
  type: :runtime
101
+ prerelease: false
102
+ version_requirements: *id008
146
103
  description: A systems integration framework, built to bring the benefits of configuration management to your entire infrastructure.
147
104
  email: chef@opscode.com
148
105
  executables:
@@ -224,19 +181,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
181
  requirements:
225
182
  - - ">="
226
183
  - !ruby/object:Gem::Version
227
- hash: 3
228
- segments:
229
- - 0
230
184
  version: "0"
231
185
  required_rubygems_version: !ruby/object:Gem::Requirement
232
186
  none: false
233
187
  requirements:
234
- - - ">="
188
+ - - ">"
235
189
  - !ruby/object:Gem::Version
236
- hash: 3
237
- segments:
238
- - 0
239
- version: "0"
190
+ version: 1.3.1
240
191
  requirements: []
241
192
 
242
193
  rubyforge_project: