diff --git a/src/Core/Services/TypeHelper.cs b/src/Core/Services/TypeHelper.cs index a0ba25a0ba..56b86b886c 100644 --- a/src/Core/Services/TypeHelper.cs +++ b/src/Core/Services/TypeHelper.cs @@ -3,6 +3,7 @@ using System.Data; using System.Diagnostics.CodeAnalysis; +using System.Globalization; using System.Net; using Azure.DataApiBuilder.Core.Services.OpenAPI; using Azure.DataApiBuilder.Service.Exceptions; @@ -304,12 +305,12 @@ public static bool TryGetDbTypeFromSqlDbDateTimeType(SqlDbType sqlDbType, [NotNu SyntaxKind valueKind = node.Kind; return valueKind switch { - SyntaxKind.IntValue => Convert.ToInt32(node.Value), // spec - SyntaxKind.FloatValue => Convert.ToDouble(node.Value), // spec + SyntaxKind.IntValue => Convert.ToInt32(node.Value, CultureInfo.InvariantCulture), // spec + SyntaxKind.FloatValue => Convert.ToDouble(node.Value, CultureInfo.InvariantCulture), // spec SyntaxKind.BooleanValue => Convert.ToBoolean(node.Value), // spec - SyntaxKind.StringValue => Convert.ToString(node.Value), // spec + SyntaxKind.StringValue => Convert.ToString(node.Value, CultureInfo.InvariantCulture), // spec SyntaxKind.NullValue => null, // spec - _ => Convert.ToString(node.Value) + _ => Convert.ToString(node.Value, CultureInfo.InvariantCulture) }; } diff --git a/src/Service.Tests/CosmosTests/MutationTests.cs b/src/Service.Tests/CosmosTests/MutationTests.cs index 9cb68b4847..23e23a9ec7 100644 --- a/src/Service.Tests/CosmosTests/MutationTests.cs +++ b/src/Service.Tests/CosmosTests/MutationTests.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Net.Http; using System.Text.Json; @@ -1074,6 +1075,31 @@ public async Task CanPatchMoreThan10AttributesInAnItemWithVariables() Assert.AreEqual(patchResponse.GetProperty("moons").ToString(), JsonSerializer.Serialize(update.moons)); } + [TestMethod] + [DataRow("en-US")] + [DataRow("en-DE")] + public async Task CanCreateItemWithCultureInvariant(string cultureInfo) + { + CultureInfo ci = new(cultureInfo); + CultureInfo.DefaultThreadCurrentCulture = ci; + + // Run mutation Add planet; + string id = Guid.NewGuid().ToString(); + const string name = "test_name"; + string mutation = $@" +mutation {{ + createPlanet (item: {{ id: ""{id}"", name: ""{name}"", age: 10.15 }}) {{ + id + name + age + }} +}}"; + JsonElement response = await ExecuteGraphQLRequestAsync("createPlanet", mutation, variables: new()); + + // Validate results + Assert.AreEqual(Convert.ToDouble(10.15, CultureInfo.InvariantCulture), response.GetProperty("age").GetDouble()); + } + /// /// Runs once after all tests in this class are executed /// diff --git a/src/Service.Tests/CosmosTests/TestBase.cs b/src/Service.Tests/CosmosTests/TestBase.cs index 12e881f52e..cce7bb09ea 100644 --- a/src/Service.Tests/CosmosTests/TestBase.cs +++ b/src/Service.Tests/CosmosTests/TestBase.cs @@ -46,7 +46,7 @@ type Planet @model(name:""PlanetAlias"") { id : ID!, name : String, character: Character, - age : Int, + age : Float, dimension : String, earth: Earth, tags: [String!],