From db7b5ee752916270d547b584133c038994cc1fbf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:17:23 +0000 Subject: [PATCH 1/2] Initial plan From 6b94360a0cf9f28754a6d086218cea5d66ededfc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:29:47 +0000 Subject: [PATCH 2/2] Add case-insensitive enum deserialization tests for CamelCaseStringEnumConverter Co-authored-by: ChrisPulman <4910015+ChrisPulman@users.noreply.github.com> Agent-Logs-Url: https://github.com/reactiveui/refit/sessions/457806a0-8430-40b3-8e4e-26f6590217ff --- Refit.Tests/SerializedContentTests.cs | 56 +++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/Refit.Tests/SerializedContentTests.cs b/Refit.Tests/SerializedContentTests.cs index a9d4ebea1..afaba9639 100644 --- a/Refit.Tests/SerializedContentTests.cs +++ b/Refit.Tests/SerializedContentTests.cs @@ -520,6 +520,54 @@ public void SystemTextJsonContentSerializer_DefaultOptions_SerializeLowercaseEnu Assert.Equal("\"alreadyLowercase\"", json); } + [Theory] + [InlineData("vAlUeOnE")] + [InlineData("ValueOne")] + [InlineData("VALUEONE")] + [InlineData("valueone")] + public void SystemTextJsonContentSerializer_DefaultOptions_DeserializesEnumValuesWithVariousCasings( + string jsonValue + ) + { + var result = SystemTextJsonSerializer.Deserialize( + $"\"{jsonValue}\"", + SystemTextJsonContentSerializer.GetDefaultJsonSerializerOptions() + ); + + Assert.Equal(CamelCaseEnum.ValueOne, result); + } + + [Fact] + public void SystemTextJsonContentSerializer_DefaultOptions_ExactCaseMatchTakesPriorityOverCaseInsensitiveWhenMembersDifferByCase() + { + // When enum has members whose names differ only by case, the exact serialized form + // (camelCase) should be used first (case-sensitive), falling back to case-insensitive only + // for inputs that do not exactly match any known serialized form. + + // CaseDifferentMembers.Alpha serializes to "alpha" (camelCase), + // CaseDifferentMembers.ALPHA serializes to "aLPHA" (camelCase). + // Exact-match lookups must correctly disambiguate these. + var options = SystemTextJsonContentSerializer.GetDefaultJsonSerializerOptions(); + + Assert.Equal( + CaseDifferentMembers.Alpha, + SystemTextJsonSerializer.Deserialize("\"alpha\"", options) + ); + Assert.Equal( + CaseDifferentMembers.ALPHA, + SystemTextJsonSerializer.Deserialize("\"aLPHA\"", options) + ); + // Field names are also accepted via exact match + Assert.Equal( + CaseDifferentMembers.Alpha, + SystemTextJsonSerializer.Deserialize("\"Alpha\"", options) + ); + Assert.Equal( + CaseDifferentMembers.ALPHA, + SystemTextJsonSerializer.Deserialize("\"ALPHA\"", options) + ); + } + [Fact] public async Task SystemTextJsonContentSerializer_UsesSourceGeneratedMetadataWhenProvided() { @@ -759,6 +807,14 @@ enum CamelCaseEnum alreadyLowercase = 2 } + // Members Alpha and ALPHA differ only by case; this enum is used to verify that + // the case-sensitive lookup takes priority and the correct member is chosen. + enum CaseDifferentMembers + { + Alpha = 1, + ALPHA = 2, + } + sealed class AsyncOnlyJsonContent(string json) : HttpContent { readonly byte[] _bytes = Encoding.UTF8.GetBytes(json);