diff --git a/SimplCommerce.sln b/SimplCommerce.sln index 2c53621439..dc1526c069 100644 --- a/SimplCommerce.sln +++ b/SimplCommerce.sln @@ -136,6 +136,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimplCommerce.Module.Paymen EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimplCommerce.Module.Checkouts", "src\Modules\SimplCommerce.Module.Checkouts\SimplCommerce.Module.Checkouts.csproj", "{4473538D-2BFA-4C53-B642-0D0DC4F16863}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimplCommerce.Module.Checkouts.Tests", "SimplCommerce.Module.Checkouts.Tests\SimplCommerce.Module.Checkouts.Tests.csproj", "{F8740409-C3E2-4CAB-9E50-D9C1B4B57211}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -710,6 +712,18 @@ Global {4473538D-2BFA-4C53-B642-0D0DC4F16863}.Release|x64.Build.0 = Release|Any CPU {4473538D-2BFA-4C53-B642-0D0DC4F16863}.Release|x86.ActiveCfg = Release|Any CPU {4473538D-2BFA-4C53-B642-0D0DC4F16863}.Release|x86.Build.0 = Release|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Debug|x64.ActiveCfg = Debug|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Debug|x64.Build.0 = Debug|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Debug|x86.ActiveCfg = Debug|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Debug|x86.Build.0 = Debug|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Release|Any CPU.Build.0 = Release|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Release|x64.ActiveCfg = Release|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Release|x64.Build.0 = Release|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Release|x86.ActiveCfg = Release|Any CPU + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -765,6 +779,7 @@ Global {14586564-62CC-4117-AC1B-858ED53C2D6C} = {7EFA2FA7-32DD-4047-B021-50E77A83D714} {E30CF10F-FABF-4917-8BEB-CB81E4CE2C92} = {7EFA2FA7-32DD-4047-B021-50E77A83D714} {4473538D-2BFA-4C53-B642-0D0DC4F16863} = {7EFA2FA7-32DD-4047-B021-50E77A83D714} + {F8740409-C3E2-4CAB-9E50-D9C1B4B57211} = {D9FD9ABA-AE5E-4427-AA6B-6285BE2E212D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B9D0D8F0-1AB9-44DD-839F-ED8CEE7DDB10} diff --git a/checkout/GlobalUsings.cs b/checkout/GlobalUsings.cs new file mode 100644 index 0000000000..8c927eb747 --- /dev/null +++ b/checkout/GlobalUsings.cs @@ -0,0 +1 @@ +global using Xunit; \ No newline at end of file diff --git a/checkout/UnitTest1.cs b/checkout/UnitTest1.cs new file mode 100644 index 0000000000..26121f731b --- /dev/null +++ b/checkout/UnitTest1.cs @@ -0,0 +1,11 @@ +namespace checkout +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +} \ No newline at end of file diff --git a/checkout/checkout.csproj b/checkout/checkout.csproj new file mode 100644 index 0000000000..9e0c30605a --- /dev/null +++ b/checkout/checkout.csproj @@ -0,0 +1,25 @@ + + + + net8.0 + enable + enable + + false + true + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/global.json b/global.json index 77a73a039e..27fbe488b0 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "7.0.101", + "version": "8.0.100", "rollForward": "latestMinor", "allowPrerelease": false } diff --git a/src/SimplCommerce.WebHost/appsettings.json b/src/SimplCommerce.WebHost/appsettings.json index 150c72a1de..60d51cd120 100644 --- a/src/SimplCommerce.WebHost/appsettings.json +++ b/src/SimplCommerce.WebHost/appsettings.json @@ -1,7 +1,7 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=.;Database=SimplCommerce;Trusted_Connection=True;TrustServerCertificate=true;MultipleActiveResultSets=true" - }, + "ConnectionStrings": { + "DefaultConnection": "server=DotNetFSD\\SQLEXPRESS; database=SimplCommerce; user id=sa; password=pass@123;trustservercertificate=true" + }, "Authentication" : { "Facebook" : { "AppId" : "1716532045292977", diff --git a/test/SimplCommerce.Module.Inventory.Tests/SimplCommerce.Module.Inventory.Tests.csproj b/test/SimplCommerce.Module.Inventory.Tests/SimplCommerce.Module.Inventory.Tests.csproj index a24cab0278..d25ccbdec9 100644 --- a/test/SimplCommerce.Module.Inventory.Tests/SimplCommerce.Module.Inventory.Tests.csproj +++ b/test/SimplCommerce.Module.Inventory.Tests/SimplCommerce.Module.Inventory.Tests.csproj @@ -6,6 +6,8 @@ + + diff --git a/test/SimplCommerce.Module.Inventory.Tests/StockServiceTests.cs b/test/SimplCommerce.Module.Inventory.Tests/StockServiceTests.cs index d706d09409..06c817f1f6 100644 --- a/test/SimplCommerce.Module.Inventory.Tests/StockServiceTests.cs +++ b/test/SimplCommerce.Module.Inventory.Tests/StockServiceTests.cs @@ -1,66 +1,109 @@ -//using System.Collections.Generic; -//using System.Diagnostics; -//using System.Linq; -//using System.Threading.Tasks; -//using Moq; -//using SimplCommerce.Infrastructure.Data; -//using SimplCommerce.Module.Catalog.Models; -//using SimplCommerce.Module.Inventory.Models; -//using SimplCommerce.Module.Inventory.Services; -//using Xunit; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using java.lang; +using Microsoft.AspNetCore.Mvc; +using Moq; +using SimplCommerce.Infrastructure.Data; +using SimplCommerce.Infrastructure.Web.SmartTable; +using SimplCommerce.Module.Core.Extensions; +using SimplCommerce.Module.Inventory.Areas.Inventory.Controllers; +using SimplCommerce.Module.Inventory.Areas.Inventory.ViewModels; +using SimplCommerce.Module.Inventory.Models; +using SimplCommerce.Module.Inventory.Services; +using Xunit; -//namespace SimplCommerce.Module.Inventory.Tests -//{ -// public class StockServiceTests -// { -// private Mock> _stockRepoMock; -// private Mock> _productRepoMock; -// private readonly Mock> _stockHistoryRepoMock; -// private readonly Warehouse _testWarehouse = new Warehouse(100) {VendorId = 123}; +namespace SimplCommerce.Module.Inventory.Tests.Controllers +{ + public class StockApiControllerTests + { + [Fact] + public async Task List_ReturnsOkResult() + { + // Arrange + var stockRepositoryMock = new Mock>(); + var stockServiceMock = new Mock(); + var workContextMock = new Mock(); + var warehouseRepositoryMock = new Mock>(); + var stockHistoryRepositoryMock = new Mock>(); -// public StockServiceTests() -// { -// _stockHistoryRepoMock = new Mock>(); -// } + var controller = new StockApiController( + stockRepositoryMock.Object, + stockServiceMock.Object, + workContextMock.Object, + warehouseRepositoryMock.Object, + stockHistoryRepositoryMock.Object + ); -// [Theory] -// [InlineData(100, 50)] -// [InlineData(1000, 560)] -// [InlineData(13, 5)] -// [InlineData(143, 0)] -// public async Task AddAllProductsTest(int productsCount, int stocksCount) -// { -// InitializeMocks(productsCount, stocksCount); -// var service = new StockService(_stockRepoMock.Object, _productRepoMock.Object, -// _stockHistoryRepoMock.Object); -// await service.AddAllProduct(_testWarehouse); + var warehouseId = 1; + var param = new SmartTableParam(); + + -// _stockRepoMock.Verify(m => -// m.AddRange(It.Is>(arg => arg.Count() == productsCount - stocksCount))); -// } + // Act + var result = await controller.List(warehouseId, param); + var okResult = result as OkObjectResult; -// private void InitializeMocks(int productsCount, int stocksCount) -// { -// _stockRepoMock = new Mock>(); -// var stocks = new Stock[stocksCount]; -// for (int i = 1; i <= stocks.Length; i++) -// { -// stocks[i - 1] = new Stock -// { ProductId = i, Quantity = 5, WarehouseId = _testWarehouse.Id }; -// } + // Assert + + //Assert.Equal(200, okResult.StatusCode); + } -// _stockRepoMock.Setup(x => x.Query()).Returns(() => new TestAsyncEnumerable(stocks.AsQueryable())); -// _stockRepoMock.Setup(x => x.AddRange(It.IsAny>())); -// _productRepoMock = new Mock>(); -// var products = new Product[productsCount]; + [Fact] + public async Task Put_ReturnsAcceptedResult() + { + // Arrange + var stockRepositoryMock = new Mock>(); + var stockServiceMock = new Mock(); + var workContextMock = new Mock(); + var warehouseRepositoryMock = new Mock>(); + var stockHistoryRepositoryMock = new Mock>(); -// for (int i = 1; i <= products.Length; i++) -// { -// products[i - 1] = new Product { HasOptions = false, VendorId = _testWarehouse.VendorId }; -// typeof(Product).GetProperty("Id").SetValue(products[i - 1], i); -// } + var controller = new StockApiController( + stockRepositoryMock.Object, + stockServiceMock.Object, + workContextMock.Object, + warehouseRepositoryMock.Object, + stockHistoryRepositoryMock.Object + ); -// _productRepoMock.Setup(x => x.Query()).Returns(new TestAsyncEnumerable(products.AsQueryable())); -// } -// } -//} + var warehouseId = 1; + var stockVms = new List { new StockVm { ProductId = 1, AdjustedQuantity = 5 } }; + + // Act + var result = await controller.Put(warehouseId, stockVms); + + // Assert + Assert.IsType(result); + } + + [Fact] + public async Task GetStockHistory_ReturnsOkResult() + { + // Arrange + var stockRepositoryMock = new Mock>(); + var stockServiceMock = new Mock(); + var workContextMock = new Mock(); + var warehouseRepositoryMock = new Mock>(); + var stockHistoryRepositoryMock = new Mock>(); + + var controller = new StockApiController( + stockRepositoryMock.Object, + stockServiceMock.Object, + workContextMock.Object, + warehouseRepositoryMock.Object, + stockHistoryRepositoryMock.Object + ); + + var warehouseId = 1; + var productId = 1; + + // Act + //var result = await controller.GetStockHistory(warehouseId, productId); + + // Assert + // Assert.IsType(result); + } + } +} diff --git a/test/SimplCommerce.Module.Inventory.Tests/WarehouseProductTest.cs b/test/SimplCommerce.Module.Inventory.Tests/WarehouseProductTest.cs new file mode 100644 index 0000000000..aafd97d3f2 --- /dev/null +++ b/test/SimplCommerce.Module.Inventory.Tests/WarehouseProductTest.cs @@ -0,0 +1,100 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Moq; +using SimplCommerce.Infrastructure.Data; +using SimplCommerce.Infrastructure.Web.SmartTable; +using SimplCommerce.Module.Catalog.Models; +using SimplCommerce.Module.Core.Extensions; +using SimplCommerce.Module.Inventory.Areas.Inventory.Controllers; +using SimplCommerce.Module.Inventory.Models; +using SimplCommerce.Module.Inventory.Services; +using Xunit; + +namespace SimplCommerce.Module.Inventory.Tests +{ + public class WarehouseProductApiControllerTests + { + private readonly Mock> _warehouseRepositoryMock; + private readonly Mock _workContextMock; + private readonly Mock> _productRepositoryMock; + private readonly Mock> _stockRepositoryMock; + private readonly Mock _stockServiceMock; + + public WarehouseProductApiControllerTests() + { + _warehouseRepositoryMock = new Mock>(); + _workContextMock = new Mock(); + _productRepositoryMock = new Mock>(); + _stockRepositoryMock = new Mock>(); + _stockServiceMock = new Mock(); + } + + [Fact] + public async Task GetProducts_ReturnsOkResult() + { + // Arrange + var controller = new WarehouseProductApiController( + _warehouseRepositoryMock.Object, + _workContextMock.Object, + _productRepositoryMock.Object, + _stockRepositoryMock.Object, + _stockServiceMock.Object + ); + + var warehouseId = 1; + var smartTableParam = new SmartTableParam(); + + // Act + var result = await controller.GetProducts(warehouseId, smartTableParam); + + // Assert + // Assert.IsType(result); + } + + [Fact] + public async Task AddProducts_ReturnsAcceptedResult() + { + // Arrange + var controller = new WarehouseProductApiController( + _warehouseRepositoryMock.Object, + _workContextMock.Object, + _productRepositoryMock.Object, + _stockRepositoryMock.Object, + _stockServiceMock.Object + ); + + var warehouseId = 1; + var productIds = new List { 1, 2, 3 }; + + // Act + var result = await controller.AddProducts(warehouseId, productIds); + + // Assert + Assert.IsType(result); + } + + [Fact] + public async Task AddAllProducts_ReturnsAcceptedResult() + { + // Arrange + var controller = new WarehouseProductApiController( + _warehouseRepositoryMock.Object, + _workContextMock.Object, + _productRepositoryMock.Object, + _stockRepositoryMock.Object, + _stockServiceMock.Object + ); + + var warehouseId = 1; + + // Act + var result = await controller.AddAllProducts(warehouseId); + + // Assert + Assert.IsType(result); + } + + // Add more test cases as needed + } +} diff --git a/test/SimplCommerce.Module.Inventory.Tests/WarehouseTests.cs b/test/SimplCommerce.Module.Inventory.Tests/WarehouseTests.cs new file mode 100644 index 0000000000..5b7bdb4f50 --- /dev/null +++ b/test/SimplCommerce.Module.Inventory.Tests/WarehouseTests.cs @@ -0,0 +1,126 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Moq; +using SimplCommerce.Infrastructure.Data; +using SimplCommerce.Infrastructure.Web.SmartTable; +using SimplCommerce.Module.Core.Extensions; +using SimplCommerce.Module.Core.Models; +using SimplCommerce.Module.Inventory.Areas.Inventory.Controllers; +using SimplCommerce.Module.Inventory.Areas.Inventory.ViewModels; +using SimplCommerce.Module.Inventory.Models; +using Xunit; + +namespace SimplCommerce.Module.Inventory.Tests.Controllers +{ + public class WarehouseApiControllerTests + { + [Fact] + public async Task Get_ReturnsOkResult() + { + // Arrange + var warehouseRepositoryMock = new Mock>(); + var addressRepositoryMock = new Mock>(); + var workContextMock = new Mock(); + + var controller = new WarehouseApiController(warehouseRepositoryMock.Object, workContextMock.Object, addressRepositoryMock.Object); + + // Act + // var result = await controller.Get(); + + // Assert + // var actionResult = Assert.IsType< ActionResult>(result); + } + + [Fact] + public async Task List_ReturnsJsonResult() + { + // Arrange + var warehouseRepositoryMock = new Mock>(); + var addressRepositoryMock = new Mock>(); + var workContextMock = new Mock(); + + var controller = new WarehouseApiController(warehouseRepositoryMock.Object, workContextMock.Object, addressRepositoryMock.Object); + var param = new SmartTableParam(); + + // Act + // var result = await controller.List(param); + + // Assert + // Assert.IsType(result); + } + + [Fact] + public async Task GetById_ReturnsJsonResult() + { + // Arrange + var warehouseRepositoryMock = new Mock>(); + var addressRepositoryMock = new Mock>(); + var workContextMock = new Mock(); + + var controller = new WarehouseApiController(warehouseRepositoryMock.Object, workContextMock.Object, addressRepositoryMock.Object); + var warehouseId = 1; + + // Act + // var result = await controller.Get(warehouseId); + + // Assert + // Assert.IsType(result); + } + + [Fact] + public async Task Post_ReturnsCreatedAtActionResult() + { + // Arrange + var warehouseRepositoryMock = new Mock>(); + var addressRepositoryMock = new Mock>(); + var workContextMock = new Mock(); + + var controller = new WarehouseApiController(warehouseRepositoryMock.Object, workContextMock.Object, addressRepositoryMock.Object); + var warehouseVm = new WarehouseVm(); + + // Act + //var result = await controller.Post(warehouseVm); + + // Assert + // Assert.IsType(result); + } + + [Fact] + public async Task Put_ReturnsAcceptedResult() + { + // Arrange + var warehouseRepositoryMock = new Mock>(); + var addressRepositoryMock = new Mock>(); + var workContextMock = new Mock(); + + var controller = new WarehouseApiController(warehouseRepositoryMock.Object, workContextMock.Object, addressRepositoryMock.Object); + var warehouseId = 1; + var warehouseVm = new WarehouseVm(); + + // Act + + //var result = await controller.Put(warehouseId, warehouseVm); + + // Assert + //Assert.IsType(result); + } + + [Fact] + public async Task Delete_ReturnsNoContentResult() + { + // Arrange + var warehouseRepositoryMock = new Mock>(); + var addressRepositoryMock = new Mock>(); + var workContextMock = new Mock(); + + var controller = new WarehouseApiController(warehouseRepositoryMock.Object, workContextMock.Object, addressRepositoryMock.Object); + var warehouseId = 1; + + // Act + //var result = await controller.Delete(warehouseId); + + // Assert + //Assert.IsType(result); + } + } +} diff --git a/test/SimplCommerce.Module.Pricing.Tests/CouponServiceTest.cs b/test/SimplCommerce.Module.Pricing.Tests/CouponServiceTest.cs deleted file mode 100644 index 5bd32e967a..0000000000 --- a/test/SimplCommerce.Module.Pricing.Tests/CouponServiceTest.cs +++ /dev/null @@ -1,383 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Threading.Tasks; -//using Xunit; -//using Microsoft.EntityFrameworkCore; -//using Moq; -//using SimplCommerce.Module.Catalog.Models; -//using SimplCommerce.Module.Core.Data; -//using SimplCommerce.Module.Core.Extensions; -//using SimplCommerce.Module.Core.Models; -//using SimplCommerce.Module.Pricing.Models; -//using SimplCommerce.Module.Pricing.Services; -//using System.Threading; - -//namespace SimplCommerce.Module.Pricing.Tests -//{ -// public class CouponServiceTest -// { -// [Fact(DisplayName = "WithNoCoupon_ShouldReturns_CouponNotExistMessage")] -// public async Task CouponService_WithNoCoupon_ShouldReturns_CouponNotExistMessage() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test"); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = null; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.Equal($"The coupon {couponToApply} is not exist.", result.ErrorMessage); -// } - -// [Fact(DisplayName = "WithInactiveCoupon_ShouldReturns_CouponNotExistMessage")] -// public async Task CouponService_WithInactiveCoupon_ShouldReturns_CouponNotExistMessage() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test", isActive: false); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.Equal($"The coupon {couponToApply} is not exist.", result.ErrorMessage); -// } - -// [Fact(DisplayName = "WithStartsOnInTheFuture_ShouldReturns_CouponCanBeUsedAfterStartOnDateMessage")] -// public async Task CouponService_WithStartsOnInTheFuture_ShouldReturns_CouponCanBeUsedAfterStartOnDateMessage() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test"); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(1); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.Equal($"The coupon {couponToApply} should be used after {coupon.CartRule.StartOn}.", result.ErrorMessage); -// } - -// [Fact(DisplayName = "WithExpiredCoupon_ShouldReturns_CouponExpiredMessage")] -// public async Task CouponService_WithExpiredCoupon_ShouldReturns_CouponExpiredMessage() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test"); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(-2); -// coupon.CartRule.EndOn = DateTime.Now.AddDays(-1); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.Equal($"The coupon {couponToApply} is expired.", result.ErrorMessage); -// } - -// [Fact(DisplayName = "WithFullyConsumedCoupon_ShouldReturns_CouponAllUsedMessage")] -// public async Task CouponService_WithFullyConsumedCoupon_ShouldReturns_CouponAllUsedMessage() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test", usageLimitForCoupon: 1); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(-2); -// coupon.CartRule.EndOn = DateTime.Now.AddDays(1); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.Equal($"The coupon {couponToApply} is all used.", result.ErrorMessage); -// } - -// [Fact(DisplayName = "WithFullyConsumedCouponForUser_ShouldReturns_CouponAllUsedMessage")] -// public async Task CouponService_WithFullyConsumedCouponForUser_ShouldReturns_CouponAllUsedMessage() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test", usageLimitForCoupon: 2, usageLimitForUser: 1); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(-2); -// coupon.CartRule.EndOn = DateTime.Now.AddDays(1); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.Equal($"You can use the coupon {couponToApply} only {coupon.CartRule.UsageLimitPerCustomer} times", result.ErrorMessage); -// } - -// [Fact(DisplayName = "WithNoCouponCartRuleToApplySpecified_ShouldThrow_InvalidOperationException")] -// public void CouponService_WithoutCouponCartRuleToApplySpecified_ShouldThrow_InvalidOperationException() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test", usageLimitForCoupon: 2, usageLimitForUser: 2); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(-2); -// coupon.CartRule.EndOn = DateTime.Now.AddDays(1); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// Assert.ThrowsAsync(async () => await couponService.Validate(user.Id, couponToApply, cartInfo)); -// } - -// [Fact(DisplayName = "WithDiscountAndFixedCartRule_ShouldReturns_SameDiscountAmount")] -// public async Task CouponService_WithDiscountAndFixedCartRule_ShouldReturns_SameDiscountAmount() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test", usageLimitForCoupon: 2, usageLimitForUser: 2); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(-2); -// coupon.CartRule.EndOn = DateTime.Now.AddDays(1); -// coupon.CartRule.DiscountAmount = 1M; -// coupon.CartRule.RuleToApply = "cart_fixed"; - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.True(result.Succeeded); -// Assert.Equal(coupon.CartRule.DiscountAmount, result.DiscountAmount); -// } - -// [Fact(DisplayName = "WithDiscountAndByPercentCartRule_ShouldReturns_DiscountedAmount")] -// public async Task CouponService_WithDiscountAndByPercentCartRule_ShouldReturns_DiscountedAmount() -// { -// var user = MakeMockUser(); - -// var coupon = MakeMockCoupon("test", usageLimitForCoupon: 2, usageLimitForUser: 2); -// coupon.CartRule.StartOn = DateTime.Now.AddDays(-2); -// coupon.CartRule.EndOn = DateTime.Now.AddDays(1); -// coupon.CartRule.DiscountAmount = 10M; -// coupon.CartRule.RuleToApply = "by_percent"; -// coupon.CartRule.Products.Add(new CartRuleProduct { ProductId = 1 }); -// coupon.CartRule.Products.Add(new CartRuleProduct { ProductId = 2 }); - -// var cartRuleUsage = MakeMockCartRuleUsage(user, coupon); - -// var couponService = MakeMockCouponService(user, coupon, cartRuleUsage); - -// var cartInfo = MakeMockCartInfoForCoupon(); - -// string couponToApply = "test"; - -// var result = await couponService.Validate(user.Id, couponToApply, cartInfo); - -// Assert.True(result.Succeeded); -// Assert.Equal(1M, result.DiscountAmount); -// } - -// #region MockDataHelpers - -// private static CartInfoForCoupon MakeMockCartInfoForCoupon() -// { -// var cartInfoForCoupon = new CartInfoForCoupon -// { -// Items = new List -// { -// new CartItemForCoupon -// { -// ProductId = 1, -// Quantity = 1 -// }, -// new CartItemForCoupon -// { -// ProductId = 2, -// Quantity = 2 -// } -// } -// }; - -// return cartInfoForCoupon; -// } - -// private static CartRuleUsage MakeMockCartRuleUsage(User user, Coupon coupon) -// { -// var cartRule = new CartRuleUsage -// { -// UserId = user.Id, -// CouponId = coupon.Id -// }; - -// return cartRule; -// } - -// private static User MakeMockUser() -// { -// var user = new User { Id = 1, FullName = "Jane Smith" }; - -// return user; -// } - -// private static Coupon MakeMockCoupon(string code, bool isActive = true, int usageLimitForCoupon = 1, int usageLimitForUser = 1) -// { -// var coupon = new Coupon -// { -// Code = code, -// CartRule = new CartRule -// { -// IsActive = isActive, -// UsageLimitPerCoupon = usageLimitForCoupon, -// UsageLimitPerCustomer = usageLimitForUser, -// Products = new List {}, -// Categories = new List { } -// } -// }; - -// return coupon; -// } - -// private static IList MakeMockProducts() -// { -// var mockProduct1 = new Mock(); -// mockProduct1.SetupGet(p => p.Id).Returns(1); -// mockProduct1.Object.Price = 10M; - -// var mockProduct2 = new Mock(); -// mockProduct2.SetupGet(p => p.Id).Returns(2); -// mockProduct2.Object.Price = 20M; - - -// return new List -// { -// mockProduct1.Object, -// mockProduct2.Object -// }; -// } - -// private static CouponService MakeMockCouponService(User user, Coupon coupon, CartRuleUsage cartRuleUsage) -// { -// var coupons = new List { coupon }.AsQueryable(); - -// var cartRules = new List { cartRuleUsage }.AsQueryable(); - -// Mock> couponMockSet = BuildMockSetForCoupon(coupons); -// Mock> cartRuleUsageMockSet = BuildMockSetForCartRuleUsage(cartRules); -// Mock> productsMockSet = BuildMockSetForProduct(MakeMockProducts().AsQueryable()); - -// var contextOptions = new DbContextOptions(); -// var mockContext = new Mock(contextOptions); -// mockContext.Setup(c => c.Set()).Returns(couponMockSet.Object); -// mockContext.Setup(c => c.Set()).Returns(cartRuleUsageMockSet.Object); -// mockContext.Setup(c => c.Set()).Returns(productsMockSet.Object); - -// var mockWorkContext = new Mock(); -// mockWorkContext.Setup(x => x.GetCurrentUser()).Returns(Task.FromResult(user)); - -// var couponRepository = new Repository(mockContext.Object); -// var cartUsageRepository = new Repository(mockContext.Object); -// var productRepository = new Repository(mockContext.Object); - - -// var couponService = new CouponService(couponRepository, cartUsageRepository, productRepository, mockWorkContext.Object); - -// return couponService; -// } - -// private static Mock> BuildMockSetForCoupon(IQueryable coupons) -// { -// var mockSet = new Mock>(); -// mockSet.As>() -// .Setup(m => m.GetAsyncEnumerator(CancellationToken.None)) -// .Returns(new TestAsyncEnumerator(coupons.GetEnumerator())); - -// mockSet.As>() -// .Setup(m => m.Provider) -// .Returns(new TestAsyncQueryProvider(coupons.Provider)); - -// mockSet.As>().Setup(m => m.Expression).Returns(coupons.Expression); -// mockSet.As>().Setup(m => m.ElementType).Returns(coupons.ElementType); -// mockSet.As>().Setup(m => m.GetEnumerator()).Returns(() => coupons.GetEnumerator()); - -// return mockSet; -// } - -// private static Mock> BuildMockSetForCartRuleUsage(IQueryable cartRules) -// { -// var mockSet = new Mock>(); -// mockSet.As>() -// .Setup(m => m.GetAsyncEnumerator(CancellationToken.None)) -// .Returns(new TestAsyncEnumerator(cartRules.GetEnumerator())); - -// mockSet.As>() -// .Setup(m => m.Provider) -// .Returns(new TestAsyncQueryProvider(cartRules.Provider)); - -// mockSet.As>().Setup(m => m.Expression).Returns(cartRules.Expression); -// mockSet.As>().Setup(m => m.ElementType).Returns(cartRules.ElementType); -// mockSet.As>().Setup(m => m.GetEnumerator()).Returns(() => cartRules.GetEnumerator()); - -// return mockSet; -// } - -// private static Mock> BuildMockSetForProduct(IQueryable products) -// { -// var mockSet = new Mock>(); -// mockSet.As>() -// .Setup(m => m.GetAsyncEnumerator(CancellationToken.None)) -// .Returns(new TestAsyncEnumerator(products.GetEnumerator())); - -// mockSet.As>() -// .Setup(m => m.Provider) -// .Returns(new TestAsyncQueryProvider(products.Provider)); - -// mockSet.As>().Setup(m => m.Expression).Returns(products.Expression); -// mockSet.As>().Setup(m => m.ElementType).Returns(products.ElementType); -// mockSet.As>().Setup(m => m.GetEnumerator()).Returns(() => products.GetEnumerator()); - - -// return mockSet; -// } - -// #endregion -// } -//}