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); }
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>())); }
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 } }); }