@@ -23,6 +23,20 @@ public IList<HttpTestRequest> MapFromOpenApiDocument(Uri baseUri, OpenApiDocumen
2323 {
2424 var requests = new List < HttpTestRequest > ( ) ;
2525
26+ var server = openApiDocument . Servers . FirstOrDefault ( ) ;
27+ if ( server != null )
28+ {
29+ var tempUri = new Uri ( server . Url , UriKind . RelativeOrAbsolute ) ;
30+ if ( tempUri . IsAbsoluteUri )
31+ {
32+ baseUri = tempUri ;
33+ }
34+ else
35+ {
36+ baseUri = new Uri ( baseUri , tempUri ) ;
37+ }
38+ }
39+
2640 foreach ( var path in openApiDocument . Paths )
2741 {
2842 requests . AddRange ( GetRestRequestsForPath ( baseUri , path , replacementValues ) ) ;
@@ -46,7 +60,7 @@ private IList<HttpTestRequest> GetRestRequestsForPath(Uri baseUri, KeyValuePair<
4660 Description = GetDescription ( operation ) ,
4761 OperationId = GetOperationId ( operation ) ,
4862 Parameters = ReplaceUrlParameters ( GetParameters ( operation ) . ToList ( ) , replacementValues ) . ToList ( ) ,
49- RequestBody = ReplaceRequestBodyModel ( GetRequestBody ( operation ) , replacementValues ) ,
63+ RequestBodies = ReplaceRequestBodyModel ( GetRequestBodies ( operation ) , replacementValues ) ,
5064 Responses = GetResponses ( operation ) ,
5165 Tags = GetTags ( operation ) ,
5266 AuthenticationTypes = GetAuthenticationTypes ( operation ) ,
@@ -128,9 +142,12 @@ private string GetPath(string path)
128142
129143 private string ReplacePathParameters ( string path , ReplacementValue [ ] replacementValues )
130144 {
131- foreach ( var replacementValue in replacementValues )
145+ if ( replacementValues != null )
132146 {
133- path = path . Replace ( "{" + replacementValue . Key + "}" , replacementValue . Value ) ;
147+ foreach ( var replacementValue in replacementValues )
148+ {
149+ path = path . Replace ( "{" + replacementValue . Key + "}" , replacementValue . Value ) ;
150+ }
134151 }
135152
136153 return path ;
@@ -195,93 +212,107 @@ private IList<Parameter> GetParameters(KeyValuePair<OperationType, OpenApiOperat
195212
196213 private IList < Parameter > ReplaceUrlParameters ( List < Parameter > urlParameters , ReplacementValue [ ] replacementValues )
197214 {
198- foreach ( var replacementValue in replacementValues )
215+ if ( replacementValues != null )
199216 {
200- foreach ( var parameter in urlParameters )
217+ foreach ( var replacementValue in replacementValues )
201218 {
202- if ( parameter . Name == replacementValue . Key )
219+ foreach ( var parameter in urlParameters )
203220 {
204- parameter . Value = replacementValue . Value ;
221+ if ( parameter . Name == replacementValue . Key )
222+ {
223+ parameter . Value = replacementValue . Value ;
224+ }
205225 }
206226 }
207227 }
208228
209229 return urlParameters ;
210230 }
211231
212- private RequestBody GetRequestBody ( KeyValuePair < OperationType , OpenApiOperation > openApiOperation )
232+ private List < RequestBody > GetRequestBodies ( KeyValuePair < OperationType , OpenApiOperation > openApiOperation )
213233 {
214234 try
215235 {
236+ var requests = new List < RequestBody > ( ) ;
237+
216238 if ( openApiOperation . Value . RequestBody == null )
217239 {
218- return new RequestBody ( ) ;
240+ return new List < RequestBody > ( ) ;
219241 }
220242
221243 if ( openApiOperation . Value . RequestBody . Content . Count == 0 )
222244 {
223- return new RequestBody ( ) ;
224- }
225-
226- if ( openApiOperation . Value . RequestBody . Content . FirstOrDefault ( ) . Value . Schema . Properties . Count == 0 )
227- {
228- return new RequestBody ( ) ;
245+ return new List < RequestBody > ( ) ;
229246 }
230247
231- var requestBody = new RequestBody
248+ foreach ( var contentType in openApiOperation . Value . RequestBody . Content )
232249 {
233- Name = openApiOperation . Value . RequestBody . Content . FirstOrDefault ( ) . Value . Schema . Reference . Id ,
234- Properties = new List < Property > ( )
235- } ;
250+ var requestBody = new RequestBody
251+ {
252+ Name = contentType . Value . Schema . Reference != null ? contentType . Value . Schema . Reference . Id : "N/A" ,
253+ ContentType = contentType . Key ,
254+ Properties = new List < Property > ( )
255+ } ;
236256
237- foreach ( var property in openApiOperation . Value . RequestBody . Content . FirstOrDefault ( ) . Value . Schema . Properties )
238- {
239- requestBody . Properties . Add ( new Property ( )
257+ foreach ( var property in contentType . Value . Schema . Properties )
240258 {
241- Name = property . Key ,
242- Description = property . Value . Description ,
243- Type = property . Value . Type ,
244- } ) ;
259+ requestBody . Properties . Add ( new Property ( )
260+ {
261+ Name = property . Key ,
262+ Description = property . Value . Description ,
263+ Type = property . Value . Type ,
264+ } ) ;
265+ }
266+
267+ requests . Add ( requestBody ) ;
245268 }
246269
247- return requestBody ;
270+ return requests ;
248271 }
249272 catch ( Exception ex )
250273 {
251274 var msg = ex . Message ;
252- return new RequestBody ( ) ;
275+ return new List < RequestBody > ( ) ;
253276 }
254277 }
255278
256- private RequestBody ReplaceRequestBodyModel ( RequestBody requestBody , ReplacementValue [ ] replacementValues )
279+ private List < RequestBody > ReplaceRequestBodyModel ( List < RequestBody > requestBodies , ReplacementValue [ ] replacementValues )
257280 {
258- if ( requestBody . Properties == null )
259- {
260- return requestBody ;
261- }
262281
263- var requestBodyResult = new RequestBody
282+ foreach ( var requestBody in requestBodies )
264283 {
265- Name = requestBody . Name
266- } ;
284+ if ( requestBody . Properties == null )
285+ {
286+ continue ;
287+ }
267288
268- foreach ( var replacementValue in replacementValues )
269- {
270- var prop = requestBody . Properties . FirstOrDefault ( p => p . Name == replacementValue . Key ) ;
289+ var requestBodyResult = new RequestBody
290+ {
291+ Name = requestBody . Name ,
292+ Properties = new List < Property > ( )
293+ } ;
271294
272- if ( prop != null )
295+ if ( replacementValues != null )
273296 {
274- requestBodyResult . Properties . Add ( new Property ( )
297+ foreach ( var replacementValue in replacementValues )
275298 {
276- Description = prop . Description ,
277- Name = prop . Name ,
278- Type = prop . Type ,
279- Value = replacementValue . Value
280- } ) ;
299+ var prop = requestBody . Properties . FirstOrDefault ( p => p . Name == replacementValue . Key ) ;
300+
301+ if ( prop != null )
302+ {
303+ requestBodyResult . Properties . Add ( new Property ( )
304+ {
305+ Description = prop . Description ,
306+ Name = prop . Name ,
307+ Type = prop . Type ,
308+ Value = replacementValue . Value
309+ } ) ;
310+ }
311+ }
281312 }
282313 }
283314
284- return requestBodyResult ;
315+ return requestBodies ;
285316 }
286317
287318 private List < Response > GetResponses ( KeyValuePair < OperationType , OpenApiOperation > openApiOperation )
0 commit comments