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

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.
@@ -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: