@@ -147,15 +147,39 @@ export function buildRequest({
147147 }
148148 } )
149149
150+ const requestBodyDef = operation . requestBody || { }
151+ const requestBodyMediaTypes = Object . keys ( requestBodyDef . content || { } )
152+
153+ // for OAS3: set the Content-Type
154+ if ( specIsOAS3 && requestBody ) {
155+ // does the passed requestContentType appear in the requestBody definition?
156+ const isExplicitContentTypeValid = requestContentType
157+ && requestBodyMediaTypes . indexOf ( requestContentType ) > - 1
158+
159+ if ( requestContentType && isExplicitContentTypeValid ) {
160+ req . headers [ 'Content-Type' ] = requestContentType
161+ }
162+ else if ( ! requestContentType ) {
163+ const firstMediaType = requestBodyMediaTypes [ 0 ]
164+ if ( firstMediaType ) {
165+ req . headers [ 'Content-Type' ] = firstMediaType
166+ requestContentType = firstMediaType
167+ }
168+ }
169+ }
170+
150171 // for OAS3: add requestBody to request
151172 if ( specIsOAS3 && requestBody ) {
152173 if ( requestContentType ) {
153- const requestBodyDef = operation . requestBody
154- const requestBodyMediaTypes = Object . keys ( requestBodyDef . content || { } )
155174 if ( requestBodyMediaTypes . indexOf ( requestContentType ) > - 1 ) {
156175 // only attach body if the requestBody has a definition for the
157176 // contentType that has been explicitly set
158- req . body = requestBody
177+ if ( requestContentType === 'application/x-www-form-urlencoded' ) {
178+ req . form = requestBody
179+ }
180+ else {
181+ req . body = requestBody
182+ }
159183 }
160184 }
161185 else {
@@ -167,19 +191,11 @@ export function buildRequest({
167191 // REVIEW: OAS3: what changed in securities?
168192 req = applySecurities ( { request : req , securities, operation, spec} )
169193
170- if ( req . body || req . form ) {
194+ if ( ! specIsOAS3 && ( req . body || req . form ) ) {
195+ // all following conditionals are Swagger2 only
171196 if ( requestContentType ) {
172197 req . headers [ 'Content-Type' ] = requestContentType
173198 }
174- else if ( specIsOAS3 ) {
175- const requestBodyDef = operation . requestBody
176- const requestBodyMediaTypes = Object . keys ( requestBodyDef . content || { } )
177- const firstMediaType = requestBodyMediaTypes [ 0 ]
178- if ( firstMediaType ) {
179- req . headers [ 'Content-Type' ] = firstMediaType
180- }
181- }
182- // all following conditionals are Swagger2 only
183199 else if ( Array . isArray ( operation . consumes ) ) {
184200 req . headers [ 'Content-Type' ] = operation . consumes [ 0 ]
185201 }
@@ -278,13 +294,13 @@ function oas3BaseUrl({spec, server, serverVariables = {}}) {
278294 let selectedServerObj = null
279295
280296 if ( ! servers || ! Array . isArray ( servers ) ) {
281- return '/ '
297+ return ''
282298 }
283299
284300 if ( server ) {
285301 const serverUrls = servers . map ( srv => srv . url )
286302
287- if ( serverUrls . indexOf ( server ) > - 1 ) {
303+ if ( serverUrls . indexOf ( server ) > - 1 ) {
288304 selectedServerUrl = server
289305 selectedServerObj = servers [ serverUrls . indexOf ( server ) ]
290306 }
@@ -305,7 +321,7 @@ function oas3BaseUrl({spec, server, serverVariables = {}}) {
305321 const variableDefinition = selectedServerObj . variables [ vari ]
306322 const variableValue = serverVariables [ vari ] || variableDefinition . default
307323
308- const re = new RegExp ( `\ {${ vari } \ }` , "g" )
324+ const re = new RegExp ( `{${ vari } }` , 'g' )
309325 selectedServerUrl = selectedServerUrl . replace ( re , variableValue )
310326 }
311327 } )
@@ -319,6 +335,7 @@ function getVariableTemplateNames(str) {
319335 const re = / { ( [ ^ } ] + ) } / g
320336 let text
321337
338+ // eslint-ignore-next-line no-cond-assign
322339 while ( text = re . exec ( str ) ) {
323340 results . push ( text [ 1 ] )
324341 }
@@ -327,9 +344,6 @@ function getVariableTemplateNames(str) {
327344
328345// Compose the baseUrl ( scheme + host + basePath )
329346function swagger2BaseUrl ( { spec, scheme, contextUrl = '' } ) {
330- // TODO: OAS3: support `servers` instead of host+basePath
331- // QUESTION: OAS3: how are we handling `servers`?
332- // QUESTION: OAS3: are we still doing assumed URL components the same way?
333347 const parsedContextUrl = url . parse ( contextUrl )
334348 const firstSchemeInSpec = Array . isArray ( spec . schemes ) ? spec . schemes [ 0 ] : null
335349
0 commit comments