Skip to content

Commit ef33618

Browse files
authored
[Fix] DELETE methods should always return response status code 204 (#367)
* Delete responses always return 204 * Update tests * Update release note
1 parent 01c3c6c commit ef33618

File tree

5 files changed

+24
-16
lines changed

5 files changed

+24
-16
lines changed

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

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,13 @@
1515
<TargetFrameworks>netstandard2.0</TargetFrameworks>
1616
<PackageId>Microsoft.OpenApi.OData</PackageId>
1717
<SignAssembly>true</SignAssembly>
18-
<Version>1.3.0</Version>
18+
<Version>1.4.0-preview1</Version>
1919
<Description>This package contains the codes you need to convert OData CSDL to Open API Document of Model.</Description>
2020
<Copyright>© Microsoft Corporation. All rights reserved.</Copyright>
2121
<PackageTags>Microsoft OpenApi OData EDM</PackageTags>
2222
<RepositoryUrl>https://github.com/Microsoft/OpenAPI.NET.OData</RepositoryUrl>
2323
<PackageReleaseNotes>
24-
- Update key path parameter descriptions #309
25-
- Skips adding a $count path if a similar count() function path exists #347
26-
- Checks whether path exists before adding it to the paths dictionary #343
27-
- Strips namespace prefix from operation segments and aliases type cast segments #348
28-
- Return response status code 2XX for PUT operations of stream properties when UseSuccessStatusCodeRange is enabled #310
29-
- Adds $value segment to paths with entity types with base types with HasStream=true #314
30-
- Uses SemVerVersion in place of Version to Get or Set the metadata version in the OpenAPI document #346
31-
- Resolves operationId and tag names for OData cast paths #324
24+
- DELETE methods should always return response status code 204
3225
</PackageReleaseNotes>
3326
<AssemblyName>Microsoft.OpenApi.OData.Reader</AssemblyName>
3427
<AssemblyOriginatorKeyFile>..\..\tool\Microsoft.OpenApi.OData.snk</AssemblyOriginatorKeyFile>

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,11 @@ protected override void SetParameters(OpenApiOperation operation)
8181
/// <inheritdoc/>
8282
protected override void SetResponses(OpenApiOperation operation)
8383
{
84-
operation.AddErrorResponses(Context.Settings, true);
84+
// Response for Delete methods should be 204 No Content
85+
OpenApiConvertSettings settings = Context.Settings.Clone();
86+
settings.UseSuccessStatusCodeRange = false;
87+
88+
operation.AddErrorResponses(settings, true);
8589
base.SetResponses(operation);
8690
}
8791

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ protected override void SetSecurity(OpenApiOperation operation)
8080
/// <inheritdoc/>
8181
protected override void SetResponses(OpenApiOperation operation)
8282
{
83-
operation.AddErrorResponses(Context.Settings, true);
83+
// Response for Delete methods should be 204 No Content
84+
OpenApiConvertSettings settings = Context.Settings.Clone();
85+
settings.UseSuccessStatusCodeRange = false;
86+
87+
operation.AddErrorResponses(settings, true);
8488
base.SetResponses(operation);
8589
}
8690

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ protected override void SetSecurity(OpenApiOperation operation)
9191
/// <inheritdoc/>
9292
protected override void SetResponses(OpenApiOperation operation)
9393
{
94-
operation.AddErrorResponses(Context.Settings, true);
94+
// Response for Delete methods should be 204 No Content
95+
OpenApiConvertSettings settings = Context.Settings.Clone();
96+
settings.UseSuccessStatusCodeRange = false;
97+
98+
operation.AddErrorResponses(settings, true);
9599
base.SetResponses(operation);
96100
}
97101

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@ public class NavigationPropertyDeleteOperationHandlerTests
1616
private NavigationPropertyDeleteOperationHandler _operationHandler = new NavigationPropertyDeleteOperationHandler();
1717

1818
[Theory]
19-
[InlineData(true)]
20-
[InlineData(false)]
21-
public void CreateNavigationDeleteOperationReturnsCorrectOperation(bool enableOperationId)
19+
[InlineData(true, false)]
20+
[InlineData(false, false)]
21+
[InlineData(true, true)]
22+
[InlineData(false, true)]
23+
public void CreateNavigationDeleteOperationReturnsCorrectOperation(bool enableOperationId, bool useSuccessStatusCodeRange)
2224
{
2325
// Arrange
2426
IEdmModel model = EdmModelHelper.TripServiceModel;
2527
OpenApiConvertSettings settings = new OpenApiConvertSettings
2628
{
27-
EnableOperationId = enableOperationId
29+
EnableOperationId = enableOperationId,
30+
UseSuccessStatusCodeRange = useSuccessStatusCodeRange
2831
};
2932
ODataContext context = new ODataContext(model, settings);
3033
IEdmEntitySet people = model.EntityContainer.FindEntitySet("People");

0 commit comments

Comments
 (0)