diff --git a/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs b/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs index 381a2d8aa..a4ccea294 100644 --- a/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs +++ b/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs @@ -64,10 +64,10 @@ namespace Squidex.Domain.Apps.Core.ConvertContent }; } - public static FieldConverter ResolveInvariant(LanguagesConfig languagesConfig) + public static FieldConverter ResolveInvariant(LanguagesConfig config) { var codeForInvariant = InvariantPartitioning.Instance.Master.Key; - var codeForMasterLanguage = languagesConfig.Master.Language.Iso2Code; + var codeForMasterLanguage = config.Master.Language.Iso2Code; return (data, field) => { @@ -95,10 +95,10 @@ namespace Squidex.Domain.Apps.Core.ConvertContent }; } - public static FieldConverter ResolveLanguages(LanguagesConfig languagesConfig) + public static FieldConverter ResolveLanguages(LanguagesConfig config) { var codeForInvariant = InvariantPartitioning.Instance.Master.Key; - var codeForMasterLanguage = languagesConfig.Master.Language.Iso2Code; + var codeForMasterLanguage = config.Master.Language.Iso2Code; return (data, field) => { @@ -106,7 +106,7 @@ namespace Squidex.Domain.Apps.Core.ConvertContent { var result = new ContentFieldData(); - foreach (var languageConfig in languagesConfig) + foreach (var languageConfig in config) { var languageCode = languageConfig.Key; @@ -114,7 +114,7 @@ namespace Squidex.Domain.Apps.Core.ConvertContent { result[languageCode] = value; } - else if (languageConfig == languagesConfig.Master && data.TryGetValue(codeForInvariant, out value)) + else if (languageConfig == config.Master && data.TryGetValue(codeForInvariant, out value)) { result[languageCode] = value; } @@ -127,15 +127,15 @@ namespace Squidex.Domain.Apps.Core.ConvertContent }; } - public static FieldConverter ResolveFallbackLanguages(LanguagesConfig languagesConfig) + public static FieldConverter ResolveFallbackLanguages(LanguagesConfig config) { - var master = languagesConfig.Master; + var master = config.Master; return (data, field) => { if (field.Partitioning.Equals(Partitioning.Language)) { - foreach (var languageConfig in languagesConfig) + foreach (var languageConfig in config) { var languageCode = languageConfig.Key; @@ -168,19 +168,26 @@ namespace Squidex.Domain.Apps.Core.ConvertContent }; } - public static FieldConverter FilterLanguages(LanguagesConfig languagesConfig, IEnumerable languages) + public static FieldConverter FilterLanguages(LanguagesConfig config, IEnumerable languages) { - if (languages == null) + if (languages?.Any() != true) { return (data, field) => data; } - var languageCodes = languages.Select(x => x.Iso2Code).Where(x => languagesConfig.Contains(x)); - var languageSet = new HashSet(languageCodes, StringComparer.OrdinalIgnoreCase); + var languageSet = new HashSet(StringComparer.OrdinalIgnoreCase); + + foreach (var language in languages) + { + if (config.Contains(language.Iso2Code)) + { + languageSet.Add(language.Iso2Code); + } + } if (languageSet.Count == 0) { - return (data, field) => data; + languageSet.Add(config.Master.Language.Iso2Code); } return (data, field) => diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs index 65a638810..9f07fbe82 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs @@ -361,21 +361,28 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent } [Fact] - public void Should_return_same_values_if_resolving_fallback_languages_from_invariant_field() + public void Should_return_master_language_if_languages_to_filter_are_invalid() { - var source = new ContentFieldData(); + var source = + new ContentFieldData() + .AddValue("en", "EN") + .AddValue("de", "DE"); - var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, stringInvariantField); + var expected = + new ContentFieldData() + .AddValue("en", "EN"); - Assert.Same(source, result); + var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.CA })(source, stringLanguageField); + + Assert.Equal(expected, result); } [Fact] - public void Should_return_same_values_if_filtered_languages_are_invalid() + public void Should_return_same_values_if_resolving_fallback_languages_from_invariant_field() { var source = new ContentFieldData(); - var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.CA })(source, stringLanguageField); + var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, stringInvariantField); Assert.Same(source, result); }