| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  | require 'spec_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe 'exposing' do | 
					
						
							| 
									
										
										
										
											2015-12-18 05:12:00 +08:00
										 |  |  |   include_context "the api entities" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |   before :all do | 
					
						
							|  |  |  |     module TheApi | 
					
						
							|  |  |  |       class ResponseApi < Grape::API | 
					
						
							|  |  |  |         format :json | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         desc 'This returns something', | 
					
						
							|  |  |  |           params: Entities::UseResponse.documentation, | 
					
						
							|  |  |  |           failure: [{code: 400, message: 'NotFound', model: Entities::ApiError}] | 
					
						
							| 
									
										
										
										
											2016-01-29 06:22:42 +08:00
										 |  |  |         post '/params_response' do | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |           { "declared_params" => declared(params) } | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         desc 'This returns something', | 
					
						
							|  |  |  |           entity: Entities::UseResponse, | 
					
						
							|  |  |  |           failure: [{code: 400, message: 'NotFound', model: Entities::ApiError}] | 
					
						
							|  |  |  |         get '/entity_response' do | 
					
						
							|  |  |  |           { "declared_params" => declared(params) } | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |         desc 'This returns something', | 
					
						
							|  |  |  |           entity: Entities::UseTemResponseAsType, | 
					
						
							|  |  |  |           failure: [{code: 400, message: 'NotFound', model: Entities::ApiError}] | 
					
						
							|  |  |  |         get '/nested_type' do | 
					
						
							|  |  |  |           { "declared_params" => declared(params) } | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |         add_swagger_documentation | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def app | 
					
						
							|  |  |  |     TheApi::ResponseApi | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |   describe "uses nested type as response object" do | 
					
						
							|  |  |  |     subject do | 
					
						
							|  |  |  |       get '/swagger_doc/nested_type' | 
					
						
							|  |  |  |       JSON.parse(last_response.body) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     specify do | 
					
						
							|  |  |  |       expect(subject).to eql({ | 
					
						
							|  |  |  |         "info"=>{"title"=>"API title", "version"=>"v1"}, | 
					
						
							|  |  |  |         "swagger"=>"2.0", | 
					
						
							|  |  |  |         "produces"=>["application/json"], | 
					
						
							|  |  |  |         "host"=>"example.org", | 
					
						
							|  |  |  |         "tags"=>[ | 
					
						
							|  |  |  |           {"name"=>"params_response", "description"=>"Operations about params_responses"}, | 
					
						
							|  |  |  |           {"name"=>"entity_response", "description"=>"Operations about entity_responses"}, | 
					
						
							|  |  |  |           {"name"=>"nested_type", "description"=>"Operations about nested_types"} | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |         "schemes"=>["https", "http"], | 
					
						
							|  |  |  |         "paths"=>{ | 
					
						
							|  |  |  |           "/nested_type"=>{ | 
					
						
							|  |  |  |             "get"=>{ | 
					
						
							|  |  |  |               "produces"=>["application/json"], | 
					
						
							|  |  |  |               "responses"=>{ | 
					
						
							|  |  |  |                 "200"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/UseTemResponseAsType"}}, | 
					
						
							|  |  |  |                 "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}} | 
					
						
							|  |  |  |               }, | 
					
						
							|  |  |  |               "tags"=>["nested_type"], | 
					
						
							|  |  |  |               "operationId"=>"getNestedType" | 
					
						
							|  |  |  |         }}}, | 
					
						
							|  |  |  |         "definitions"=>{ | 
					
						
							|  |  |  |           "ResponseItem"=>{"type"=>"object", "properties"=>{"id"=>{"type"=>"integer"}, "name"=>{"type"=>"string"}}}, | 
					
						
							|  |  |  |           "UseTemResponseAsType"=>{"type"=>"object", "properties"=>{"description"=>{"type"=>"string"}, "responses"=>{"$ref"=>"#/definitions/ResponseItem"}}}, | 
					
						
							|  |  |  |           "ApiError"=>{"type"=>"object", "properties"=>{"code"=>{"type"=>"integer"}, "message"=>{"type"=>"string"}}} | 
					
						
							|  |  |  |       }}) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |   describe "uses entity as response object" do | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |     subject do | 
					
						
							|  |  |  |       get '/swagger_doc/entity_response' | 
					
						
							|  |  |  |       JSON.parse(last_response.body) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |     specify do | 
					
						
							|  |  |  |       expect(subject).to eql({ | 
					
						
							|  |  |  |         "info"=>{"title"=>"API title", "version"=>"v1"}, | 
					
						
							|  |  |  |         "swagger"=>"2.0", | 
					
						
							|  |  |  |         "produces"=>["application/json"], | 
					
						
							|  |  |  |         "host"=>"example.org", | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |         "tags" => [ | 
					
						
							|  |  |  |           {"name"=>"params_response", "description"=>"Operations about params_responses"}, | 
					
						
							|  |  |  |           {"name"=>"entity_response", "description"=>"Operations about entity_responses"}, | 
					
						
							|  |  |  |           {"name"=>"nested_type", "description"=>"Operations about nested_types"} | 
					
						
							|  |  |  |         ], | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |         "schemes"=>["https", "http"], | 
					
						
							|  |  |  |         "paths"=>{ | 
					
						
							|  |  |  |           "/entity_response"=>{ | 
					
						
							|  |  |  |             "get"=>{ | 
					
						
							|  |  |  |               "produces"=>["application/json"], | 
					
						
							| 
									
										
										
										
											2016-03-09 23:37:03 +08:00
										 |  |  |               "tags"=>["entity_response"], | 
					
						
							| 
									
										
										
										
											2016-03-16 00:53:03 +08:00
										 |  |  |               "operationId"=>"getEntityResponse", | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |               "responses"=>{ | 
					
						
							|  |  |  |                 "200"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/UseResponse"}}, | 
					
						
							|  |  |  |                 "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}}}}}}, | 
					
						
							|  |  |  |         "definitions"=>{ | 
					
						
							|  |  |  |           "ResponseItem"=>{ | 
					
						
							|  |  |  |             "type"=>"object", | 
					
						
							|  |  |  |             "properties"=>{"id"=>{"type"=>"integer"}, "name"=>{"type"=>"string"}}}, | 
					
						
							|  |  |  |           "UseResponse"=>{ | 
					
						
							|  |  |  |             "type"=>"object", | 
					
						
							| 
									
										
										
										
											2016-03-04 09:08:28 +08:00
										 |  |  |             "properties"=>{"description"=>{"type"=>"string"}, "$responses"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/ResponseItem"}}}}, | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |           "ApiError"=>{ | 
					
						
							|  |  |  |             "type"=>"object", | 
					
						
							|  |  |  |             "properties"=>{"code"=>{"type"=>"integer"}, "message"=>{"type"=>"string"}}} | 
					
						
							|  |  |  |       }}) | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |   describe "uses params as response object" do | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |     subject do | 
					
						
							|  |  |  |       get '/swagger_doc/params_response' | 
					
						
							|  |  |  |       JSON.parse(last_response.body) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |     specify do | 
					
						
							|  |  |  |       expect(subject).to eql({ | 
					
						
							|  |  |  |         "info"=>{"title"=>"API title", "version"=>"v1"}, | 
					
						
							|  |  |  |         "swagger"=>"2.0", | 
					
						
							|  |  |  |         "produces"=>["application/json"], | 
					
						
							|  |  |  |         "host"=>"example.org", | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |         "tags" => [ | 
					
						
							|  |  |  |           {"name"=>"params_response", "description"=>"Operations about params_responses"}, | 
					
						
							|  |  |  |           {"name"=>"entity_response", "description"=>"Operations about entity_responses"}, | 
					
						
							|  |  |  |           {"name"=>"nested_type", "description"=>"Operations about nested_types"} | 
					
						
							|  |  |  |         ], | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |         "schemes"=>["https", "http"], | 
					
						
							|  |  |  |         "paths"=>{ | 
					
						
							|  |  |  |           "/params_response"=>{ | 
					
						
							| 
									
										
										
										
											2016-01-29 06:22:42 +08:00
										 |  |  |             "post"=>{ | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |               "produces"=>["application/json"], | 
					
						
							| 
									
										
										
										
											2016-03-16 08:18:07 +08:00
										 |  |  |               "consumes"=>["application/json"], | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |               "parameters"=>[ | 
					
						
							| 
									
										
										
										
											2016-03-19 02:48:13 +08:00
										 |  |  |                 {"in"=>"formData", "name"=>"description", "description"=>nil, "type"=>"string", "required"=>false}, | 
					
						
							|  |  |  |                 {"in"=>"formData", "name"=>"$responses", "description"=>nil, "type"=>"string", "required"=>false}], | 
					
						
							| 
									
										
										
										
											2016-03-09 23:37:03 +08:00
										 |  |  |               "tags"=>["params_response"], | 
					
						
							| 
									
										
										
										
											2016-03-16 00:53:03 +08:00
										 |  |  |               "operationId"=>"postParamsResponse", | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |               "responses"=>{ | 
					
						
							| 
									
										
										
										
											2016-01-29 06:22:42 +08:00
										 |  |  |                 "201"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/ParamsResponse"}}, | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |                 "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}}} | 
					
						
							|  |  |  |         }}}, | 
					
						
							|  |  |  |         "definitions"=>{ | 
					
						
							| 
									
										
										
										
											2016-01-29 06:22:42 +08:00
										 |  |  |           "ParamsResponse"=>{"properties"=>{"description"=>{"type"=>"string"}, "$responses"=>{"type"=>"string"}}}, | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |           "ApiError"=>{"type"=>"object", "properties"=>{"code"=>{"type"=>"integer"}, "message"=>{"type"=>"string"}}} | 
					
						
							|  |  |  |       }}) | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end |