From 5e72eeaabc878aa26442a6522224b876de9ed1e5 Mon Sep 17 00:00:00 2001 From: Hardik Kaurani Date: Wed, 21 Oct 2026 11:29:15 +0530 Subject: [PATCH 1/2] fix(generator): wrap enum operation responses in value property --- .../Generator/OpenApiResponseGenerator.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs index fdbf03338..05fc4626c 100644 --- a/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs +++ b/src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs @@ -208,10 +208,10 @@ public static OpenApiResponses CreateResponses(this ODataContext context, IEdmOp openApiSchema.Type = JsonSchemaType.Object; } } - else if (returnType.IsPrimitive()) + else if (returnType.IsPrimitive() || returnType.IsEnum()) { - // A property or operation response that is of a primitive type is represented as an object with a single name/value pair, - // whose name is value and whose value is a primitive value. + // A property or operation response that is of a primitive or enum type is represented as an object with a single name/value pair, + // whose name is value and whose value is a primitive or enum value. schema = new OpenApiSchema { Type = JsonSchemaType.Object, From 24448bd6fd8c3b1f71acbfcd45ea14a088bdf6f1 Mon Sep 17 00:00:00 2001 From: Hardik Kaurani Date: Wed, 21 Oct 2026 11:30:14 +0530 Subject: [PATCH 2/2] test(generator): verify enum operation response wraps schema in value property --- .../OpenApiResponseGeneratorTests.cs | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs index 0d1403984..93fe610f3 100644 --- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs +++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Generator/OpenApiResponseGeneratorTests.cs @@ -448,5 +448,40 @@ public async Task CreateResponseForDeltaEdmFunctionReturnCorrectResponses(bool e Assert.True(JsonNode.DeepEquals(expectedJsonNode, actualJsonNode)); } } + + [Fact] + public void CreateResponseForEdmFunctionReturningEnumWrapsInValueProperty() + { + // Arrange + var model = new EdmModel(); + var enumType = new EdmEnumType("NS", "Color"); + enumType.AddMember("Red", new EdmEnumMemberValue(0)); + enumType.AddMember("Blue", new EdmEnumMemberValue(1)); + model.AddElement(enumType); + + var function = new EdmFunction("NS", "GetFavoriteColor", new EdmEnumTypeReference(enumType, isNullable: false), isBound: false, entitySetPathExpression: null, isComposable: true); + model.AddElement(function); + + var context = new ODataContext(model); + var document = new OpenApiDocument(); + + // Act + var responses = context.CreateResponses(function, document); + + // Assert + Assert.NotNull(responses); + Assert.True(responses.ContainsKey("200")); + var response = responses["200"]; + Assert.NotNull(response.Content); + Assert.True(response.Content.ContainsKey("application/json")); + var mediaType = response.Content["application/json"]; + Assert.NotNull(mediaType.Schema); + Assert.Equal(JsonSchemaType.Object, mediaType.Schema.Type); + Assert.NotNull(mediaType.Schema.Properties); + Assert.True(mediaType.Schema.Properties.ContainsKey("value")); + + var valueSchema = mediaType.Schema.Properties["value"]; + Assert.NotNull(valueSchema); + } } }