| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  | require 'spec_helper' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-24 07:30:38 +08:00
										 |  |  | describe 'response' 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', | 
					
						
							| 
									
										
										
										
											2016-04-07 06:08:32 +08:00
										 |  |  |           entity: Entities::UseItemResponseAsType, | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |           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 | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |       expect(subject['paths']['/nested_type']['get']).to eql({ | 
					
						
							|  |  |  |         "description"=>"This returns something", | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |         "produces"=>["application/json"], | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |         "responses"=>{ | 
					
						
							|  |  |  |           "200"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/UseItemResponseAsType"}}, | 
					
						
							|  |  |  |           "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}} | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "tags"=>["nested_type"], | 
					
						
							|  |  |  |         "operationId"=>"getNestedType" | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       expect(subject['definitions']).to eql({ | 
					
						
							|  |  |  |         "ResponseItem"=>{ | 
					
						
							|  |  |  |           "type"=>"object", | 
					
						
							|  |  |  |           "properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}, "name"=>{"type"=>"string"}} | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "UseItemResponseAsType"=>{ | 
					
						
							|  |  |  |           "type"=>"object", | 
					
						
							|  |  |  |           "properties"=>{"description"=>{"type"=>"string"}, "responses"=>{"$ref"=>"#/definitions/ResponseItem"}}, | 
					
						
							|  |  |  |           "description"=>"This returns something" | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "ApiError"=>{ | 
					
						
							|  |  |  |           "type"=>"object", | 
					
						
							|  |  |  |           "properties"=>{"code"=>{"type"=>"integer", "format"=>"int32"}, "message"=>{"type"=>"string"}}, | 
					
						
							|  |  |  |           "description"=>"This returns something" | 
					
						
							|  |  |  |       }}) | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |       expect(subject['paths']['/entity_response']['get']).to eql({ | 
					
						
							|  |  |  |         "description"=>"This returns something", | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |         "produces"=>["application/json"], | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |         "responses"=>{ | 
					
						
							|  |  |  |           "200"=>{"description"=>"This returns something", "schema"=>{"$ref"=>"#/definitions/UseResponse"}}, | 
					
						
							|  |  |  |           "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}} | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "tags"=>["entity_response"], | 
					
						
							|  |  |  |         "operationId"=>"getEntityResponse" | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       expect(subject['definitions']).to eql({ | 
					
						
							|  |  |  |         "ResponseItem"=>{ | 
					
						
							|  |  |  |           "type"=>"object", | 
					
						
							|  |  |  |           "properties"=>{"id"=>{"type"=>"integer", "format"=>"int32"}, "name"=>{"type"=>"string"}} | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "UseResponse"=>{ | 
					
						
							|  |  |  |           "type"=>"object", | 
					
						
							|  |  |  |           "properties"=>{"description"=>{"type"=>"string"}, "$responses"=>{"type"=>"array", "items"=>{"$ref"=>"#/definitions/ResponseItem"}}}, | 
					
						
							|  |  |  |           "description"=>"This returns something" | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "ApiError"=>{ | 
					
						
							|  |  |  |           "type"=>"object", | 
					
						
							|  |  |  |           "properties"=>{"code"=>{"type"=>"integer", "format"=>"int32"}, "message"=>{"type"=>"string"}}, | 
					
						
							|  |  |  |           "description"=>"This returns something" | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |       }}) | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |       expect(subject['paths']['/params_response']['post']).to eql({ | 
					
						
							|  |  |  |         "description"=>"This returns something", | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |         "produces"=>["application/json"], | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |         "consumes"=>["application/json"], | 
					
						
							|  |  |  |         "parameters"=>[ | 
					
						
							|  |  |  |           {"in"=>"formData", "name"=>"description", "type"=>"string", "required"=>false}, | 
					
						
							|  |  |  |           {"in"=>"formData", "name"=>"$responses", "type"=>"array", "items"=>{"type"=>"string"}, "required"=>false} | 
					
						
							| 
									
										
										
										
											2016-03-16 19:30:52 +08:00
										 |  |  |         ], | 
					
						
							| 
									
										
										
										
											2016-05-01 18:31:44 +08:00
										 |  |  |         "responses"=>{ | 
					
						
							|  |  |  |           "201"=>{"description"=>"This returns something"}, | 
					
						
							|  |  |  |           "400"=>{"description"=>"NotFound", "schema"=>{"$ref"=>"#/definitions/ApiError"}} | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "tags"=>["params_response"], | 
					
						
							|  |  |  |         "operationId"=>"postParamsResponse" | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |       expect(subject['definitions']).to eql({ | 
					
						
							|  |  |  |         'ApiError'=>{ | 
					
						
							|  |  |  |           'type'=>'object', | 
					
						
							|  |  |  |           'properties'=>{'code'=>{'type'=>'integer', 'format'=>'int32'}, 'message'=>{'type'=>'string'}}, | 
					
						
							|  |  |  |           'description'=>'This returns something' | 
					
						
							| 
									
										
										
										
											2015-12-19 01:40:53 +08:00
										 |  |  |       }}) | 
					
						
							| 
									
										
										
										
											2015-12-09 20:40:33 +08:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |