2017-03-08 16:32:31 +08:00
|
|
|
# frozen_string_literal: true
|
2017-03-28 17:15:33 +08:00
|
|
|
|
2016-02-14 21:45:25 +08:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe GrapeSwagger::DocMethods::Extensions do
|
2019-10-03 16:47:16 +08:00
|
|
|
context 'it should not break method introspection' do
|
|
|
|
describe '.method' do
|
|
|
|
describe 'method introspection' do
|
|
|
|
specify do
|
|
|
|
expect(described_class.method(described_class.methods.first)).to be_a(Method)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-01-16 06:46:22 +08:00
|
|
|
describe '#find_definition' do
|
|
|
|
subject { described_class }
|
|
|
|
|
|
|
|
let(:method) { :get }
|
|
|
|
let(:status) { 200 }
|
|
|
|
|
|
|
|
before { allow(subject).to receive(:method).and_return(method) }
|
|
|
|
|
|
|
|
describe 'no response for status' do
|
|
|
|
let(:path) { { get: { responses: {} } } }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
definition = subject.find_definition(status, path)
|
|
|
|
expect(definition).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'response found' do
|
|
|
|
let(:model) { 'Item' }
|
|
|
|
|
|
|
|
describe 'ref given' do
|
|
|
|
let(:path) do
|
|
|
|
{ get: { responses: { 200 => { schema: { '$ref' => "#/definitions/#{model}" } } } } }
|
|
|
|
end
|
|
|
|
specify do
|
|
|
|
definition = subject.find_definition(status, path)
|
|
|
|
expect(definition).to eql model
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'items given' do
|
|
|
|
let(:path) do
|
|
|
|
{ get: { responses: { 200 => { schema: { 'items' => { '$ref' => "#/definitions/#{model}" } } } } } }
|
|
|
|
end
|
|
|
|
specify do
|
|
|
|
definition = subject.find_definition(status, path)
|
|
|
|
expect(definition).to eql model
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe '#extended? and extension' do
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class }
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'return false (default)' do
|
|
|
|
let(:part) { { foo: 'bar', bar: 'foo' } }
|
2016-02-14 21:45:25 +08:00
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject.extended?(part)).to be false
|
|
|
|
expect(subject.extension(part)).to be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'return true' do
|
2016-02-14 21:45:25 +08:00
|
|
|
specify do
|
|
|
|
part = { foo: 'bar', bar: 'foo', x: 'something' }
|
|
|
|
expect(subject.extended?(part)).to be true
|
2016-05-07 03:00:36 +08:00
|
|
|
expect(subject.extension(part)).to eql(x: 'something')
|
2016-02-14 21:45:25 +08:00
|
|
|
expect(subject.extended?(part, :x)).to be true
|
2016-05-07 03:00:36 +08:00
|
|
|
expect(subject.extension(part, :x)).to eql(x: 'something')
|
2016-02-14 21:45:25 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
specify do
|
|
|
|
part = { foo: 'bar', bar: 'foo', x_path: 'something' }
|
|
|
|
expect(subject.extended?(part, :x_path)).to be true
|
2016-05-07 03:00:36 +08:00
|
|
|
expect(subject.extension(part, :x_path)).to eql(x_path: 'something')
|
2016-02-14 21:45:25 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
specify do
|
|
|
|
part = { foo: 'bar', bar: 'foo', x_def: 'something' }
|
|
|
|
expect(subject.extended?(part, :x_def)).to be true
|
2016-05-07 03:00:36 +08:00
|
|
|
expect(subject.extension(part, :x_def)).to eql(x_def: 'something')
|
2016-02-14 21:45:25 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
specify do
|
|
|
|
part = { foo: 'bar', bar: 'foo', x_path: 'something', x_def: 'something' }
|
|
|
|
expect(subject.extended?(part, :x_path)).to be true
|
2016-05-07 03:00:36 +08:00
|
|
|
expect(subject.extension(part, :x_path)).to eql(x_path: 'something')
|
2016-02-14 21:45:25 +08:00
|
|
|
expect(subject.extended?(part, :x_def)).to be true
|
2016-05-07 03:00:36 +08:00
|
|
|
expect(subject.extension(part, :x_def)).to eql(x_def: 'something')
|
2016-02-14 21:45:25 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'concatenate' do
|
|
|
|
describe 'not nested' do
|
|
|
|
describe 'simple' do
|
|
|
|
let(:extensions) { { x: { key_1: 'foo' } } }
|
|
|
|
let(:result) { { 'x-key_1' => 'foo' } }
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'multiple' do
|
|
|
|
let(:extensions) { { x: { key_1: 'foo', key_2: 'bar' } } }
|
|
|
|
let(:result) { { 'x-key_1' => 'foo', 'x-key_2' => 'bar' } }
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'nested' do
|
|
|
|
describe 'simple' do
|
|
|
|
let(:extensions) { { x: { key_1: { key_2: 'foo' } } } }
|
|
|
|
let(:result) { { 'x-key_1' => { key_2: 'foo' } } }
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'simple multiple' do
|
|
|
|
let(:extensions) { { x: { key_1: { key_2: 'foo', key_3: 'bar' } } } }
|
|
|
|
let(:result) { { 'x-key_1' => { key_2: 'foo', key_3: 'bar' } } }
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'simple deeper' do
|
|
|
|
let(:extensions) { { x: { key_1: { key_2: { key_3: 'foo' } } } } }
|
|
|
|
let(:result) { { 'x-key_1' => { key_2: { key_3: 'foo' } } } }
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'multiple' do
|
|
|
|
let(:extensions) { { x: { key_1: { key_3: 'foo' }, key_2: { key_3: 'bar' } } } }
|
|
|
|
let(:result) { { 'x-key_1' => { key_3: 'foo' }, 'x-key_2' => { key_3: 'bar' } } }
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-05-07 03:00:36 +08:00
|
|
|
describe 'real example' do
|
|
|
|
let(:extensions) do
|
|
|
|
{ x: {
|
|
|
|
'amazon-apigateway-auth' => { type: 'none' },
|
|
|
|
'amazon-apigateway-integration' => { type: 'aws', uri: 'foo_bar_uri', httpMethod: 'get' }
|
|
|
|
} }
|
|
|
|
end
|
|
|
|
let(:result) do
|
|
|
|
{
|
|
|
|
'x-amazon-apigateway-auth' => { type: 'none' },
|
|
|
|
'x-amazon-apigateway-integration' => { type: 'aws', uri: 'foo_bar_uri', httpMethod: 'get' }
|
|
|
|
}
|
|
|
|
end
|
2016-02-14 21:45:25 +08:00
|
|
|
subject { described_class.concatenate(extensions) }
|
|
|
|
|
|
|
|
specify do
|
|
|
|
expect(subject).to eql result
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|