diff --git a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs
index 1159455e..1ee020cd 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs
+++ b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs
@@ -208,8 +208,15 @@ public static OpenApiResponses CreateResponses(this ODataContext context, IEdmOp
responses.Add(Constants.StatusCode200, response);
}
- // Both action & function have the default response.
- responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse());
+ if (context.Settings.ErrorResponsesAsDefault)
+ {
+ responses.Add(Constants.StatusCodeDefault, Constants.StatusCodeDefault.GetResponse());
+ }
+ else
+ {
+ responses.Add(Constants.StatusCodeClass4XX, Constants.StatusCodeClass4XX.GetResponse());
+ responses.Add(Constants.StatusCodeClass5XX, Constants.StatusCodeClass5XX.GetResponse());
+ }
return responses;
}
diff --git a/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj b/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj
index 9977ac1b..9794c15e 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj
+++ b/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj
@@ -24,6 +24,7 @@
- Adds list of all derived types for discriminator mapping #219
- Fixes reading restriction annotations for entity types defining navigation properties #220
- Enables configuring appending bound operations on derived types #221
+- Add error ranges for OData actions when ErrorResponsesAsDefault is set to false #218
Microsoft.OpenApi.OData.Reader
..\..\tool\Microsoft.OpenApi.OData.snk
diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiErrorSchemaGeneraratorTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiErrorSchemaGeneraratorTests.cs
index ed67c1a7..f4a761a4 100644
--- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiErrorSchemaGeneraratorTests.cs
+++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiErrorSchemaGeneraratorTests.cs
@@ -9,7 +9,7 @@
using Xunit;
namespace Microsoft.OpenApi.OData.Tests;
-public class OpenApiErrorSchemaGeneraratorTests
+public class OpenApiErrorSchemaGeneratorTests
{
[Fact]
public void AddsEmptyInnerErrorWhenNoComplexTypeIsProvided()
diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs
index 5b714504..0b73f15a 100644
--- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs
+++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs
@@ -306,5 +306,39 @@ public void CreateResponseForEdmActionReturnCorrectResponses(string actionName,
Assert.Equal(2, responses.Count);
Assert.Equal(new string[] { responseCode, "default" }, responses.Select(r => r.Key));
}
+
+ [Theory]
+ [InlineData("assignLicense", false, "200")]
+ [InlineData("activateService", false, "204")]
+ [InlineData("verifySignature", true, "200")]
+ public void CreateResponseForEdmActionWhenErrorResponsesAsDefaultIsSet(string actionName, bool errorAsDefault, string responseCode)
+ {
+ // Arrange
+ IEdmModel model = EdmModelHelper.GraphBetaModel;
+ var settings = new OpenApiConvertSettings
+ {
+ ErrorResponsesAsDefault = errorAsDefault,
+ };
+ ODataContext context = new ODataContext(model, settings);
+
+ // Act
+ OpenApiResponses responses;
+ IEdmOperation operation = model.SchemaElements.OfType().First(o => o.Name == actionName);
+ Assert.NotNull(operation); // guard
+ ODataPath path = new(new ODataOperationSegment(operation));
+ responses = context.CreateResponses(operation, path);
+
+ // Assert
+ Assert.NotNull(responses);
+ Assert.NotEmpty(responses);
+ if (errorAsDefault)
+ {
+ Assert.Equal(new string[] { responseCode, "default" }, responses.Select(r => r.Key));
+ }
+ else
+ {
+ Assert.Equal(new string[] { responseCode, "4XX", "5XX" }, responses.Select(r => r.Key));
+ }
+ }
}
}