|
|
|
@ -5,10 +5,7 @@ |
|
|
|
// All rights reserved. Licensed under the MIT license.
|
|
|
|
// ==========================================================================
|
|
|
|
|
|
|
|
using System; |
|
|
|
using System.Collections; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Linq; |
|
|
|
using FluentAssertions; |
|
|
|
using Squidex.Domain.Apps.Core.Apps; |
|
|
|
using Squidex.Infrastructure; |
|
|
|
@ -20,104 +17,138 @@ namespace Squidex.Domain.Apps.Core.Model.Apps |
|
|
|
{ |
|
|
|
public class LanguagesConfigTests |
|
|
|
{ |
|
|
|
private readonly LanguagesConfig config_0 = LanguagesConfig.Build(Language.DE); |
|
|
|
private readonly LanguagesConfig config_0 = LanguagesConfig.English; |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_create_initial_config_0() |
|
|
|
public void Should_make_contains_test() |
|
|
|
{ |
|
|
|
config_0.OfType<LanguageConfig>().ToList().Should().BeEquivalentTo( |
|
|
|
new List<LanguageConfig> |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE) |
|
|
|
}); |
|
|
|
Assert.True(config_0.Contains(Language.EN)); |
|
|
|
|
|
|
|
Assert.Equal(Language.DE, config_0.Master.Language); |
|
|
|
|
|
|
|
Assert.Equal("de", ((IFieldPartitioning)config_0).Master.Key); |
|
|
|
Assert.False(config_0.Contains(Language.FR)); |
|
|
|
Assert.False(config_0.Contains(null!)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_create_initial_config_0_with_multiple_languages() |
|
|
|
public void Should_provide_name() |
|
|
|
{ |
|
|
|
var config = LanguagesConfig.Build(Language.DE, Language.EN, Language.IT); |
|
|
|
Assert.Equal("English", config_0.GetName(Language.EN)); |
|
|
|
|
|
|
|
config.OfType<LanguageConfig>().ToList().Should().BeEquivalentTo( |
|
|
|
new List<LanguageConfig> |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.EN), |
|
|
|
new LanguageConfig(Language.IT) |
|
|
|
}); |
|
|
|
Assert.Null(config_0.GetName(Language.FR)); |
|
|
|
Assert.Null(config_0.GetName(null!)); |
|
|
|
} |
|
|
|
|
|
|
|
config.TryGetConfig(Language.DE, out var master); |
|
|
|
[Fact] |
|
|
|
public void Should_make_master_test() |
|
|
|
{ |
|
|
|
var config = |
|
|
|
LanguagesConfig.English |
|
|
|
.Set(Language.DE) |
|
|
|
.Set(Language.ES, true); |
|
|
|
|
|
|
|
Assert.Equal(Language.DE, config.Master.Language); |
|
|
|
Assert.Equal(3, config.Count); |
|
|
|
Assert.True(config.IsMaster(Language.EN)); |
|
|
|
|
|
|
|
Assert.Same(master, config.Master); |
|
|
|
Assert.False(config.IsMaster(Language.DE)); |
|
|
|
Assert.False(config.IsMaster(Language.ES)); |
|
|
|
Assert.False(config.IsMaster(Language.FR)); |
|
|
|
Assert.False(config.IsMaster(null!)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_create_initial_config_0_with_config_0s() |
|
|
|
public void Should_make_optional_test() |
|
|
|
{ |
|
|
|
var configs = new[] |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.EN), |
|
|
|
new LanguageConfig(Language.IT) |
|
|
|
}; |
|
|
|
var config = LanguagesConfig.Build(configs); |
|
|
|
var config = |
|
|
|
LanguagesConfig.English |
|
|
|
.Set(Language.DE) |
|
|
|
.Set(Language.ES, true); |
|
|
|
|
|
|
|
config.OfType<LanguageConfig>().ToList().Should().BeEquivalentTo(configs); |
|
|
|
Assert.True(config.IsOptional(Language.ES)); |
|
|
|
|
|
|
|
Assert.Equal(configs[0], config.Master); |
|
|
|
Assert.Same(configs[0], config.Master); |
|
|
|
Assert.False(config.IsOptional(Language.EN)); |
|
|
|
Assert.False(config.IsOptional(Language.DE)); |
|
|
|
Assert.False(config.IsOptional(Language.FR)); |
|
|
|
Assert.False(config.IsOptional(null!)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_add_language() |
|
|
|
public void Should_provide_priorities() |
|
|
|
{ |
|
|
|
var config_1 = config_0.Set(Language.IT); |
|
|
|
var config = |
|
|
|
LanguagesConfig.English |
|
|
|
.Set(Language.DE) |
|
|
|
.Set(Language.ES, true, Language.DE); |
|
|
|
|
|
|
|
Assert.Empty(config.GetPriorities(Language.FR)); |
|
|
|
Assert.Empty(config.GetPriorities(null!)); |
|
|
|
|
|
|
|
Assert.Equal(new string[] { Language.ES, Language.DE, Language.EN }, config.GetPriorities(Language.ES)); |
|
|
|
Assert.Equal(new string[] { Language.DE, Language.EN }, config.GetPriorities(Language.DE)); |
|
|
|
Assert.Equal(new string[] { Language.EN }, config.GetPriorities(Language.EN)); |
|
|
|
} |
|
|
|
|
|
|
|
config_1.OfType<LanguageConfig>().ToList().Should().BeEquivalentTo( |
|
|
|
new List<LanguageConfig> |
|
|
|
[Fact] |
|
|
|
public void Should_create_initial_config() |
|
|
|
{ |
|
|
|
config_0.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.IT) |
|
|
|
[Language.EN] = new LanguageConfig() |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.True(config_1.TryGetConfig(Language.IT, out _)); |
|
|
|
Assert.True(config_1.Contains(Language.IT)); |
|
|
|
Assert.Equal(Language.EN, config_0.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_make_first_language_to_master() |
|
|
|
public void Should_create_initial_config_0_with_multiple_languages() |
|
|
|
{ |
|
|
|
Assert.Equal(Language.DE, config_0.Master.Language); |
|
|
|
var config = |
|
|
|
LanguagesConfig.English |
|
|
|
.Set(Language.DE) |
|
|
|
.Set(Language.ES, true) |
|
|
|
.Set(Language.IT, true, Language.ES) |
|
|
|
.MakeMaster(Language.DE); |
|
|
|
|
|
|
|
config.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
[Language.EN] = new LanguageConfig(), |
|
|
|
[Language.DE] = new LanguageConfig(), |
|
|
|
[Language.ES] = new LanguageConfig(true), |
|
|
|
[Language.IT] = new LanguageConfig(true, Language.ES) |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.Equal(Language.DE, config.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_not_throw_exception_if_language_to_add_already_exists() |
|
|
|
{ |
|
|
|
config_0.Set(Language.DE); |
|
|
|
config_0.Set(Language.EN); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_make_master_language() |
|
|
|
{ |
|
|
|
var config_1 = config_0.Set(Language.UK); |
|
|
|
var config_2 = config_1.Set(Language.IT, true, new[] { Language.UK }); |
|
|
|
var config_3 = config_2.MakeMaster(Language.IT); |
|
|
|
var config = |
|
|
|
LanguagesConfig.English |
|
|
|
.Set(Language.DE) |
|
|
|
.Set(Language.IT, true, Language.ES) |
|
|
|
.MakeMaster(Language.IT); |
|
|
|
|
|
|
|
Assert.Equal(Language.IT, config_3.Master.Language); |
|
|
|
config.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
[Language.EN] = new LanguageConfig(), |
|
|
|
[Language.DE] = new LanguageConfig(), |
|
|
|
[Language.IT] = new LanguageConfig() |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.False(config_3.Master.IsOptional); |
|
|
|
Assert.Equal(Language.IT, config.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_return_same_languages_if_master_language_is_already_master() |
|
|
|
{ |
|
|
|
var config_1 = config_0.Set(Language.UK); |
|
|
|
var config_1 = config_0.Set(Language.DE); |
|
|
|
var config_2 = config_1.Set(Language.IT); |
|
|
|
var config_3 = config_2.MakeMaster(Language.IT); |
|
|
|
var config_4 = config_3.MakeMaster(Language.IT); |
|
|
|
@ -126,106 +157,115 @@ namespace Squidex.Domain.Apps.Core.Model.Apps |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_throw_exception_if_language_to_make_master_is_not_found() |
|
|
|
public void Should_keep_master_language_if_language_to_make_master_is_not_found() |
|
|
|
{ |
|
|
|
Assert.Throws<KeyNotFoundException>(() => config_0.MakeMaster(Language.EN)); |
|
|
|
} |
|
|
|
var config_1 = config_0.Set(Language.DE); |
|
|
|
var config_2 = config_1.Set(Language.IT); |
|
|
|
var config_3 = config_2.MakeMaster(Language.IT); |
|
|
|
var config_4 = config_3.MakeMaster(Language.FR); |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_not_throw_exception_if_language_is_already_master_language() |
|
|
|
{ |
|
|
|
config_0.MakeMaster(Language.DE); |
|
|
|
Assert.Same(config_3, config_4); |
|
|
|
Assert.Equal(Language.IT, config_4.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_remove_language() |
|
|
|
{ |
|
|
|
var config = LanguagesConfig.Build(Language.DE, Language.IT, Language.RU); |
|
|
|
var config_1 = config.Remove(Language.IT); |
|
|
|
|
|
|
|
Assert.Same(config_1.Master, config_1.OfType<LanguageConfig>().FirstOrDefault(x => x.Language == Language.DE)); |
|
|
|
var config_1 = config_0.Set(Language.DE); |
|
|
|
var config_2 = config_1.Set(Language.IT); |
|
|
|
var config_3 = config_2.Remove(Language.DE); |
|
|
|
|
|
|
|
config_1.ToList().Should().BeEquivalentTo( |
|
|
|
new List<LanguageConfig> |
|
|
|
config_3.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.RU) |
|
|
|
[Language.EN] = new LanguageConfig(), |
|
|
|
[Language.IT] = new LanguageConfig() |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.Equal(Language.EN, config_3.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_remove_fallbacks_when_removing_language() |
|
|
|
{ |
|
|
|
var config = |
|
|
|
LanguagesConfig.Build( |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.IT, false, Language.RU, Language.IT), |
|
|
|
new LanguageConfig(Language.RU, false, Language.DE, Language.IT)); |
|
|
|
var config_1 = config.Remove(Language.IT); |
|
|
|
|
|
|
|
config_1.OfType<LanguageConfig>().ToList().Should().BeEquivalentTo( |
|
|
|
new List<LanguageConfig> |
|
|
|
var config_1 = config_0.Set(Language.DE); |
|
|
|
var config_2 = config_1.Set(Language.IT, true, Language.UK); |
|
|
|
var config_3 = config_2.Remove(Language.DE); |
|
|
|
|
|
|
|
config_3.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.RU, false, Language.DE) |
|
|
|
[Language.EN] = new LanguageConfig(), |
|
|
|
[Language.IT] = new LanguageConfig(true) |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.Equal(Language.EN, config_3.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_return_same_languages_if_language_to_remove_is_not_found() |
|
|
|
public void Should_same_langauges_if_removing_single_language() |
|
|
|
{ |
|
|
|
var config_1 = config_0.Remove(Language.EN); |
|
|
|
|
|
|
|
Assert.Equal(config_0, config_1); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_throw_exception_if_language_to_remove_is_master() |
|
|
|
{ |
|
|
|
Assert.Throws<InvalidOperationException>(() => config_0.Remove(Language.DE)); |
|
|
|
Assert.Same(config_0, config_1); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_update_language() |
|
|
|
public void Should_update_master_language_if_removed() |
|
|
|
{ |
|
|
|
var config_1 = config_0.Set(new LanguageConfig(Language.IT)); |
|
|
|
var config_2 = config_1.Set(new LanguageConfig(Language.IT, true, Language.DE)); |
|
|
|
var config_1 = config_0.Set(Language.DE); |
|
|
|
var config_2 = config_1.Set(Language.IT); |
|
|
|
var config_3 = config_2.Remove(Language.EN); |
|
|
|
|
|
|
|
config_2.OfType<LanguageConfig>().ToList().Should().BeEquivalentTo( |
|
|
|
new List<LanguageConfig> |
|
|
|
config_3.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
new LanguageConfig(Language.DE), |
|
|
|
new LanguageConfig(Language.IT, true, Language.DE) |
|
|
|
[Language.DE] = new LanguageConfig(), |
|
|
|
[Language.IT] = new LanguageConfig() |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_throw_exception_if_fallback_language_is_invalid() |
|
|
|
{ |
|
|
|
Assert.Throws<InvalidOperationException>(() => config_0.Set(new LanguageConfig(Language.DE, false, Language.EN))); |
|
|
|
Assert.Equal(Language.DE, config_3.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_provide_enumerators() |
|
|
|
public void Should_return_same_languages_if_language_to_remove_is_not_found() |
|
|
|
{ |
|
|
|
Assert.NotEmpty(config_0); |
|
|
|
var config_1 = config_0.Remove(Language.IT); |
|
|
|
|
|
|
|
Assert.NotNull(((IEnumerable)config_0).GetEnumerator()); |
|
|
|
Assert.NotNull(((IEnumerable<IFieldPartitionItem>)config_0).GetEnumerator()); |
|
|
|
Assert.Equal(config_0, config_1); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_resolve_language_by_string() |
|
|
|
public void Should_update_language() |
|
|
|
{ |
|
|
|
Assert.True(config_0.TryGetItem("de", out var item)); |
|
|
|
Assert.NotNull(item); |
|
|
|
var config_1 = config_0.Set(Language.IT); |
|
|
|
var config_2 = config_1.Set(Language.IT, true, Language.EN); |
|
|
|
|
|
|
|
config_2.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
[Language.EN] = new LanguageConfig(), |
|
|
|
[Language.IT] = new LanguageConfig(true, Language.EN) |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.Equal(Language.EN, config_2.Master); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Should_not_resolve_language_fór_invalid_language() |
|
|
|
public void Should_eliminate_invalid_fallbacks_and_self() |
|
|
|
{ |
|
|
|
Assert.False(config_0.TryGetItem("invalid", out var item)); |
|
|
|
Assert.Null(item); |
|
|
|
var config_1 = config_0.Set(Language.IT); |
|
|
|
var config_2 = config_1.Set(Language.IT); |
|
|
|
var config_3 = config_2.Set(Language.IT, true, Language.EN, Language.IT, Language.DE); |
|
|
|
|
|
|
|
config_3.Languages.Should().BeEquivalentTo( |
|
|
|
new Dictionary<string, LanguageConfig> |
|
|
|
{ |
|
|
|
[Language.EN] = new LanguageConfig(), |
|
|
|
[Language.IT] = new LanguageConfig(true, Language.EN) |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.Equal(Language.EN, config_2.Master); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|