Browse Source

Validation for fallback languages.

pull/479/head
Sebastian 6 years ago
parent
commit
327b4beef6
  1. 2
      backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/UpdateLanguage.cs
  2. 5
      backend/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppLanguages.cs
  3. 2
      backend/src/Squidex.Domain.Apps.Events/Apps/AppLanguageUpdated.cs
  4. 2
      backend/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs
  5. 15
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppLanguagesTests.cs

2
backend/src/Squidex.Domain.Apps.Entities/Apps/Commands/UpdateLanguage.cs

@ -18,6 +18,6 @@ namespace Squidex.Domain.Apps.Entities.Apps.Commands
public bool IsMaster { get; set; }
public List<Language> Fallback { get; set; }
public List<Language>? Fallback { get; set; }
}
}

5
backend/src/Squidex.Domain.Apps.Entities/Apps/Guards/GuardAppLanguages.cs

@ -69,6 +69,11 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
e("Master language cannot be made optional.", nameof(command.IsMaster));
}
if ((languages.Master == config || command.IsMaster) && command.Fallback?.Count > 0)
{
e("Master language cannot have fallback languages.", nameof(command.Fallback));
}
if (command.Fallback == null)
{
return;

2
backend/src/Squidex.Domain.Apps.Events/Apps/AppLanguageUpdated.cs

@ -20,6 +20,6 @@ namespace Squidex.Domain.Apps.Events.Apps
public bool IsMaster { get; set; }
public List<Language> Fallback { get; set; }
public List<Language>? Fallback { get; set; }
}
}

2
backend/src/Squidex.Infrastructure/Commands/DomainObjectBase.cs

@ -149,7 +149,7 @@ namespace Squidex.Infrastructure.Commands
throw new DomainObjectVersionException(id.ToString(), GetType(), Version, command.ExpectedVersion);
}
if (isUpdate == true && Version < 0)
if (isUpdate && Version < 0)
{
throw new DomainObjectNotFoundException(id.ToString(), GetType());
}

15
backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppLanguagesTests.cs

@ -105,10 +105,21 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
new ValidationError("Master language cannot be made optional.", "IsMaster"));
}
[Fact]
public void CanUpdateLanguage_should_throw_exception_if_fallback_language_defined_and_master()
{
var command = new UpdateLanguage { Language = Language.DE, Fallback = new List<Language> { Language.EN } };
var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
ValidationAssert.Throws(() => GuardAppLanguages.CanUpdate(languages_1, command),
new ValidationError("Master language cannot have fallback languages.", "Fallback"));
}
[Fact]
public void CanUpdateLanguage_should_throw_exception_if_language_has_invalid_fallback()
{
var command = new UpdateLanguage { Language = Language.DE, Fallback = new List<Language> { Language.IT } };
var command = new UpdateLanguage { Language = Language.EN, Fallback = new List<Language> { Language.IT } };
var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
@ -129,7 +140,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
[Fact]
public void CanUpdateLanguage_should_not_throw_exception_if_language_is_valid()
{
var command = new UpdateLanguage { Language = Language.DE, Fallback = new List<Language> { Language.EN } };
var command = new UpdateLanguage { Language = Language.EN, Fallback = new List<Language> { Language.EN } };
var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));

Loading…
Cancel
Save