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); }
private static CartRuleUsage MakeMockCartRuleUsage(User user, Coupon coupon) { var cartRule = new CartRuleUsage { UserId = user.Id, CouponId = coupon.Id }; return(cartRule); }
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"); } }