public async Task <IActionResult> Create([FromBody] ApiGeoTaskCreateCommand task) { try { var currentPrincipal = HttpContext.User; var currentUserName = currentPrincipal?.Identity?.Name; using var logScope = Logger.BeginScope("{User}", currentUserName); Logger.LogInformation(ApiLogEvent.ApiRequest, "Get Create Task Command {Command}", task.ToDictionary()); var query = task.ToAppGeoTaskCreateCommand(currentPrincipal); var result = await Mediator.Send(query).ConfigureAwait(false); if (result is null || !result.Success) { Logger.LogWarning(ApiLogEvent.ApiErrorResponse, "Create Task Command error response. Error={Error}.", result?.Errors); return(BadRequest()); } return(CreatedAtAction(nameof(Get), new { id = result.Id }, result.Id)); } catch (Exception ex) when(Logger.WriteScopeWhenException(ApiLogEvent.ApiErrorResponse, ex)) { return(BadRequest()); } }
public static GeoTaskCreateCommand ToAppGeoTaskCreateCommand (this ApiGeoTaskCreateCommand from, ClaimsPrincipal currentPrincipal) { if (from is null) { return(null); } var to = new GeoTaskCreateCommand { Description = from.Description, PlanFinishAt = from.PlanFinishAt, PlanStartAt = from.PlanStartAt, ProjectId = from.ProjectId, ResponsibleActorId = from.ResponsibleActorId, Title = from.Title, CurrentPrincipal = currentPrincipal, }; to.AssistentActorsIds.AddRange(from.AssistentActorsIds); to.GeosIds.AddRange(from.GeosIds); to.ObserverActorsIds.AddRange(from.ObserverActorsIds); return(to); }
public async Task CreateReturnsCreatedAtActionWhenSuccessAnswerAsync() { // Arrange var query = new ApiGeoTaskCreateCommand() { Title = "Test GeoTask" }; var newId = "0000000000000000"; var mediator = new Mock <IMediator>(); mediator.Setup(x => x.Send(It.IsAny <GeoTaskCreateCommand>(), It.IsAny <CancellationToken>())) .ReturnsAsync( new CreateResult(newId)) .Verifiable("Query was not sent."); var controller = BuildController(mediator); // Act var answer = await controller.Create(query); // Assert Assert.IsType <CreatedAtActionResult>(answer); Assert.Equal(newId, ((CreatedAtActionResult)answer).Value); mediator.Verify(x => x.Send(It.IsAny <GeoTaskCreateCommand>(), It.IsAny <CancellationToken>())); }
public static Dictionary <string, object> ToDictionary (this ApiGeoTaskCreateCommand from) { if (from is null) { return(null); } return(new Dictionary <string, object> { { "AssistentActorsIds", string.Join(',', from.AssistentActorsIds) }, { "Description", from.Description }, { "GeosIds", string.Join(',', from.GeosIds) }, { "ObserverActorsIds", string.Join(',', from.ObserverActorsIds) }, { "PlanFinishAt", from.PlanFinishAt }, { "PlanStartAt", from.PlanStartAt }, { "ProjectId", from.ProjectId }, { "ResponsibleActorId", from.ResponsibleActorId }, { "Title", from.Title }, }); }
public async Task CreateReturnsBadResultWhenNotSuccessAnswerAsync() { // Arrange var query = new ApiGeoTaskCreateCommand() { Title = "Test GeoTask" }; var mediator = new Mock <IMediator>(); mediator.Setup(x => x.Send(It.IsAny <GeoTaskCreateCommand>(), It.IsAny <CancellationToken>())) .ReturnsAsync( new CreateResult(new string[] { "Error" })) .Verifiable("Query was not sent."); var controller = BuildController(mediator); // Act var answer = await controller.Create(query); // Assert Assert.IsType <BadRequestResult>(answer); mediator.Verify(x => x.Send(It.IsAny <GeoTaskCreateCommand>(), It.IsAny <CancellationToken>())); }