=begin Titan API The ultimate, language agnostic, container based job processing framework. OpenAPI spec version: 0.4.4 Generated by: https://github.com/swagger-api/swagger-codegen.git 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. =end require 'spec_helper' describe IronTitan::ApiClient do context 'initialization' do context 'URL stuff' do context 'host' do it 'removes http from host' do IronTitan.configure { |c| c.host = 'http://example.com' } expect(IronTitan::Configuration.default.host).to eq('example.com') end it 'removes https from host' do IronTitan.configure { |c| c.host = 'https://wookiee.com' } expect(IronTitan::ApiClient.default.config.host).to eq('wookiee.com') end it 'removes trailing path from host' do IronTitan.configure { |c| c.host = 'hobo.com/v4' } expect(IronTitan::Configuration.default.host).to eq('hobo.com') end end context 'base_path' do it "prepends a slash to base_path" do IronTitan.configure { |c| c.base_path = 'v4/dog' } expect(IronTitan::Configuration.default.base_path).to eq('/v4/dog') end it "doesn't prepend a slash if one is already there" do IronTitan.configure { |c| c.base_path = '/v4/dog' } expect(IronTitan::Configuration.default.base_path).to eq('/v4/dog') end it "ends up as a blank string if nil" do IronTitan.configure { |c| c.base_path = nil } expect(IronTitan::Configuration.default.base_path).to eq('') end end end end describe "#update_params_for_auth!" do it "sets header api-key parameter with prefix" do IronTitan.configure do |c| c.api_key_prefix['api_key'] = 'PREFIX' c.api_key['api_key'] = 'special-key' end api_client = IronTitan::ApiClient.new config2 = IronTitan::Configuration.new do |c| c.api_key_prefix['api_key'] = 'PREFIX2' c.api_key['api_key'] = 'special-key2' end api_client2 = IronTitan::ApiClient.new(config2) auth_names = ['api_key', 'unknown'] header_params = {} query_params = {} api_client.update_params_for_auth! header_params, query_params, auth_names expect(header_params).to eq({'api_key' => 'PREFIX special-key'}) expect(query_params).to eq({}) header_params = {} query_params = {} api_client2.update_params_for_auth! header_params, query_params, auth_names expect(header_params).to eq({'api_key' => 'PREFIX2 special-key2'}) expect(query_params).to eq({}) end it "sets header api-key parameter without prefix" do IronTitan.configure do |c| c.api_key_prefix['api_key'] = nil c.api_key['api_key'] = 'special-key' end api_client = IronTitan::ApiClient.new header_params = {} query_params = {} auth_names = ['api_key', 'unknown'] api_client.update_params_for_auth! header_params, query_params, auth_names expect(header_params).to eq({'api_key' => 'special-key'}) expect(query_params).to eq({}) end end describe "timeout in #build_request" do let(:config) { IronTitan::Configuration.new } let(:api_client) { IronTitan::ApiClient.new(config) } it "defaults to 0" do expect(IronTitan::Configuration.default.timeout).to eq(0) expect(config.timeout).to eq(0) request = api_client.build_request(:get, '/test') expect(request.options[:timeout]).to eq(0) end it "can be customized" do config.timeout = 100 request = api_client.build_request(:get, '/test') expect(request.options[:timeout]).to eq(100) end end describe "#deserialize" do it "handles Array" do api_client = IronTitan::ApiClient.new headers = {'Content-Type' => 'application/json'} response = double('response', headers: headers, body: '[12, 34]') data = api_client.deserialize(response, 'Array') expect(data).to be_instance_of(Array) expect(data).to eq([12, 34]) end it "handles Array>" do api_client = IronTitan::ApiClient.new headers = {'Content-Type' => 'application/json'} response = double('response', headers: headers, body: '[[12, 34], [56]]') data = api_client.deserialize(response, 'Array>') expect(data).to be_instance_of(Array) expect(data).to eq([[12, 34], [56]]) end it "handles Hash" do api_client = IronTitan::ApiClient.new headers = {'Content-Type' => 'application/json'} response = double('response', headers: headers, body: '{"message": "Hello"}') data = api_client.deserialize(response, 'Hash') expect(data).to be_instance_of(Hash) expect(data).to eq({:message => 'Hello'}) end it "handles Hash" do api_client = IronTitan::ApiClient.new headers = {'Content-Type' => 'application/json'} response = double('response', headers: headers, body: '{"pet": {"id": 1}}') data = api_client.deserialize(response, 'Hash') expect(data).to be_instance_of(Hash) expect(data.keys).to eq([:pet]) pet = data[:pet] expect(pet).to be_instance_of(IronTitan::Pet) expect(pet.id).to eq(1) end it "handles Hash>" do api_client = IronTitan::ApiClient.new headers = {'Content-Type' => 'application/json'} response = double('response', headers: headers, body: '{"data": {"pet": {"id": 1}}}') result = api_client.deserialize(response, 'Hash>') expect(result).to be_instance_of(Hash) expect(result.keys).to match_array([:data]) data = result[:data] expect(data).to be_instance_of(Hash) expect(data.keys).to match_array([:pet]) pet = data[:pet] expect(pet).to be_instance_of(IronTitan::Pet) expect(pet.id).to eq(1) end end describe "#object_to_hash" do it "ignores nils and includes empty arrays" do api_client = IronTitan::ApiClient.new pet = IronTitan::Pet.new pet.id = 1 pet.name = '' pet.status = nil pet.photo_urls = nil pet.tags = [] expected = {id: 1, name: '', tags: []} expect(api_client.object_to_hash(pet)).to eq(expected) end end describe "#build_collection_param" do let(:param) { ['aa', 'bb', 'cc'] } let(:api_client) { IronTitan::ApiClient.new } it "works for csv" do expect(api_client.build_collection_param(param, :csv)).to eq('aa,bb,cc') end it "works for ssv" do expect(api_client.build_collection_param(param, :ssv)).to eq('aa bb cc') end it "works for tsv" do expect(api_client.build_collection_param(param, :tsv)).to eq("aa\tbb\tcc") end it "works for pipes" do expect(api_client.build_collection_param(param, :pipes)).to eq('aa|bb|cc') end it "works for multi" do expect(api_client.build_collection_param(param, :multi)).to eq(['aa', 'bb', 'cc']) end it "fails for invalid collection format" do expect(proc { api_client.build_collection_param(param, :INVALID) }).to raise_error(RuntimeError, 'unknown collection format: :INVALID') end end describe "#json_mime?" do let(:api_client) { IronTitan::ApiClient.new } it "works" do expect(api_client.json_mime?(nil)).to eq false expect(api_client.json_mime?('')).to eq false expect(api_client.json_mime?('application/json')).to eq true expect(api_client.json_mime?('application/json; charset=UTF8')).to eq true expect(api_client.json_mime?('APPLICATION/JSON')).to eq true expect(api_client.json_mime?('application/xml')).to eq false expect(api_client.json_mime?('text/plain')).to eq false expect(api_client.json_mime?('application/jsonp')).to eq false end end describe "#select_header_accept" do let(:api_client) { IronTitan::ApiClient.new } it "works" do expect(api_client.select_header_accept(nil)).to be_nil expect(api_client.select_header_accept([])).to be_nil expect(api_client.select_header_accept(['application/json'])).to eq('application/json') expect(api_client.select_header_accept(['application/xml', 'application/json; charset=UTF8'])).to eq('application/json; charset=UTF8') expect(api_client.select_header_accept(['APPLICATION/JSON', 'text/html'])).to eq('APPLICATION/JSON') expect(api_client.select_header_accept(['application/xml'])).to eq('application/xml') expect(api_client.select_header_accept(['text/html', 'application/xml'])).to eq('text/html,application/xml') end end describe "#select_header_content_type" do let(:api_client) { IronTitan::ApiClient.new } it "works" do expect(api_client.select_header_content_type(nil)).to eq('application/json') expect(api_client.select_header_content_type([])).to eq('application/json') expect(api_client.select_header_content_type(['application/json'])).to eq('application/json') expect(api_client.select_header_content_type(['application/xml', 'application/json; charset=UTF8'])).to eq('application/json; charset=UTF8') expect(api_client.select_header_content_type(['APPLICATION/JSON', 'text/html'])).to eq('APPLICATION/JSON') expect(api_client.select_header_content_type(['application/xml'])).to eq('application/xml') expect(api_client.select_header_content_type(['text/plain', 'application/xml'])).to eq('text/plain') end end describe "#sanitize_filename" do let(:api_client) { IronTitan::ApiClient.new } it "works" do expect(api_client.sanitize_filename('sun')).to eq('sun') expect(api_client.sanitize_filename('sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('../sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('/var/tmp/sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('./sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('..\sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('\var\tmp\sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('c:\var\tmp\sun.gif')).to eq('sun.gif') expect(api_client.sanitize_filename('.\sun.gif')).to eq('sun.gif') end end end