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 codeForInvariant = InvariantPartitioning.Instance.Master.Key;
var codeForMasterLanguage = languagesConfig.Master.Language.Iso2Code; var codeForMasterLanguage = config.Master.Language.Iso2Code;
return (data, field) => 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 codeForInvariant = InvariantPartitioning.Instance.Master.Key;
var codeForMasterLanguage = languagesConfig.Master.Language.Iso2Code; var codeForMasterLanguage = config.Master.Language.Iso2Code;
return (data, field) => return (data, field) =>
{ {
@ -106,7 +106,7 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
{ {
var result = new ContentFieldData(); var result = new ContentFieldData();
foreach (var languageConfig in languagesConfig) foreach (var languageConfig in config)
{ {
var languageCode = languageConfig.Key; var languageCode = languageConfig.Key;
@ -114,7 +114,7 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
{ {
result[languageCode] = value; 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; 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) => return (data, field) =>
{ {
if (field.Partitioning.Equals(Partitioning.Language)) if (field.Partitioning.Equals(Partitioning.Language))
{ {
foreach (var languageConfig in languagesConfig) foreach (var languageConfig in config)
{ {
var languageCode = languageConfig.Key; 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; return (data, field) => data;
} }
var languageCodes = languages.Select(x => x.Iso2Code).Where(x => languagesConfig.Contains(x)); var languageSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
var languageSet = new HashSet<string>(languageCodes, StringComparer.OrdinalIgnoreCase);
foreach (var language in languages)
{
if (config.Contains(language.Iso2Code))
{
languageSet.Add(language.Iso2Code);
}
}
if (languageSet.Count == 0) if (languageSet.Count == 0)
{ {
return (data, field) => data; languageSet.Add(config.Master.Language.Iso2Code);
} }
return (data, field) => 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] [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] [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 source = new ContentFieldData();
var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.CA })(source, stringLanguageField); var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, stringInvariantField);
Assert.Same(source, result); Assert.Same(source, result);
} }

Loading…
Cancel
Save