public async Task GetTranslations_ShouldGetTranslations_WhenCached() { // Arrange await _sut.StoreTranslationsAsync(TestData.Language_DE, TestData.Translations_De); // Act var actual = await _sut.GetTranslations(TestData.Language_DE, false); // Assert actual.Result.Should().BeEquivalentTo(TestData.Translations_De); }
public async Task GetTranslations_ShouldGetTranslationsFromCalingaService() { // Arrange & Act var translations = await _cachingService.GetTranslations(TestData.Language_DE).ConfigureAwait(false); // Assert translations.ContainsKey(TestData.Key_1).Should().BeTrue(); translations.ContainsKey(TestData.Key_2).Should().BeTrue(); await _consumerHttpClient.Received().GetTranslationsAsync(TestData.Language_DE).ConfigureAwait(false); }
public async Task GetTranslations_ShouldGetTranslationsFromFirstCacheLevel_WhenAvailable() { // Arrange _firstLevelCachingService.Setup(x => x.GetTranslations(TestData.Language_DE, false)).Returns(Task.FromResult(TestData.Cache_Translations_De)); _secondLevelCachingService.Setup(x => x.GetTranslations(TestData.Language_DE, false)).Returns(Task.FromResult(TestData.Cache_Translations_En)); // Act var actual = await _sut.GetTranslations(TestData.Language_DE, false); // Assert _firstLevelCachingService.Verify(x => x.GetTranslations(TestData.Language_DE, false), Times.Once); _secondLevelCachingService.Verify(x => x.GetTranslations(TestData.Language_DE, false), Times.Never); actual.Result.Should().BeEquivalentTo(TestData.Translations_De); }
public async Task <IReadOnlyDictionary <string, string> > GetTranslationsAsync(string language) { Guard.IsNotNullOrWhiteSpace(language); IReadOnlyDictionary <string, string> cachedTranslations; var cacheResponse = await _cachingService.GetTranslations(language, _settings.IncludeDrafts).ConfigureAwait(false); if (cacheResponse.FoundInCache) { cachedTranslations = cacheResponse.Result; } else { cachedTranslations = await _consumerHttpClient.GetTranslationsAsync(language).ConfigureAwait(false); if (cachedTranslations == null || !cachedTranslations.Any()) { throw new TranslationsNotAvailableException( $"Translation not found, path: {_settings.Organization}, {_settings.Team}, {_settings.Project}, {language}"); } await _cachingService.StoreTranslationsAsync(language, cachedTranslations).ConfigureAwait(false); } return(_settings.IsDevMode ? cachedTranslations.ToDictionary(k => k.Key, k => k.Key) : cachedTranslations); }
public async Task <string> TranslateAsync(string key, string language) { Guard.IsNotNullOrWhiteSpace(language); Guard.IsNotNullOrWhiteSpace(key); var container = await _cachingService.GetTranslations(language).ConfigureAwait(false); if (container == null) { throw new TranslationsNotAvailableException(FormattableString.Invariant($"Translations are not available")); } var translation = container.FirstOrDefault(k => k.Key == key); if (translation.Equals(default(KeyValuePair <string, string>))) { throw new KeyNotFoundException(FormattableString.Invariant($"Key {key} was not found!")); } return(translation.Value); }