From 649dfe3167f03d920c0392653dce0323468ed543 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Oct 2025 16:38:40 +0000 Subject: [PATCH 1/2] Initial plan From d0103847dd570ee6c65e23ee9a887269599bf05f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 2 Oct 2025 16:47:25 +0000 Subject: [PATCH 2/2] Fix allowReserved typo in V3 and V31 encoding deserializers and add regression tests Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- .../Reader/V3/OpenApiEncodingDeserializer.cs | 2 +- .../Reader/V31/OpenApiEncodingDeserializer.cs | 2 +- .../V31Tests/OpenApiEncodingTests.cs | 33 +++++++++++++++++++ .../encodingWithAllowReserved.yaml | 5 +++ .../V3Tests/OpenApiEncodingTests.cs | 17 ++++++++++ .../encodingWithAllowReserved.yaml | 5 +++ 6 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiEncodingTests.cs create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml create mode 100644 test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs index a55e08818..5c3cc5a93 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiEncodingDeserializer.cs @@ -44,7 +44,7 @@ internal static partial class OpenApiV3Deserializer } }, { - "allowedReserved", + "allowReserved", (o, n, _) => { var allowReserved = n.GetScalarValue(); diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs index c3f52d272..6474dc96b 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiEncodingDeserializer.cs @@ -43,7 +43,7 @@ internal static partial class OpenApiV31Deserializer } }, { - "allowedReserved", (o, n, _) => + "allowReserved", (o, n, _) => { var allowReserved = n.GetScalarValue(); if (allowReserved is not null) diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiEncodingTests.cs new file mode 100644 index 000000000..6a03ea015 --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiEncodingTests.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +using System.IO; +using System.Threading.Tasks; +using Microsoft.OpenApi.Reader; +using Xunit; + +namespace Microsoft.OpenApi.Readers.Tests.V31Tests +{ + [Collection("DefaultSettings")] + public class OpenApiEncodingTests + { + private const string SampleFolderPath = "V31Tests/Samples/OpenApiEncoding/"; + + [Fact] + public async Task ParseEncodingWithAllowReservedShouldSucceed() + { + // Act + var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "encodingWithAllowReserved.yaml"), OpenApiSpecVersion.OpenApi3_1, new(), SettingsFixture.ReaderSettings); + + // Assert + Assert.Equivalent( + new OpenApiEncoding + { + ContentType = "application/x-www-form-urlencoded", + Style = ParameterStyle.Form, + Explode = true, + AllowReserved = true + }, encoding); + } + } +} diff --git a/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml new file mode 100644 index 000000000..fcb6c1063 --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V31Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml @@ -0,0 +1,5 @@ +# https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#encodingObject +contentType: application/x-www-form-urlencoded +style: form +explode: true +allowReserved: true diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs index db78cc0c7..0c0c4e96f 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs @@ -55,5 +55,22 @@ public async Task ParseAdvancedEncodingShouldSucceed() } }, encoding); } + + [Fact] + public async Task ParseEncodingWithAllowReservedShouldSucceed() + { + // Act + var encoding = await OpenApiModelFactory.LoadAsync(Path.Combine(SampleFolderPath, "encodingWithAllowReserved.yaml"), OpenApiSpecVersion.OpenApi3_0, new(), SettingsFixture.ReaderSettings); + + // Assert + Assert.Equivalent( + new OpenApiEncoding + { + ContentType = "application/x-www-form-urlencoded", + Style = ParameterStyle.Form, + Explode = true, + AllowReserved = true + }, encoding); + } } } diff --git a/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml new file mode 100644 index 000000000..259ba7fdf --- /dev/null +++ b/test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiEncoding/encodingWithAllowReserved.yaml @@ -0,0 +1,5 @@ +# https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#encodingObject +contentType: application/x-www-form-urlencoded +style: form +explode: true +allowReserved: true