public async Task <IActionResult> Get
            ([FromQuery] ApiGeoTaskListQuery request)
        {
            try
            {
                var currentPrincipal = HttpContext.User;
                var currentUserName  = currentPrincipal?.Identity?.Name;
                using var logScope = Logger.BeginScope("{User}",
                                                       currentUserName);
                Logger.LogInformation(ApiLogEvent.ApiRequest,
                                      "Get task collection request {query}",
                                      request.ToDictionary());

                var query  = request.ToGeoTaskListQuery(currentPrincipal);
                var result = await Mediator.Send(query);

                if (result is null || !result.Success)
                {
                    Logger.LogWarning(ApiLogEvent.ApiErrorResponse,
                                      "Get task collection error response. Error={Error}.",
                                      result?.Errors);
                    return(BadRequest());
                }
                return(Ok(result.ToApiGeoTaskList()));
            }
            catch (Exception ex)
                when(Logger.WriteScopeWhenException
                         (ApiLogEvent.ApiErrorResponse, ex))
                {
                    return(BadRequest());
                }
        }
        public static GeoTaskListQuery ToGeoTaskListQuery
            (this ApiGeoTaskListQuery from, ClaimsPrincipal currentPrincipal)
        {
            if (from is null)
            {
                return(null);
            }

            var result = new GeoTaskListQuery
            {
                ActorId          = from.ActorId,
                ActorRoleMask    = from.ActorRoleMask,
                Archived         = from.Archived,
                CurrentPrincipal = currentPrincipal,
                Limit            = from.Limit,
                Offset           = from.Offset,
                ProjectId        = from.ProjectId,
                TaskStatusMask   = from.TaskStatusMask,
                СontainsKeyWords = from.ContainsKeyWords
            };

            if (TimeSpan.TryParse(from.MaxTimeToDeadLine,
                                  out var deadlineTimeSpan))
            {
                result.MaxTimeToDeadLine = deadlineTimeSpan;
            }

            return(result);
        }
Beispiel #3
0
        public async Task GetListReturnsOkResultWhenSuccessAnswerAsync()
        {
            // Arrange
            var appEntities = new List <GeoTask>();
            var apiEntities = new List <ApiGeoTask>();

            appEntities.AddRange(Enumerable.Range(0, 5)
                                 .Select(x => new GeoTask()
            {
                Id = x.ToString()
            }));
            var query = new ApiGeoTaskListQuery();

            apiEntities.AddRange(Enumerable.Range(0, 5)
                                 .Select(x => new ApiGeoTask()
            {
                Id = x.ToString()
            }));
            var expectedAnswer = new ApiList <ApiGeoTask>()
            {
                TotalCount = apiEntities.Count
            };

            expectedAnswer.Entities.AddRange(apiEntities);
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.Send(It.IsAny <GeoTaskListQuery>(),
                                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(
                new ListResponse <GeoTask>(appEntities, appEntities.Count))
            .Verifiable("Query was not sent.");
            var controller = BuildController(mediator);

            // Act
            var answer = await controller.Get(query);

            // Assert
            Assert.IsType <OkObjectResult>(answer);
            Assert.Equal(expectedAnswer.Entities.Select(x => x.Id),
                         (((OkObjectResult)answer).Value as ApiList <ApiGeoTask>)
                         .Entities.Select(x => x.Id));
            mediator.Verify(x => x.Send(It.IsAny <GeoTaskListQuery>(),
                                        It.IsAny <CancellationToken>()));
        }
Beispiel #4
0
        public async Task GetListReturnsBadResultWhenNotSuccessAnswerAsync()
        {
            // Arrange
            var query    = new ApiGeoTaskListQuery();
            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.Send(It.IsAny <GeoTaskListQuery>(),
                                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(
                new ListResponse <GeoTask>(new string[] { "Error answer" }))
            .Verifiable("Query was not sent.");
            var controller = BuildController(mediator);

            // Act
            var answer = await controller.Get(query);

            // Assert
            Assert.IsType <BadRequestResult>(answer);
            mediator.Verify(x => x.Send(It.IsAny <GeoTaskListQuery>(),
                                        It.IsAny <CancellationToken>()));
        }
        public static Dictionary <string, object> ToDictionary
            (this ApiGeoTaskListQuery from)
        {
            if (from is null)
            {
                return(null);
            }

            return(new Dictionary <string, object>
            {
                { nameof(from.ActorId), from.ActorId },
                { nameof(from.ActorRoleMask), from.ActorRoleMask },
                { nameof(from.Archived), from.Archived },
                { nameof(from.Limit), from.Limit },
                { nameof(from.MaxTimeToDeadLine), from.MaxTimeToDeadLine },
                { nameof(from.Offset), from.Offset },
                { nameof(from.ProjectId), from.ProjectId },
                { nameof(from.TaskStatusMask), from.TaskStatusMask },
                { nameof(from.ContainsKeyWords), from.ContainsKeyWords },
                { nameof(from.GeoId), from.GeoId }
            });
        }