using Admin.NET.Plugin.AiDOP.Dto.S0.Manufacturing; using Admin.NET.Plugin.AiDOP.Infrastructure; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.S0.Manufacturing; public class AdoS0ProductStructureRulesTests { private static AdoS0ProductStructureUpsertDto BaseDto() => new() { CompanyRefId = 1, FactoryRefId = 1, ParentMaterialId = 10, ComponentMaterialId = 20, Qty = 1m, OpNos = new List() }; [Fact] public void ValidateUpsert_SameParentComponent_ReturnsError() { var dto = BaseDto(); dto.ComponentMaterialId = dto.ParentMaterialId; Assert.Equal("父项与子项物料不能相同", AdoS0ProductStructureRules.ValidateUpsert(dto)); } [Fact] public void ValidateUpsert_Valid_ReturnsNull() { Assert.Null(AdoS0ProductStructureRules.ValidateUpsert(BaseDto())); } [Fact] public void ValidateUpsert_NegativeQty_ReturnsError() { var dto = BaseDto(); dto.Qty = -1m; Assert.Equal("标准用量不能为负", AdoS0ProductStructureRules.ValidateUpsert(dto)); } [Fact] public void ValidateUpsert_NegativeScrap_ReturnsError() { var dto = BaseDto(); dto.Scrap = -0.01m; Assert.Equal("损耗率不能为负", AdoS0ProductStructureRules.ValidateUpsert(dto)); } [Fact] public void ValidateUpsert_NegativeQtyConsumed_ReturnsError() { var dto = BaseDto(); dto.QtyConsumed = -0.5m; Assert.Equal("固定损耗量不能为负", AdoS0ProductStructureRules.ValidateUpsert(dto)); } }