diff --git a/src/Core/Utilities/JsonHelpers.cs b/src/Core/Utilities/JsonHelpers.cs index 2f94fe84f4..b6a9481b64 100644 --- a/src/Core/Utilities/JsonHelpers.cs +++ b/src/Core/Utilities/JsonHelpers.cs @@ -1,4 +1,5 @@ -using System.Text.Json; +using System.Globalization; +using System.Text.Json; using System.Text.Json.Serialization; using NS = Newtonsoft.Json; @@ -140,14 +141,15 @@ namespace Bit.Core.Utilities /// public class PermissiveStringConverter : JsonConverter { - internal static PermissiveStringConverter Instance = new(); + internal static readonly PermissiveStringConverter Instance = new(); + private static readonly CultureInfo _cultureInfo = new("en-US"); public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return reader.TokenType switch { JsonTokenType.String => reader.GetString(), - JsonTokenType.Number => reader.GetDecimal().ToString(), + JsonTokenType.Number => reader.GetDecimal().ToString(_cultureInfo), JsonTokenType.True => bool.TrueString, JsonTokenType.False => bool.FalseString, _ => throw new JsonException($"Unsupported TokenType: {reader.TokenType}"), diff --git a/test/Core.Test/Utilities/PermissiveStringConverterTests.cs b/test/Core.Test/Utilities/PermissiveStringConverterTests.cs index 523ae81d94..396d277e41 100644 --- a/test/Core.Test/Utilities/PermissiveStringConverterTests.cs +++ b/test/Core.Test/Utilities/PermissiveStringConverterTests.cs @@ -1,4 +1,5 @@ -using System.Text.Json; +using System.Globalization; +using System.Text.Json; using System.Text.Json.Serialization; using Bit.Core.Utilities; using Bit.Test.Common.Helpers; @@ -41,6 +42,17 @@ namespace Bit.Core.Test.Utilities Assert.Equal("1.2", obj.EnumerableStringProp.ElementAt(1)); } + [Fact] + public void Read_Float_Success_Culture() + { + var ci = new CultureInfo("sv-SE"); + Thread.CurrentThread.CurrentCulture = ci; + Thread.CurrentThread.CurrentUICulture = ci; + + var obj = JsonSerializer.Deserialize(boolJson); + Assert.Equal("1.2", obj.EnumerableStringProp.ElementAt(1)); + } + [Fact] public void Read_BigNumbers_Success() { diff --git a/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs b/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs index b28f3374b6..a62413bac6 100644 --- a/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs +++ b/test/Identity.IntegrationTest/Endpoints/IdentityServerTests.cs @@ -418,13 +418,10 @@ namespace Bit.Identity.IntegrationTest.Endpoints tasks[i] = MakeRequest(); } - var responses = await Task.WhenAll(tasks); + var responses = (await Task.WhenAll(tasks)).ToList(); - var allowedCalls = responses[..AmountInOneSecondAllowed]; - var notAllowedCall = responses[^1]; - - Assert.True(allowedCalls.All(c => c.Response.StatusCode == StatusCodes.Status200OK)); - Assert.True(notAllowedCall.Response.StatusCode == StatusCodes.Status429TooManyRequests); + Assert.Equal(5, responses.Count(c => c.Response.StatusCode == StatusCodes.Status200OK)); + Assert.Equal(1, responses.Count(c => c.Response.StatusCode == StatusCodes.Status429TooManyRequests)); Task MakeRequest() {