private static DeliveryModel GenerateDeliveryFromRequest(Delivery delivery) { var deliveryModel = new DeliveryModel { AccessWindow = new AccessWindow { StartTime = DateTime.Now.AddMinutes(1), EndTime = DateTime.Now.AddHours(2).AddMinutes(1) }, Recipient = new Recipient { Name = delivery.Recipient.Name, Address = delivery.Recipient.Address, Email = delivery.Recipient.Email, PhoneNumber = delivery.Recipient.PhoneNumber }, Order = new Order { OrderNumber = delivery.Order.OrderNumber, Sender = delivery.Order.Sender } }; return(deliveryModel); }
public async Task Should_return_CreatedAtRoute_when_delivery_order_does_not_exist() { var delivery = new Delivery { Order = new Order { OrderNumber = "OrderNumber", Sender = "Sender" }, Recipient = new Recipient() }; _service.Setup(s => s.CreateAsync(It.IsAny <Domain.Models.Delivery>())).Returns(() => Task.CompletedTask); var subject = this.CreateSubject(); var result = await subject.Create(delivery); result.ShouldBeOfType <CreatedAtRouteResult>(); }
public async Task <IActionResult> Create([FromBody] Delivery delivery) { try { var deliveryModel = GenerateDeliveryFromRequest(delivery); await _service.CreateAsync(deliveryModel); return(CreatedAtRoute("GetDelivery", new { id = deliveryModel.Id }, deliveryModel)); } catch (OrderAlreadyDeliveredException e) { _logger.LogWarning("Order number {OrderNumber} has already been delivered {Id}", delivery.Order.OrderNumber, e.DeliveryId); var error = new ErrorDetail("order_already_delivered", $"Order number {delivery.Order.OrderNumber} has already been delivered - {e.DeliveryId}"); return(Conflict(error)); } }
public async Task Should_return_Conflicted_when_delivery_order_exist() { var delivery = new Delivery { Order = new Order(), Recipient = new Recipient() }; _service .Setup(s => s.CreateAsync(It.IsAny <Domain.Models.Delivery>())) .Returns(Task.FromException(new OrderAlreadyDeliveredException("id"))); var subject = this.CreateSubject(); var result = await subject.Create(delivery); result.ShouldBeOfType <ConflictObjectResult>(); var value = ActionResultHelper.GetObject <ErrorDetail>(result); value.ErrorCode.ShouldBe("order_already_delivered"); }