[InlineData(9, 10, false, OrderFormRestrictedView)] // Is not owner, cannot edit public async void GetOrderFormEdit_WithSellerUser_ShouldReturnView(long userId, long ownerId, bool canEditOrder, string expectedView) { // Arrange const int OrderId = 1; var mockUser = new Mock <ClaimsPrincipal>(); mockUser.Setup(user => user.IsInRole(RoleName.Admin)).Returns(false); _controller.ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext { User = mockUser.Object } }; _mockWorkContext.Setup(context => context.GetCurrentUser()).Returns(Task.FromResult(new User { Id = userId })); var order = new GetOrderVm() { CanEdit = canEditOrder, CreatedById = ownerId }; var orderResult = ActionFeedback <GetOrderVm> .Succeed(order); _mockOrderService.Setup(service => service.GetOrderAsync(OrderId)).Returns(Task.FromResult(orderResult)); // Action var result = await _controller.GetOrderFormEdit(OrderId); // Assert var viewResult = Assert.IsType <ViewResult>(result); Assert.Equal(expectedView, viewResult.ViewName); }
public async Task <(IList <GetOrderVm>, string)> UpdateStatusesAsync(IList <long> orderIds, OrderStatus status) { var orders = await _orderRepository.Query() .Include(item => item.OrderItems).ThenInclude(item => item.Product) .Where(item => orderIds.Contains(item.Id)) .ToListAsync(); var result = new List <GetOrderVm>(); foreach (var order in orders) { if (!CanEditOrder(order)) { continue; } await UpdateStatusAndOrderTotalAsync(order, status); await _orderRepository.SaveChangesAsync(); var orderVm = new GetOrderVm { OrderId = order.Id, SubTotal = order.SubTotal, OrderTotal = order.OrderTotal, OrderTotalCost = order.OrderTotalCost, OrderStatus = order.OrderStatus, CompletedOn = order.CompletedOn }; result.Add(orderVm); } return(result, null); }
public async Task <(GetOrderVm, string)> UpdateStatusAsync(long orderId, OrderStatus status) { var order = await _orderRepository.Query() .Include(item => item.OrderItems).ThenInclude(item => item.Product) .FirstOrDefaultAsync(item => item.Id == orderId); if (order == null) { return(null, $"Cannot find order with Id: {orderId}"); } if (!CanEditOrder(order)) { return(null, $"Order has been completed already!"); } await UpdateStatusAndOrderTotalAsync(order, status); await _orderRepository.SaveChangesAsync(); var result = new GetOrderVm { OrderId = order.Id, SubTotal = order.SubTotal, OrderTotal = order.OrderTotal, OrderTotalCost = order.OrderTotalCost, OrderStatus = order.OrderStatus, CompletedOn = order.CompletedOn }; return(result, null); }
public async Task <ActionFeedback <GetOrderVm> > GetOrderAsync(long orderId) { var order = await _orderRepository.QueryAsNoTracking() .Include(item => item.OrderItems).ThenInclude(item => item.Product).ThenInclude(item => item.ThumbnailImage) .FirstOrDefaultAsync(item => item.Id == orderId); if (order == null) { return(ActionFeedback <GetOrderVm> .Fail($"Cannot find order with id {orderId}")); } var user = await _workContext.GetCurrentUser(); var result = new GetOrderVm { OrderStatus = order.OrderStatus, CustomerId = order.CustomerId, SubTotal = order.SubTotal, SubTotalCost = order.OrderItems.Sum(item => item.Quantity * item.Product.Cost), ShippingAmount = order.ShippingAmount, ShippingCost = order.ShippingCost, Discount = order.Discount, OrderTotal = order.OrderTotal, OrderTotalCost = order.OrderTotalCost, TrackingNumber = order.TrackingNumber, CreatedById = order.CreatedById, VendorId = order.VendorId, Note = order.Note, IsShopeeOrder = order.IsShopeeOrder, OrderItems = order.OrderItems .Select(item => new OrderItemVm { Id = item.Id, ProductId = item.ProductId, ProductName = item.Product.Name, ProductSku = item.Product.Sku, ProductCost = item.Product.Cost, OriginalPrice = item.Product.Price, ProductPrice = item.ProductPrice, Stock = item.Product.Stock, ProductImage = _mediaService.GetThumbnailUrl(item.Product.ThumbnailImage), Quantity = item.Quantity }) .OrderBy(item => item.Id).ToList(), PaymentProviderId = order.PaymentProviderId, PaymentProviderList = (await _paymentProviderService.GetListAsync(true)) .Select(item => new SelectListItem { Value = item.Id.ToString(), Text = item.Description }).ToList(), CanEdit = CanEditOrder(order) }; return(ActionFeedback <GetOrderVm> .Succeed(result)); }