From 5f2d552ebdefb32fe2f417294d97f89aeb71b2c3 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 9 Apr 2026 18:53:57 +0800 Subject: [PATCH] restore behavior test for duplicate JSON keys with clearer naming and comment --- ...JsonLocalizationDictionaryBuilder_Tests.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/JsonLocalizationDictionaryBuilder_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/JsonLocalizationDictionaryBuilder_Tests.cs index c0fd674f43..d71111136c 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/JsonLocalizationDictionaryBuilder_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/JsonLocalizationDictionaryBuilder_Tests.cs @@ -9,6 +9,29 @@ namespace Volo.Abp.Localization; /// public class JsonLocalizationDictionaryBuilder_Tests { + [Fact] + public void Should_Use_Last_Value_When_Json_Contains_Duplicate_Keys() + { + // This test locks the behavior of System.Text.Json when deserializing duplicate JSON property names. + // If STJ changes this behavior in a future version, this test will catch the regression. + var input = """ + { + "culture": "en", + "texts": { + "ThisFieldIsRequired": "This field is required", + "MaxLengthErrorMessage": "This field can be maximum of '{0}' chars", + "ThisFieldIsRequired": "This field is required again" + } + } + """; + + var localizationDictionary = JsonLocalizationDictionaryBuilder.BuildFromJsonString(input); + localizationDictionary.ShouldNotBeNull(); + var localizationString = localizationDictionary.GetOrNull("ThisFieldIsRequired"); + localizationString.ShouldNotBeNull(); + localizationString.Value.ShouldBe("This field is required again"); + } + [Fact] public void Should_Use_Nested_Value_When_Flat_Key_Is_Defined_Before_Nested_Object() {