Пример #1
0
        private static CouponService MakeMockCouponService(User user, Coupon coupon, CartRuleUsage cartRuleUsage)
        {
            var coupons = new List <Coupon> {
                coupon
            }.AsQueryable();

            var cartRules = new List <CartRuleUsage> {
                cartRuleUsage
            }.AsQueryable();

            Mock <DbSet <Coupon> >        couponMockSet = BuildMockSetForCoupon(coupons);
            Mock <DbSet <CartRuleUsage> > cartRuleUsageMockSet = BuildMockSetForCartRuleUsage(cartRules);
            Mock <DbSet <Product> >       productsMockSet = BuildMockSetForProduct(MakeMockProducts().AsQueryable());

            var contextOptions = new DbContextOptions <SimplDbContext>();
            var mockContext    = new Mock <SimplDbContext>(contextOptions);

            mockContext.Setup(c => c.Set <Coupon>()).Returns(couponMockSet.Object);
            mockContext.Setup(c => c.Set <CartRuleUsage>()).Returns(cartRuleUsageMockSet.Object);
            mockContext.Setup(c => c.Set <Product>()).Returns(productsMockSet.Object);

            var mockWorkContext = new Mock <IWorkContext>();

            mockWorkContext.Setup(x => x.GetCurrentUser()).Returns(Task.FromResult(user));

            var couponRepository    = new Repository <Coupon>(mockContext.Object);
            var cartUsageRepository = new Repository <CartRuleUsage>(mockContext.Object);
            var productRepository   = new Repository <Product>(mockContext.Object);


            var couponService = new CouponService(couponRepository, cartUsageRepository, productRepository, mockWorkContext.Object);

            return(couponService);
        }
Пример #2
0
        private static CartRuleUsage MakeMockCartRuleUsage(User user, Coupon coupon)
        {
            var cartRule = new CartRuleUsage
            {
                UserId   = user.Id,
                CouponId = coupon.Id
            };

            return(cartRule);
        }
Пример #3
0
        public void AddCouponUsage(long userId, long orderId, CouponValidationResult couponValidationResult)
        {
            if (!couponValidationResult.Succeeded || couponValidationResult.CartRule == null)
            {
                return;
            }

            CartRuleUsage couponUsage;

            switch (couponValidationResult.CartRule.RuleToApply)
            {
            case "cart_fixed":
                couponUsage = new CartRuleUsage
                {
                    UserId     = userId,
                    OrderId    = orderId,
                    CouponId   = couponValidationResult.CouponId,
                    CartRuleId = couponValidationResult.CartRule.Id
                };

                _cartRuleUsageRepository.Add(couponUsage);
                break;

            case "by_percent":
                foreach (var item in couponValidationResult.DiscountedProducts)
                {
                    for (var i = 0; i < item.Quantity; i++)
                    {
                        couponUsage = new CartRuleUsage
                        {
                            UserId     = userId,
                            OrderId    = orderId,
                            CouponId   = couponValidationResult.CouponId,
                            CartRuleId = couponValidationResult.CartRule.Id
                        };

                        _cartRuleUsageRepository.Add(couponUsage);
                    }
                }

                break;

            default:
                throw new InvalidOperationException($"{couponValidationResult.CartRule.RuleToApply} is not supported");
            }
        }