grape-swagger/spec/lib/extensions_spec.rb

132 lines
4.1 KiB
Ruby
Raw Normal View History

2016-02-14 21:45:25 +08:00
require 'spec_helper'
describe GrapeSwagger::DocMethods::Extensions do
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