Browse Source

Changed behavior for language filtering.

pull/303/head v1.6.0
Sebastian 8 years ago
parent
commit
68500cf7cf
  1. 35
      src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs
  2. 19
      tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs

35
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<Language> languages)
public static FieldConverter FilterLanguages(LanguagesConfig config, IEnumerable<Language> 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<string>(languageCodes, StringComparer.OrdinalIgnoreCase);
var languageSet = new HashSet<string>(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) =>

19
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);
}

Loading…
Cancel
Save