| 
									
										
										
										
											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 |