|
|
|
@ -108,14 +108,20 @@ public class MultiLingualObjectManager_Tests : AbpIntegratedTest<AbpMultiLingual |
|
|
|
var translations = await _multiLingualObjectManager.GetBulkTranslationsAsync<MultiLingualBook, MultiLingualBookTranslation>(_books); |
|
|
|
foreach (var (entity, translation) in translations) |
|
|
|
{ |
|
|
|
if (entity.Translations.Any(x => x.Language == "en")) |
|
|
|
if (!entity.Translations.Any()) |
|
|
|
{ |
|
|
|
translation.ShouldBeNull(); |
|
|
|
} |
|
|
|
else if (entity.Translations.Any(x => x.Language == "en")) |
|
|
|
{ |
|
|
|
translation.ShouldNotBeNull(); |
|
|
|
translation.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
translation.ShouldBeNull(); |
|
|
|
//Falls back to the default language or the first available translation
|
|
|
|
translation.ShouldNotBeNull(); |
|
|
|
entity.Translations.ShouldContain(translation); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -127,10 +133,58 @@ public class MultiLingualObjectManager_Tests : AbpIntegratedTest<AbpMultiLingual |
|
|
|
using (CultureHelper.Use("en-us")) |
|
|
|
{ |
|
|
|
var translations = await _multiLingualObjectManager.GetBulkTranslationsAsync(_books.Select(x => x.Translations)); |
|
|
|
foreach (var translation in translations) |
|
|
|
translations.Count.ShouldBe(_books.Count); |
|
|
|
translations[0].ShouldBeNull(); |
|
|
|
translations[1]!.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
translations[2]!.Name.ShouldBe(_testTranslations["ar"]); |
|
|
|
translations[3]!.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
translations[4]!.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task GetBulkTranslationsAsync_Should_Keep_Translations_Aligned_With_Entities() |
|
|
|
{ |
|
|
|
using (CultureHelper.Use("en-us")) |
|
|
|
{ |
|
|
|
var books = new List<MultiLingualBook> |
|
|
|
{ |
|
|
|
translation?.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
} |
|
|
|
//resolved in the first pass
|
|
|
|
GetTestBook("en"), |
|
|
|
//has no translations
|
|
|
|
GetTestBook(), |
|
|
|
//resolved by the fallback pass
|
|
|
|
GetTestBook("ar") |
|
|
|
}; |
|
|
|
|
|
|
|
var translations = await _multiLingualObjectManager.GetBulkTranslationsAsync<MultiLingualBook, MultiLingualBookTranslation>(books); |
|
|
|
|
|
|
|
translations.Count.ShouldBe(3); |
|
|
|
translations[0].entity.ShouldBe(books[0]); |
|
|
|
translations[0].translation.ShouldNotBeNull(); |
|
|
|
translations[0].translation!.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
translations[1].entity.ShouldBe(books[1]); |
|
|
|
translations[1].translation.ShouldBeNull(); |
|
|
|
translations[2].entity.ShouldBe(books[2]); |
|
|
|
translations[2].translation.ShouldNotBeNull(); |
|
|
|
translations[2].translation!.Name.ShouldBe(_testTranslations["ar"]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task GetBulkTranslationsAsync_Should_Prefer_Default_Language_Over_First_Translation() |
|
|
|
{ |
|
|
|
using (CultureHelper.Use("fr-FR")) |
|
|
|
{ |
|
|
|
var books = new List<MultiLingualBook> |
|
|
|
{ |
|
|
|
GetTestBook("ar", "en") |
|
|
|
}; |
|
|
|
|
|
|
|
var translations = await _multiLingualObjectManager.GetBulkTranslationsAsync<MultiLingualBook, MultiLingualBookTranslation>(books); |
|
|
|
|
|
|
|
translations[0].translation.ShouldNotBeNull(); |
|
|
|
translations[0].translation!.Name.ShouldBe(_testTranslations["en"]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -150,7 +204,9 @@ public class MultiLingualObjectManager_Tests : AbpIntegratedTest<AbpMultiLingual |
|
|
|
{ |
|
|
|
var og = _books[i]; |
|
|
|
var m = mapped[i]; |
|
|
|
Assert.Equal(og.Translations.FirstOrDefault(x => x.Language == "en")?.Name, m.Name); |
|
|
|
var expectedName = og.Translations.FirstOrDefault(x => x.Language == "en")?.Name ?? |
|
|
|
og.Translations.FirstOrDefault()?.Name; |
|
|
|
Assert.Equal(expectedName, m.Name); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|