161 lines
3.7 KiB
Ruby
161 lines
3.7 KiB
Ruby
require 'spec_helper'
|
|
# require 'grape_version'
|
|
|
|
describe 'Convert values to enum or Range' do
|
|
def app
|
|
Class.new(Grape::API) do
|
|
format :json
|
|
|
|
params do
|
|
requires :letter, type: String, values: %w(a b c)
|
|
end
|
|
post :plain_array do
|
|
end
|
|
|
|
params do
|
|
requires :letter, type: String, values: proc { %w(d e f) }
|
|
end
|
|
post :array_in_proc do
|
|
end
|
|
|
|
params do
|
|
requires :letter, type: String, values: 'a'..'z'
|
|
end
|
|
post :range_letter do
|
|
end
|
|
|
|
params do
|
|
requires :integer, type: Integer, values: -5..5
|
|
end
|
|
post :range_integer do
|
|
end
|
|
|
|
add_swagger_documentation
|
|
end
|
|
end
|
|
|
|
def first_parameter_info(request)
|
|
get "/swagger_doc/#{request}"
|
|
expect(last_response.status).to eq 200
|
|
body = JSON.parse last_response.body
|
|
body['paths']["/#{request}"]['post']['parameters']
|
|
end
|
|
|
|
context 'Plain array values' do
|
|
subject(:plain_array) { first_parameter_info('plain_array') }
|
|
it 'has values as array in enum' do
|
|
expect(plain_array).to eq [{
|
|
"in"=>"formData",
|
|
"name"=>"letter",
|
|
"description"=>nil,
|
|
"type"=>"string",
|
|
"required"=>true,
|
|
"enum"=>["a", "b", "c"]
|
|
}]
|
|
end
|
|
end
|
|
|
|
context 'Array in proc values' do
|
|
subject(:array_in_proc) { first_parameter_info('array_in_proc') }
|
|
|
|
it 'has proc returned values as array in enum' do
|
|
expect(array_in_proc).to eq [{
|
|
"in"=>"formData",
|
|
"name"=>"letter",
|
|
"description"=>nil,
|
|
"type"=>"string",
|
|
"required"=>true,
|
|
"enum"=>["d", "e", "f"]
|
|
}]
|
|
end
|
|
end
|
|
|
|
context 'Range values' do
|
|
subject(:range_letter) { first_parameter_info('range_letter') }
|
|
|
|
it 'has letter range values' do
|
|
expect(range_letter).to eq [{
|
|
"in"=>"formData",
|
|
"name"=>"letter",
|
|
"description"=>nil,
|
|
"type"=>"string",
|
|
"required"=>true
|
|
}]
|
|
end
|
|
|
|
subject(:range_integer) { first_parameter_info('range_integer') }
|
|
|
|
it 'has integer range values' do
|
|
expect(range_integer).to eq [{
|
|
"in"=>"formData",
|
|
"name"=>"integer",
|
|
"description"=>nil,
|
|
"type"=>"integer",
|
|
"required"=>true,
|
|
"format"=>"int32",
|
|
"minimum"=>-5,
|
|
"maximum"=>5
|
|
}]
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'Convert values to enum for float range and not arrays inside a proc', if: GrapeVersion.satisfy?('>= 0.11.0') do
|
|
def app
|
|
Class.new(Grape::API) do
|
|
format :json
|
|
|
|
params do
|
|
requires :letter, type: String, values: proc { 'string' }
|
|
end
|
|
post :non_array_in_proc do
|
|
end
|
|
|
|
params do
|
|
requires :float, type: Float, values: -5.0..5.0
|
|
end
|
|
post :range_float do
|
|
end
|
|
|
|
add_swagger_documentation
|
|
end
|
|
end
|
|
|
|
def first_parameter_info(request)
|
|
get "/swagger_doc/#{request}"
|
|
expect(last_response.status).to eq 200
|
|
body = JSON.parse last_response.body
|
|
body['paths']["/#{request}"]['post']['parameters']
|
|
end
|
|
|
|
context 'Non array in proc values' do
|
|
subject(:non_array_in_proc) { first_parameter_info('non_array_in_proc') }
|
|
|
|
it 'has proc returned value as string in enum' do
|
|
expect(non_array_in_proc).to eq [{
|
|
"in"=>"formData",
|
|
"name"=>"letter",
|
|
"description"=>nil,
|
|
"type"=>"string",
|
|
"required"=>true,
|
|
"enum"=>"string"
|
|
}]
|
|
end
|
|
end
|
|
|
|
context 'Range values' do
|
|
subject(:range_float) { first_parameter_info('range_float') }
|
|
|
|
it 'has float range values as string' do
|
|
expect(range_float).to eq [{
|
|
"in"=>"formData",
|
|
"name"=>"float",
|
|
"description"=>nil,
|
|
"type"=>"number",
|
|
"required"=>true,
|
|
"format"=>"float"
|
|
}]
|
|
end
|
|
end
|
|
end
|