public async void ShouldTransformToObject() { //Arrange var document = await OpenAPiDocumentReader.Read(); var httpContext = new FakedHttpContext().ModifyRequest(r => { r.Method = "Post"; }); //Act var operation = _operationMatcher.MatchByRequestAction(document.Paths["/pet"], httpContext); var schema = _schemaSelector.Select(operation); var o = _transformer.Transform(schema.Item2); //Assert var str = await JsonConvert.SerializeObjectAsync(o); str.Should().Be("{\"id\":1234,\"name\":\"add pet\",\"category\":{\"id\":1111,\"name\":\"dog\"}}"); }
public async Task InvokeAsync(HttpContext context, IEnumerable <IOpenApiDocumentSource> sources, IOpenApiPathItemMatcher pathItemMatcher, IOpenApiOperationMatcher operationMatcher, IOpenApiSchemaSelector schemaSelector, IOpenApiObjectTransformer transformer, ILogger <MockServerMiddleware> logger) { _documentCache ??= await sources .OrderByDescending(x => x.Priority) .FirstOrDefault(x => x.IsValid) ?.Read(); if (_documentCache == null) { NotFound(context, "Can not read swagger json"); return; } var o = new object(); var schema = new Tuple <int, OpenApiObject>(200, new OpenApiObject()); try { var pathItem = pathItemMatcher.MatchByRequestUrl(_documentCache, context); var operation = operationMatcher.MatchByRequestAction(pathItem, context); schema = schemaSelector.Select(operation); o = transformer.Transform(schema.Item2); } catch (MockServerException e) { logger.LogError(e, "Can not get example from swagger according to request"); NotFound(context, "Can not get example from swagger according to request"); return; } var json = JsonSerializer.Serialize(o, new JsonSerializerOptions() { WriteIndented = true, PropertyNameCaseInsensitive = true }); context.Response.StatusCode = schema.Item1; context.Response.ContentType = "application/json"; await context.Response.WriteAsync(json); }