summaryrefslogtreecommitdiff
path: root/spec/unit/http/api_versions_spec.rb
diff options
context:
space:
mode:
authorThom May <thom@chef.io>2017-01-25 15:51:46 +0000
committerThom May <thom@chef.io>2017-02-14 11:45:44 -0800
commit46f5722ef83d3d3603e23ac9525c49f4ed43621a (patch)
tree84724dc91d23b3ef7e5da8da14ffccb4cbc13709 /spec/unit/http/api_versions_spec.rb
parentd4b87e5e0f73d92836b4523907e17b1a88be9317 (diff)
downloadchef-46f5722ef83d3d3603e23ac9525c49f4ed43621a.tar.gz
Make it easier to have a versioned factorytm/versioned_api
classes providing an API should include VersionedAPI, whilst the factory class includes VersionedAPIFactory. Signed-off-by: Thom May <thom@may.lt>
Diffstat (limited to 'spec/unit/http/api_versions_spec.rb')
-rw-r--r--spec/unit/http/api_versions_spec.rb69
1 files changed, 69 insertions, 0 deletions
diff --git a/spec/unit/http/api_versions_spec.rb b/spec/unit/http/api_versions_spec.rb
new file mode 100644
index 0000000000..79c97a1b69
--- /dev/null
+++ b/spec/unit/http/api_versions_spec.rb
@@ -0,0 +1,69 @@
+#
+# Copyright:: Copyright 2017, Chef Software, Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "spec_helper"
+
+describe Chef::HTTP::APIVersions do
+ class TestVersionClient < Chef::HTTP
+ use Chef::HTTP::APIVersions
+ end
+
+ before do
+ Chef::ServerAPIVersions.instance.reset!
+ end
+
+ let(:method) { "GET" }
+ let(:url) { "http://dummy.com" }
+ let(:headers) { {} }
+ let(:data) { false }
+
+ let(:request) {}
+ let(:return_value) { "200" }
+
+ # Test Variables
+ let(:response_body) { "Thanks for checking in." }
+ let(:response_headers) do
+ {
+ "x-ops-server-api-version" => { "min_version" => 0, "max_version" => 2 },
+ }
+ end
+
+ let(:response) do
+ m = double("HttpResponse", :body => response_body)
+ allow(m).to receive(:key?).with("x-ops-server-api-version").and_return(true)
+ allow(m).to receive(:[]) do |key|
+ response_headers[key]
+ end
+
+ m
+ end
+
+ let(:middleware) do
+ client = TestVersionClient.new(url)
+ client.middlewares[0]
+ end
+
+ def run_api_version_handler
+ middleware.handle_request(method, url, headers, data)
+ middleware.handle_response(response, request, return_value)
+ end
+
+ it "correctly stores server api versions" do
+ run_api_version_handler
+ expect(Chef::ServerAPIVersions.instance.min_server_version).to eq(0)
+ end
+end