Skip to content

Commit 8c1efe9

Browse files
committed
fix: normalizes request bodies adding pattern
Signed-off-by: Vincent Biret <[email protected]>
1 parent 3ba9330 commit 8c1efe9

File tree

6 files changed

+32
-32
lines changed

6 files changed

+32
-32
lines changed

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiComponentsGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ public static OpenApiComponents CreateComponents(this ODataContext context, Open
2828

2929
context.AddSchemasToDocument(document);
3030
context.AddParametersToDocument(document);
31+
context.AddResponsesToDocument(document);
32+
context.AddRequestBodiesToDocument(document);
3133
//TODO convert all other create methods to add
32-
document.Components.Responses = context.CreateResponses(document);
33-
document.Components.RequestBodies = context.CreateRequestBodies(document);
34-
document.Components.Examples = context.CreateExamples(document);
35-
document.Components.SecuritySchemes = context.CreateSecuritySchemes();
34+
context.CreateExamples(document);
35+
context.CreateSecuritySchemes();
3636
document.Components.Links = null;
3737
document.Components.Callbacks = null;
3838
document.Components.Extensions = null;

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiParameterGenerator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ internal static class OpenApiParameterGenerator
3030
/// </summary>
3131
/// <param name="context">The OData context.</param>
3232
/// <param name="document">The Open API document.</param>
33-
/// <returns>The created map of <see cref="OpenApiParameter"/> object.</returns>
3433
public static void AddParametersToDocument(this ODataContext context, OpenApiDocument document)
3534
{
3635
Utils.CheckArgumentNull(context, nameof(context));

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiRequestBodyGenerator.cs

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -96,34 +96,21 @@ public static OpenApiRequestBody CreateRequestBody(this ODataContext context, IE
9696
/// </summary>
9797
/// <param name="context">The OData context.</param>
9898
/// <param name="document">The OpenApi document to lookup references.</param>
99-
/// <returns>The created dictionary of <see cref="OpenApiRequestBody"/> indexed by ref name</returns>
100-
public static IDictionary<string, OpenApiRequestBody> CreateRequestBodies(this ODataContext context, OpenApiDocument document)
99+
public static void AddRequestBodiesToDocument(this ODataContext context, OpenApiDocument document)
101100
{
102101
Utils.CheckArgumentNull(context, nameof(context));
103102
Utils.CheckArgumentNull(document, nameof(document));
104103

105-
Dictionary<string, OpenApiRequestBody> requestBodies = new()
106-
{
107-
{
108-
Constants.ReferencePostRequestBodyName,
109-
CreateRefPostRequestBody(document)
110-
},
111-
{
112-
Constants.ReferencePutRequestBodyName,
113-
CreateRefPutRequestBody(document)
114-
}
115-
};
104+
document.AddComponent(Constants.ReferencePostRequestBodyName, CreateRefPostRequestBody(document));
105+
document.AddComponent(Constants.ReferencePutRequestBodyName, CreateRefPutRequestBody(document));
116106

117107
// add request bodies for actions targeting multiple related paths
118108
foreach (IEdmAction action in context.Model.SchemaElements.OfType<IEdmAction>()
119-
.Where(action => context.Model.OperationTargetsMultiplePaths(action)))
109+
.Where(context.Model.OperationTargetsMultiplePaths))
120110
{
121-
OpenApiRequestBody requestBody = context.CreateRequestBody(action, document);
122-
if (requestBody != null)
123-
requestBodies.Add($"{action.Name}RequestBody", requestBody);
111+
if (context.CreateRequestBody(action, document) is OpenApiRequestBody requestBody)
112+
document.AddComponent($"{action.Name}RequestBody", requestBody);
124113
}
125-
126-
return requestBodies;
127114
}
128115

129116
/// <summary>

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ public static OpenApiResponse GetResponse(this string statusCode, OpenApiDocumen
6363
/// </summary>
6464
/// <param name="context">The OData context.</param>
6565
/// <param name="document">The OpenApi document to lookup references.</param>
66-
/// <returns>The name/value pairs for the standard OData error response.</returns>
67-
public static IDictionary<string, OpenApiResponse> CreateResponses(this ODataContext context, OpenApiDocument document)
66+
public static void AddResponsesToDocument(this ODataContext context, OpenApiDocument document)
6867
{
6968
Utils.CheckArgumentNull(context, nameof(context));
69+
Utils.CheckArgumentNull(document, nameof(document));
7070

7171
var responses = new Dictionary<string, OpenApiResponse>
7272
{
@@ -101,7 +101,10 @@ public static IDictionary<string, OpenApiResponse> CreateResponses(this ODataCon
101101
responses[$"{operation.Name}Response"] = response;
102102
}
103103

104-
return responses;
104+
foreach (var response in responses)
105+
{
106+
document.AddComponent(response.Key, response.Value);
107+
}
105108
}
106109

107110
/// <summary>

test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiRequestBodyGeneratorTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,11 @@ public void CreateRefRequestBodies()
163163
{
164164
// Arrange
165165
ODataContext context = new ODataContext(_model);
166+
OpenApiDocument openApiDocument = new OpenApiDocument();
166167

167168
// Act
168-
var requestBodies = context.CreateRequestBodies(new());
169+
context.AddRequestBodiesToDocument(openApiDocument);
170+
var requestBodies = openApiDocument.Components.RequestBodies;
169171
requestBodies.TryGetValue(Common.Constants.ReferencePostRequestBodyName, out Models.OpenApiRequestBody refPostBody);
170172

171173
// Assert

test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using Microsoft.OpenApi.OData.Edm;
1414
using System.Text.Json.Nodes;
1515
using System.Threading.Tasks;
16+
using Moq;
1617

1718
namespace Microsoft.OpenApi.OData.Generator.Tests
1819
{
@@ -48,9 +49,11 @@ public void CreateResponsesThrowArgumentNullContext()
4849
{
4950
// Arrange
5051
ODataContext context = null;
52+
var mockModel = new Mock<IEdmModel>().Object;
5153

5254
// Act & Assert
53-
Assert.Throws<ArgumentNullException>("context", () => context.CreateResponses(new()));
55+
Assert.Throws<ArgumentNullException>("context", () => context.AddResponsesToDocument(new()));
56+
Assert.Throws<ArgumentNullException>("document", () => new ODataContext(mockModel).AddResponsesToDocument(null));
5457
}
5558

5659
[Fact]
@@ -64,9 +67,11 @@ public void CreatesCollectionResponses()
6467
EnablePagination = true,
6568
};
6669
ODataContext context = new(model, settings);
70+
OpenApiDocument document = new();
6771

6872
// Act & Assert
69-
var responses = context.CreateResponses(new());
73+
context.AddResponsesToDocument(document);
74+
var responses = document.Components.Responses;
7075

7176
var flightCollectionResponse = responses["Microsoft.OData.Service.Sample.TrippinInMemory.Models.FlightCollectionResponse"];
7277
var stringCollectionResponse = responses["StringCollectionResponse"];
@@ -81,9 +86,11 @@ public void CreateResponsesReturnsCreatedResponses()
8186
// Arrange
8287
IEdmModel model = EdmCoreModel.Instance;
8388
ODataContext context = new ODataContext(model);
89+
OpenApiDocument document = new();
8490

8591
// Act
86-
var responses = context.CreateResponses(new());
92+
context.AddResponsesToDocument(document);
93+
var responses = document.Components.Responses;
8794

8895
// Assert
8996
Assert.NotNull(responses);
@@ -101,9 +108,11 @@ public async Task CanSerializeAsJsonFromTheCreatedResponses()
101108
// Arrange
102109
IEdmModel model = EdmCoreModel.Instance;
103110
ODataContext context = new ODataContext(model);
111+
OpenApiDocument document = new();
104112

105113
// Act
106-
var responses = context.CreateResponses(new());
114+
context.AddResponsesToDocument(document);
115+
var responses = document.Components.Responses;
107116

108117
// Assert
109118
var response = responses["error"];

0 commit comments

Comments
 (0)