Skip to content

Commit 2c3c51b

Browse files
Update request body for ref POST operation
1 parent 1660165 commit 2c3c51b

22 files changed

+166
-173
lines changed

src/Microsoft.OpenApi.OData.Reader/Common/Constants.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,13 @@ internal static class Constants
111111
public static string ReferenceUpdateSchemaName = "ReferenceUpdateSchema";
112112

113113
/// <summary>
114-
/// Name used for reference request body
114+
/// Name used for reference request POST body
115115
/// </summary>
116-
public static string ReferenceRequestPostBodyName = "refPostBody";
116+
public static string ReferencePostRequestBodyName = "refPostBody";
117+
118+
/// <summary>
119+
/// Name used for reference request PUT body
120+
/// </summary>
121+
public static string ReferencePutRequestBodyName = "refPutBody";
117122
}
118123
}

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

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,25 +98,29 @@ public static IDictionary<string, OpenApiRequestBody> CreateRequestBodies(this O
9898
return new Dictionary<string, OpenApiRequestBody>
9999
{
100100
{
101-
Constants.ReferenceRequestPostBodyName,
102-
CreateRefRequestBody()
101+
Constants.ReferencePostRequestBodyName,
102+
CreateRefPostRequestBody()
103+
},
104+
{
105+
Constants.ReferencePutRequestBodyName,
106+
CreateRefPutRequestBody()
103107
}
104108
};
105109
}
106110

107111
/// <summary>
108-
/// Create a <see cref="OpenApiRequestBody"/> to be reused across ref POST and PUT operations
112+
/// Create a <see cref="OpenApiRequestBody"/> to be reused across ref POST operations
109113
/// </summary>
110114
/// <returns>The created <see cref="OpenApiRequestBody"/></returns>
111-
private static OpenApiRequestBody CreateRefRequestBody()
115+
private static OpenApiRequestBody CreateRefPostRequestBody()
112116
{
113117
OpenApiSchema schema = new()
114118
{
115119
UnresolvedReference = true,
116120
Reference = new OpenApiReference
117121
{
118122
Type = ReferenceType.Schema,
119-
Id = Constants.ReferenceRequestPostBodyName
123+
Id = Constants.ReferencePostRequestBodyName
120124
}
121125
};
122126
return new OpenApiRequestBody
@@ -134,5 +138,37 @@ private static OpenApiRequestBody CreateRefRequestBody()
134138
}
135139
};
136140
}
141+
142+
/// <summary>
143+
/// Create a <see cref="OpenApiRequestBody"/> to be reused across ref PUT operations
144+
/// </summary>
145+
/// <returns>The created <see cref="OpenApiRequestBody"/></returns>
146+
private static OpenApiRequestBody CreateRefPutRequestBody()
147+
{
148+
OpenApiSchema schema = new()
149+
{
150+
UnresolvedReference = true,
151+
Reference = new OpenApiReference
152+
{
153+
Type = ReferenceType.Schema,
154+
Id = Constants.ReferenceUpdateSchemaName
155+
}
156+
};
157+
158+
return new OpenApiRequestBody
159+
{
160+
Required = true,
161+
Description = "New navigation property ref values",
162+
Content = new Dictionary<string, OpenApiMediaType>
163+
{
164+
{
165+
Constants.ApplicationJsonMediaType, new OpenApiMediaType
166+
{
167+
Schema = schema
168+
}
169+
}
170+
}
171+
};
172+
}
137173
}
138174
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public static IDictionary<string, OpenApiSchema> CreateSchemas(this ODataContext
107107
};
108108
}
109109

110-
schemas[Constants.ReferenceRequestPostBodyName] = new()
110+
schemas[Constants.ReferencePostRequestBodyName] = new()
111111
{
112112
Type = "object",
113113
Properties = new Dictionary<string, OpenApiSchema>

src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
- Add error ranges for OData actions when ErrorResponsesAsDefault is set to false #218
2727
- Fixes missing bound operations on some navigation property paths #201
2828
- Provides support for using success status code range 2XX #153
29-
- Fixes request body and response representation for ref POST operations #228
29+
- Fixes request body and response representation for ref POST and PUT operations #228
3030
- Adds discriminator object to complex types which have derived types #233
3131
</PackageReleaseNotes>
3232
<AssemblyName>Microsoft.OpenApi.OData.Reader</AssemblyName>

src/Microsoft.OpenApi.OData.Reader/Operation/RefPostOperationHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ protected override void SetRequestBody(OpenApiOperation operation)
4545
Reference = new OpenApiReference
4646
{
4747
Type = ReferenceType.RequestBody,
48-
Id = Constants.ReferenceRequestPostBodyName
48+
Id = Constants.ReferencePostRequestBodyName
4949
}
5050
};
5151

src/Microsoft.OpenApi.OData.Reader/Operation/RefPutOperationHandler.cs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,11 @@ protected override void SetRequestBody(OpenApiOperation operation)
4040
{
4141
operation.RequestBody = new OpenApiRequestBody
4242
{
43-
Required = true,
44-
Description = "New navigation property ref values",
45-
Content = new Dictionary<string, OpenApiMediaType>
46-
{
47-
{
48-
Constants.ApplicationJsonMediaType, new OpenApiMediaType
49-
{
50-
Schema = GetOpenApiSchema()
51-
}
52-
}
43+
UnresolvedReference = true,
44+
Reference = new OpenApiReference
45+
{
46+
Type = ReferenceType.RequestBody,
47+
Id = Constants.ReferencePutRequestBodyName
5348
}
5449
};
5550

@@ -59,7 +54,7 @@ protected override void SetRequestBody(OpenApiOperation operation)
5954
/// <inheritdoc/>
6055
protected override void SetResponses(OpenApiOperation operation)
6156
{
62-
operation.AddErrorResponses(Context.Settings, true, GetOpenApiSchema());
57+
operation.AddErrorResponses(Context.Settings, true, GetRefUpdateSchema());
6358
base.SetResponses(operation);
6459
}
6560

@@ -91,7 +86,7 @@ protected override void AppendCustomParameters(OpenApiOperation operation)
9186
}
9287
}
9388

94-
private OpenApiSchema GetOpenApiSchema()
89+
private OpenApiSchema GetRefUpdateSchema()
9590
{
9691
return new()
9792
{

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,12 @@ public void CreateRefRequestBodies()
159159

160160
// Act
161161
var requestBodies = context.CreateRequestBodies();
162-
requestBodies.TryGetValue(Common.Constants.ReferenceRequestPostBodyName, out Models.OpenApiRequestBody refPostBody);
162+
requestBodies.TryGetValue(Common.Constants.ReferencePostRequestBodyName, out Models.OpenApiRequestBody refPostBody);
163163

164164
// Assert
165165
Assert.NotNull(refPostBody);
166166
Assert.Equal("New navigation property ref value", refPostBody.Description);
167-
Assert.Equal(Common.Constants.ReferenceRequestPostBodyName, refPostBody.Content.First().Value.Schema.Reference.Id);
167+
Assert.Equal(Common.Constants.ReferencePostRequestBodyName, refPostBody.Content.First().Value.Schema.Reference.Id);
168168
}
169169
}
170170
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void CreatesRefRequestBodySchema()
7474
// Act & Assert
7575
var schemas = context.CreateSchemas();
7676

77-
schemas.TryGetValue(Constants.ReferenceRequestPostBodyName, out OpenApiSchema refRequestBody);
77+
schemas.TryGetValue(Constants.ReferencePostRequestBodyName, out OpenApiSchema refRequestBody);
7878

7979
Assert.NotNull(refRequestBody);
8080
Assert.Equal("object", refRequestBody.Type);

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/RefPostOperationHandlerTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void CreateNavigationRefPostOperationReturnsCorrectOperation(bool enableO
5656

5757
Assert.NotNull(operation.RequestBody);
5858
Assert.Equal(Models.ReferenceType.RequestBody, operation.RequestBody.Reference.Type);
59-
Assert.Equal(Common.Constants.ReferenceRequestPostBodyName, operation.RequestBody.Reference.Id);
59+
Assert.Equal(Common.Constants.ReferencePostRequestBodyName, operation.RequestBody.Reference.Id);
6060

6161
Assert.Equal(2, operation.Responses.Count);
6262
var statusCode = useHTTPStatusCodeClass2XX ? "2XX" : "204";

test/Microsoft.OpenAPI.OData.Reader.Tests/Operation/RefPutOperationHandlerTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public void CreateNavigationRefPutOperationReturnsCorrectOperation(bool enableOp
5454
Assert.NotNull(operation.Parameters);
5555
Assert.Equal(1, operation.Parameters.Count);
5656

57-
Assert.NotNull(operation.RequestBody);
58-
Assert.Equal("New navigation property ref values", operation.RequestBody.Description);
57+
Assert.Equal(Models.ReferenceType.RequestBody, operation.RequestBody.Reference.Type);
58+
Assert.Equal(Common.Constants.ReferencePutRequestBodyName, operation.RequestBody.Reference.Id);
5959

6060
Assert.Equal(2, operation.Responses.Count);
6161
var statusCode = useHTTPStatusCodeClass2XX ? "2XX" : "204";

0 commit comments

Comments
 (0)