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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }