public IHttpActionResult Post([FromBody] OrderPostDto orders) { var order = new Order { CustomerId = User.Identity.GetUserId(), OrderDate = DateTime.Now }; if (orders.OrderItems.Count != orders.OrderItems .Select(oi => oi.ItemId) .Distinct() .Count() ) { return(BadRequest("Items should be unique.")); } var orderItems = new Collection <OrderItem>(); foreach (var orderItemDto in orders.OrderItems) { var item = _unitOfWork.Items.GetItemById(orderItemDto.ItemId); if (item == null) { return(NotFound()); } if (item.Quantity < orderItemDto.Quantity) { return(BadRequest($"Not enough stock for '{item.Name}.'")); } var orderItem = new OrderItem { ItemId = orderItemDto.ItemId, Order = order, Price = item.Price, Quantity = orderItemDto.Quantity, LinePrice = orderItemDto.Quantity * item.Price }; orderItems.Add(orderItem); item.Quantity -= orderItemDto.Quantity; } order.OrderItems = orderItems; order.TotalPrice = orderItems.Sum(oi => oi.LinePrice); _unitOfWork.Orders.Add(order); _unitOfWork.Complete(); return(CreatedAtRoute("GetOrder", new { order.Id }, _unitOfWork.Orders.GetOrder(order.Id, User.Identity.GetUserId()) )); }
public string PostOrder([FromBody] OrderPostDto newOrder) { try { var createdId = _orderService.PostOrder(newOrder); return($"Order {createdId} successfully created."); } catch { return("Error creating new order."); } }
public Guid PostOrder(OrderPostDto newOrderDto) { Order newOrder = new Order() { Id = Guid.NewGuid(), CustomerId = newOrderDto.CustomerId, Canceled = newOrderDto.Canceled, OrderObject = newOrderDto.OrderObject, Amount = newOrderDto.Amount }; _orderRepository.orders.Add(newOrder); return(newOrder.Id); }
public void Post_NotEnoughStock_ShouldReturnBadRequest() { var dto = new OrderPostDto { OrderItems = new Collection <OrderItemPostDto> { new OrderItemPostDto() { ItemId = _itemId, Quantity = _quantity + 1 } } }; var result = _controller.Post(dto); result.Should().BeOfType <BadRequestErrorMessageResult>(); }
public void Post_NoItemWithGivenIdExists_ShouldReturnNotFound() { var dto = new OrderPostDto { OrderItems = new Collection <OrderItemPostDto> { new OrderItemPostDto() { ItemId = _itemId + 1, Quantity = _quantity - 1 } } }; var result = _controller.Post(dto); result.Should().BeOfType <NotFoundResult>(); }
public void Post_ValidRequest_ShouldReturnCreated() { var dto = new OrderPostDto { OrderItems = new Collection <OrderItemPostDto> { new OrderItemPostDto() { ItemId = _itemId, Quantity = _quantity - 1 } } }; var result = _controller.Post(dto); result.Should().BeOfType <CreatedAtRouteNegotiatedContentResult <OrderDto> >(); }
public void TestPost() { //arrange var orderPostDto = new OrderPostDto() { CustomerId = Guid.Parse("c9820ad9-22d9-4ab8-b291-6a8722656ebb"), Canceled = false, OrderObject = "book", Amount = 3 }; var createdId = _orderService.PostOrder(orderPostDto); var createdOrder = _orderService.GetOrder(createdId); Assert.Equal(orderPostDto.CustomerId, createdOrder.CustomerId); Assert.Equal(orderPostDto.Canceled, createdOrder.Canceled); Assert.Equal(orderPostDto.OrderObject, createdOrder.OrderObject); Assert.Equal(orderPostDto.Amount, createdOrder.Amount); }
public IActionResult AddNewOrder([FromBody] OrderPostDto orderDto) { try { if (orderDto == null) { return(BadRequest("A new order cannot be null.")); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } orderDto.OrderItems = SetUnitPrices(orderDto.OrderItems); var newOrderNumber = Guid.NewGuid().ToString(); var order = new Order() { CustomerId = orderDto.CustomerId, OrderDate = DateTime.Now, OrderNumber = newOrderNumber.Substring(newOrderNumber.Length - 7, 7), OrderItems = Mapper.Map <ICollection <OrderItem> >(orderDto.OrderItems), TotalAmount = CalculatePrice(orderDto.OrderItems, orderDto.Discount) }; _repo.addNewOrder(order); if (!_repo.Save()) { return(StatusCode(500, "An error occured while creating the order.")); } return(Ok(Mapper.Map <OrderDto>(order))); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
public void Post_MultipleSameItem_ShouldReturnBadRequest() { var dto = new OrderPostDto { OrderItems = new Collection <OrderItemPostDto> { new OrderItemPostDto() { ItemId = _itemId, Quantity = 1 }, new OrderItemPostDto() { ItemId = _itemId, Quantity = 2 } } }; var result = _controller.Post(dto); result.Should().BeOfType <BadRequestErrorMessageResult>(); }