mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-11 03:37:11 +02:00
Support RequestBody (#678)
* Support RequestBody * SerializeObject in the request matcher and apply JsonMatcher * Refactor names * Call to method TryGetContent * Applied comments * Changes applied! * Comments applied V2!
This commit is contained in:
@@ -6,6 +6,7 @@ using Microsoft.OpenApi;
|
|||||||
using Microsoft.OpenApi.Any;
|
using Microsoft.OpenApi.Any;
|
||||||
using Microsoft.OpenApi.Models;
|
using Microsoft.OpenApi.Models;
|
||||||
using Microsoft.OpenApi.Writers;
|
using Microsoft.OpenApi.Writers;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using WireMock.Admin.Mappings;
|
using WireMock.Admin.Mappings;
|
||||||
using WireMock.Net.OpenApiParser.Extensions;
|
using WireMock.Net.OpenApiParser.Extensions;
|
||||||
@@ -58,6 +59,23 @@ namespace WireMock.Net.OpenApiParser.Mappers
|
|||||||
responseSchemaExample != null ? MapOpenApiAnyToJToken(responseSchemaExample) :
|
responseSchemaExample != null ? MapOpenApiAnyToJToken(responseSchemaExample) :
|
||||||
MapSchemaToObject(responseSchema);
|
MapSchemaToObject(responseSchema);
|
||||||
|
|
||||||
|
var requestBodyModel = new BodyModel();
|
||||||
|
if (operation.RequestBody != null && operation.RequestBody.Content != null)
|
||||||
|
{
|
||||||
|
var request = operation.RequestBody.Content;
|
||||||
|
TryGetContent(request, out OpenApiMediaType requestContent, out string requestContentType);
|
||||||
|
|
||||||
|
var requestBodySchema = operation.RequestBody.Content.First().Value?.Schema;
|
||||||
|
var requestBodyExample = requestContent.Example;
|
||||||
|
var requestBodySchemaExample = requestContent.Schema?.Example;
|
||||||
|
|
||||||
|
var requestBodyMapped = requestBodyExample != null ? MapOpenApiAnyToJToken(requestBodyExample) :
|
||||||
|
requestBodySchemaExample != null ? MapOpenApiAnyToJToken(requestBodySchemaExample) :
|
||||||
|
MapSchemaToObject(requestBodySchema);
|
||||||
|
|
||||||
|
requestBodyModel = MapRequestBody(requestBodyMapped);
|
||||||
|
}
|
||||||
|
|
||||||
if (!int.TryParse(response.Key, out var httpStatusCode))
|
if (!int.TryParse(response.Key, out var httpStatusCode))
|
||||||
{
|
{
|
||||||
httpStatusCode = 200;
|
httpStatusCode = 200;
|
||||||
@@ -71,7 +89,8 @@ namespace WireMock.Net.OpenApiParser.Mappers
|
|||||||
Methods = new[] { httpMethod },
|
Methods = new[] { httpMethod },
|
||||||
Path = MapBasePath(servers) + MapPathWithParameters(path, pathParameters),
|
Path = MapBasePath(servers) + MapPathWithParameters(path, pathParameters),
|
||||||
Params = MapQueryParameters(queryParameters),
|
Params = MapQueryParameters(queryParameters),
|
||||||
Headers = MapRequestHeaders(headers)
|
Headers = MapRequestHeaders(headers),
|
||||||
|
Body = requestBodyModel
|
||||||
},
|
},
|
||||||
Response = new ResponseModel
|
Response = new ResponseModel
|
||||||
{
|
{
|
||||||
@@ -82,6 +101,20 @@ namespace WireMock.Net.OpenApiParser.Mappers
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BodyModel MapRequestBody(object requestBody)
|
||||||
|
{
|
||||||
|
if (requestBody == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var requestBodyModel = new BodyModel();
|
||||||
|
requestBodyModel.Matcher = new MatcherModel();
|
||||||
|
requestBodyModel.Matcher.Name = "JsonMatcher";
|
||||||
|
requestBodyModel.Matcher.Pattern = JsonConvert.SerializeObject(requestBody, Formatting.Indented);
|
||||||
|
return requestBodyModel;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryGetContent(IDictionary<string, OpenApiMediaType> contents, out OpenApiMediaType openApiMediaType, out string contentType)
|
private bool TryGetContent(IDictionary<string, OpenApiMediaType> contents, out OpenApiMediaType openApiMediaType, out string contentType)
|
||||||
{
|
{
|
||||||
openApiMediaType = null;
|
openApiMediaType = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user