diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs index 8e84525d..08889dae 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductManager.cs @@ -106,10 +106,12 @@ namespace EasyAbp.EShop.Products.Products await CheckProductSkuNameUniqueAsync(product, productSku); - productSku.TrimCode(); + productSku.TrimName(); product.ProductSkus.AddIfNotContains(productSku); + await CheckProductDetailAsync(product); + return await _productRepository.UpdateAsync(product, true); } @@ -145,6 +147,8 @@ namespace EasyAbp.EShop.Products.Products { await CheckProductSkuNameUniqueAsync(product, productSku); + await CheckProductDetailAsync(product); + return await _productRepository.UpdateAsync(product, true); } diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs index f0a3ab3d..c8ab79a9 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs @@ -70,7 +70,7 @@ namespace EasyAbp.EShop.Products.Products this.SetDefaultsForExtraProperties(); } - internal void TrimCode() + internal void TrimName() { Name = Name?.Trim(); } diff --git a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/Products/ProductAppServiceTests.cs b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/Products/ProductAppServiceTests.cs index a8969afe..f7c53551 100644 --- a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/Products/ProductAppServiceTests.cs +++ b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.Application.Tests/Products/ProductAppServiceTests.cs @@ -4,9 +4,11 @@ using System.Linq; using Shouldly; using System.Threading.Tasks; using EasyAbp.EShop.Products.Options; +using EasyAbp.EShop.Products.ProductDetails; using EasyAbp.EShop.Products.Products.Dtos; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; +using Volo.Abp.Domain.Entities; using Xunit; namespace EasyAbp.EShop.Products.Products @@ -20,18 +22,19 @@ namespace EasyAbp.EShop.Products.Products { _productAppService = GetRequiredService(); _eShopProductsOptions = GetRequiredService>().Value; - } - - [Fact] - public async Task Should_Create_Product() - { + // Arrange _eShopProductsOptions.Groups.Configure("Default Group Name", x => { x.DisplayName = "Default Group Name"; x.Description = "Default Description"; }); + } + [Fact] + public async Task Should_Create_Product() + { + // Arrange var requestDto = new CreateUpdateProductDto { ProductGroupName = "Default Group Name", @@ -144,5 +147,66 @@ namespace EasyAbp.EShop.Products.Products getResult.MinimumPrice.ShouldBe(1m); getResult.MaximumPrice.ShouldBe(3m); } + + [Fact] + public async Task Should_Check_ProductDetailId() + { + var wrongProductDetailId = Guid.NewGuid(); + + var requestDto = new CreateUpdateProductDto + { + ProductGroupName = "Default Group Name", + StoreId = ProductsTestData.Store1Id, + UniqueName = "Unique Pencil", + DisplayName = "Pencil", + ProductDetailId = wrongProductDetailId, + InventoryStrategy = InventoryStrategy.NoNeed, + DisplayOrder = 0, + IsPublished = true, + ProductAttributes = new List + { + new CreateUpdateProductAttributeDto + { + DisplayName = "Default Attribute 1", + Description = "Default Description 1", + DisplayOrder = 1, + ProductAttributeOptions = new List + { + new CreateUpdateProductAttributeOptionDto + { + DisplayName = "Option 1" + } + } + } + } + }; + + // Act + (await Should.ThrowAsync(async () => + { + await _productAppService.CreateAsync(requestDto); + })).EntityType.ShouldBe(typeof(ProductDetail)); + } + + [Fact] + public async Task Should_Check_Sku_ProductDetailId() + { + await Should_Create_Product(); + + var wrongProductDetailId = Guid.NewGuid(); + + (await Should.ThrowAsync(async () => + { + await _productAppService.CreateSkuAsync(ProductsTestData.Product1Id, new CreateProductSkuDto + { + AttributeOptionIds = new List {ProductsTestData.Product1Attribute1Option4Id}, + ProductDetailId = wrongProductDetailId, + Currency = "CNY", + Price = 10m, + OrderMinQuantity = 1, + OrderMaxQuantity = 10 + }); + })).EntityType.ShouldBe(typeof(ProductDetail)); + } } } \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestData.cs b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestData.cs index cd379370..4a0ef23f 100644 --- a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestData.cs +++ b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestData.cs @@ -22,6 +22,8 @@ namespace EasyAbp.EShop.Products public static Guid Product1Attribute1Option3Id { get; } = Guid.NewGuid(); + public static Guid Product1Attribute1Option4Id { get; } = Guid.NewGuid(); + public static Guid Product1Sku1Id { get; } = Guid.NewGuid(); public static Guid Product1Sku2Id { get; } = Guid.NewGuid(); diff --git a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs index 0fa488c1..56dfb166 100644 --- a/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs +++ b/modules/EasyAbp.EShop.Products/test/EasyAbp.EShop.Products.TestBase/ProductsTestDataBuilder.cs @@ -53,7 +53,8 @@ namespace EasyAbp.EShop.Products { new ProductAttributeOption(ProductsTestData.Product1Attribute1Option1Id, "S", null), new ProductAttributeOption(ProductsTestData.Product1Attribute1Option2Id, "M", null), - new ProductAttributeOption(ProductsTestData.Product1Attribute1Option3Id, "L", null) + new ProductAttributeOption(ProductsTestData.Product1Attribute1Option3Id, "L", null), + new ProductAttributeOption(ProductsTestData.Product1Attribute1Option4Id, "XL", null) }); product.ProductAttributes.Add(attribute);