Beispiel #1
0
        [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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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));
        }