コード例 #1
0
        public async Task <ActionResult <IDictionary <string, string> > > GetTranslationsByLanguage([FromRoute] int languageId, [FromQuery] GetTranslationsByLanguageQueryParams model, CancellationToken cancellationToken = default)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            LanguageExistsQuery existsQuery = new LanguageExistsQuery {
                LanguageId = languageId
            };

            bool languageExists = await _mediator.Send(existsQuery, cancellationToken);

            if (!languageExists)
            {
                return(NotFound(new ErrorResource
                {
                    StatusCode = StatusCodes.Status404NotFound,
                    Message = $"Language with ID '{languageId}' does not exist"
                }));
            }

            GetTranslationsByLanguageQuery translationsQuery = new GetTranslationsByLanguageQuery
            {
                LanguageId = languageId,
                Pattern    = model.Pattern
            };

            IDictionary <string, string> translations = await _mediator.Send(translationsQuery, cancellationToken);

            return(Ok(translations));
        }
コード例 #2
0
        public async Task GetTranslationsByLanguageQueryHandler_ShouldReturnEmptyDictionary_WhenLanguageDoesNotExist()
        {
            // Arrange
            GetTranslationsByLanguageQuery request = new GetTranslationsByLanguageQuery {
                LanguageId = 8917
            };

            Mock <IQueryable <Translation> > translationQueryableMock = Enumerable
                                                                        .Empty <Translation>()
                                                                        .AsQueryable()
                                                                        .BuildMock();

            _unitOfWorkMock
            .Setup(m => m.Translations.GetByLanguage(It.IsAny <int>()))
            .Returns(translationQueryableMock.Object);

            GetTranslationsByLanguageQuery.Handler handler
                = new GetTranslationsByLanguageQuery.Handler(_unitOfWorkMock.Object);

            // Act
            IDictionary <string, string> translations = await handler.Handle(request);

            // Assert
            Assert.NotNull(translations);
            Assert.Empty(translations);
        }
コード例 #3
0
        public override async Task <IEnumerable <TranslationModel> > ExecuteAsync(GetTranslationsByLanguageQuery query, CancellationToken cancellationToken = new CancellationToken())
        {
            using (var database = _databaseProvider.GetDatabaseForDictionary(query.DictionaryId))
            {
                var translations = await database.Translation
                                   .Where(t => t.WordId == query.WordId && (int)t.Language == (int)query.Language)
                                   .ToListAsync(cancellationToken);

                return(translations.Select(t => t.Map <Translation, TranslationModel>()));
            }
        }
コード例 #4
0
        public override async Task <GetTranslationsForLanguageRequest> HandleAsync(GetTranslationsForLanguageRequest command, CancellationToken cancellationToken = new CancellationToken())
        {
            var query = new GetTranslationsByLanguageQuery
            {
                DictionaryId = command.DictionaryId,
                WordId       = command.WordId,
                Language     = command.Language
            };
            var result = await _queryProcessor.ExecuteAsync(query, cancellationToken);

            command.Result = result.Select(t => _translationRenderer.Render(t, command.DictionaryId));

            return(await base.HandleAsync(command, cancellationToken));
        }
コード例 #5
0
        public async Task GetTranslationsByLanguageQueryHandler_ShouldReturnTranslationDictionary_WhenLanguageExistsAndPatternMatches()
        {
            // Arrange
            GetTranslationsByLanguageQuery request = new GetTranslationsByLanguageQuery {
                LanguageId = 1, Pattern = "key"
            };

            IEnumerable <Translation> expectedTranslations = new[]
            {
                new Translation {
                    TranslationId = 1, Key = "key", Value = "value"
                }
            };

            Mock <IQueryable <Translation> > translationQueryableMock = expectedTranslations
                                                                        .AsQueryable()
                                                                        .BuildMock();

            _unitOfWorkMock
            .Setup(m => m.Translations.GetByLanguage(It.IsAny <int>(), It.IsAny <string>()))
            .Returns(translationQueryableMock.Object);

            GetTranslationsByLanguageQuery.Handler handler
                = new GetTranslationsByLanguageQuery.Handler(_unitOfWorkMock.Object);

            // Act
            IDictionary <string, string> translations = await handler.Handle(request);

            // Assert
            Assert.NotNull(translations);
            Assert.NotEmpty(translations);
            Assert.Single(translations);

            Assert.Equal("key", translations.First().Key);
            Assert.Equal("value", translations.First().Value);
        }
コード例 #6
0
 public override async Task <IEnumerable <TranslationModel> > ExecuteAsync(GetTranslationsByLanguageQuery query, CancellationToken cancellationToken = new CancellationToken())
 {
     return(await _apiClient.Get <IEnumerable <TranslationModel> >($"api/dictionaries/{query.DictionaryId}/words/{query.WordId}/translations/languages/{query.Language}"));
 }