[Ruby] Fix Operation Servers (#16144)

* [Ruby] Fix Operation Servers

* user `server_index` instead of `index`

* use nil as default

* add tests

* revert tests

* add tests to custom file

* add test file to ruby-faraday
This commit is contained in:
Cameron Koegel
2023-07-25 00:18:23 -04:00
committed by GitHub
parent 66155d622c
commit 54d996732f
9 changed files with 213 additions and 49 deletions
@@ -108,7 +108,7 @@ module {{moduleName}}
@scheme = '{{scheme}}'
@host = '{{host}}{{#port}}:{{{.}}}{{/port}}'
@base_path = '{{contextPath}}'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -171,10 +171,12 @@ module {{moduleName}}
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -336,8 +338,8 @@ module {{moduleName}}
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
@@ -152,7 +152,7 @@ module Petstore
@scheme = 'http'
@host = 'petstore.swagger.io'
@base_path = '/v2'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -200,10 +200,12 @@ module Petstore
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -397,8 +399,8 @@ module Petstore
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
@@ -151,7 +151,7 @@ module Petstore
@scheme = 'http'
@host = 'petstore.swagger.io'
@base_path = '/v2'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -204,10 +204,12 @@ module Petstore
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -401,8 +403,8 @@ module Petstore
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
@@ -0,0 +1,75 @@
=begin
#OpenAPI Petstore
#This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
The version of the OpenAPI document: 1.0.0
Generated by: https://openapi-generator.tech
OpenAPI Generator version: 7.0.0-SNAPSHOT
=end
require 'spec_helper'
describe Petstore::Configuration do
let(:config) { Petstore::Configuration.new }
before(:each) do
# uncomment below to setup host and base_path
# require 'URI'
# uri = URI.parse("http://petstore.swagger.io:80/v2")
# Petstore.configure do |c|
# c.host = uri.host
# c.base_path = uri.path
# end
end
describe '#base_url' do
it 'should have the default value' do
expect(config.base_url).to eq("http://petstore.swagger.io/v2")
end
it 'returns default value when invalid operation is passed' do
expect(config.base_url('invalid_operation')).to eq('http://petstore.swagger.io/v2')
end
it 'returns proper URL default server_index' do
expect(config.base_url(:'PetApi.add_pet')).to eq('http://petstore.swagger.io/v2')
end
it 'returns proper URL when server_index is set' do
config.server_index = 1
expect(config.base_url(:'PetApi.add_pet')).to eq('http://path-server-test.petstore.local/v2')
end
it 'returns proper URL when server_operation_index is set' do
config.server_operation_index = {
:'PetApi.add_pet' => 1
}
expect(config.base_url(:'PetApi.add_pet')).to eq('http://path-server-test.petstore.local/v2')
end
it 'returns proper URL from server_settings when server_index is set' do
config.server_index = 1
expect(config.base_url).to eq('https://localhost:8080/v2')
end
it 'throws argument error when attempting to use a server index that is out of bounds' do
config.server_operation_index = {
:'PetApi.add_pet' => 10
}
expect {
config.base_url(:'PetApi.add_pet')
}.to raise_error(ArgumentError, 'Invalid index 10 when selecting the server. Must not be nil and must be less than 3')
end
it 'should remove trailing slashes' do
[nil, '', '/', '//'].each do |base_path|
config.base_path = base_path
# uncomment below to test trailing slashes
# expect(config.base_url).to eq("http://petstore.swagger.io:80/v2")
end
end
end
end
@@ -152,7 +152,7 @@ module Petstore
@scheme = 'http'
@host = 'petstore.swagger.io'
@base_path = '/v2'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -200,10 +200,12 @@ module Petstore
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -397,8 +399,8 @@ module Petstore
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
@@ -0,0 +1,75 @@
=begin
#OpenAPI Petstore
#This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
The version of the OpenAPI document: 1.0.0
Generated by: https://openapi-generator.tech
OpenAPI Generator version: 7.0.0-SNAPSHOT
=end
require 'spec_helper'
describe Petstore::Configuration do
let(:config) { Petstore::Configuration.new }
before(:each) do
# uncomment below to setup host and base_path
# require 'URI'
# uri = URI.parse("http://petstore.swagger.io:80/v2")
# Petstore.configure do |c|
# c.host = uri.host
# c.base_path = uri.path
# end
end
describe '#base_url' do
it 'should have the default value' do
expect(config.base_url).to eq("http://petstore.swagger.io/v2")
end
it 'returns default value when invalid operation is passed' do
expect(config.base_url('invalid_operation')).to eq('http://petstore.swagger.io/v2')
end
it 'returns proper URL default server_index' do
expect(config.base_url(:'PetApi.add_pet')).to eq('http://petstore.swagger.io/v2')
end
it 'returns proper URL when server_index is set' do
config.server_index = 1
expect(config.base_url(:'PetApi.add_pet')).to eq('http://path-server-test.petstore.local/v2')
end
it 'returns proper URL when server_operation_index is set' do
config.server_operation_index = {
:'PetApi.add_pet' => 1
}
expect(config.base_url(:'PetApi.add_pet')).to eq('http://path-server-test.petstore.local/v2')
end
it 'returns proper URL from server_settings when server_index is set' do
config.server_index = 1
expect(config.base_url).to eq('https://localhost:8080/v2')
end
it 'throws argument error when attempting to use a server index that is out of bounds' do
config.server_operation_index = {
:'PetApi.add_pet' => 10
}
expect {
config.base_url(:'PetApi.add_pet')
}.to raise_error(ArgumentError, 'Invalid index 10 when selecting the server. Must not be nil and must be less than 3')
end
it 'should remove trailing slashes' do
[nil, '', '/', '//'].each do |base_path|
config.base_path = base_path
# uncomment below to test trailing slashes
# expect(config.base_url).to eq("http://petstore.swagger.io:80/v2")
end
end
end
end
@@ -152,7 +152,7 @@ module XAuthIDAlias
@scheme = 'http'
@host = 'petstore.swagger.io'
@base_path = '/v2'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -200,10 +200,12 @@ module XAuthIDAlias
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -305,8 +307,8 @@ module XAuthIDAlias
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
@@ -152,7 +152,7 @@ module DynamicServers
@scheme = 'http'
@host = 'petstore.swagger.io'
@base_path = '/v2'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -200,10 +200,12 @@ module DynamicServers
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -342,8 +344,8 @@ module DynamicServers
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]
@@ -152,7 +152,7 @@ module Petstore
@scheme = 'http'
@host = 'petstore.swagger.io'
@base_path = '/v2'
@server_index = 0
@server_index = nil
@server_operation_index = {}
@server_variables = {}
@server_operation_variables = {}
@@ -200,10 +200,12 @@ module Petstore
# Returns base URL for specified operation based on server settings
def base_url(operation = nil)
index = server_operation_index[operation]
return "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') if index == nil
server_url(index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
if operation_server_settings.key?(operation) then
index = server_operation_index.fetch(operation, server_index)
server_url(index.nil? ? 0 : index, server_operation_variables.fetch(operation, server_variables), operation_server_settings[operation])
else
server_index.nil? ? "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '') : server_url(server_index, server_variables, nil)
end
end
# Gets API key (with prefix if set).
@@ -258,8 +260,8 @@ module Petstore
servers = server_settings if servers == nil
# check array index out of bound
if (index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
if (index.nil? || index < 0 || index >= servers.size)
fail ArgumentError, "Invalid index #{index} when selecting the server. Must not be nil and must be less than #{servers.size}"
end
server = servers[index]