using Admin.NET.Plugin.AiDOP.DataPlatform.Inbound; using Admin.NET.Plugin.AiDOP.Entity.DataPlatform; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform; public class InboundRequiredFieldTests { private readonly MdpInboundFieldMapper _mapper = new(null!); [Fact] public void IdentityContract_RejectsMissingRequiredField() { var row = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["ItemNum"] = "ITEM-001" }; var missing = _mapper.MissingRequired(row, [], "MDM_ITEM", "v1"); Assert.Equal(["Descr"], missing); } [Fact] public void InventoryV1_DoesNotRequireV2BusinessType() { var row = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["Id"] = "TXN-001" }; var missing = _mapper.MissingRequired(row, [], "S5_INVENTORY_TXN", "v1"); Assert.Empty(missing); } [Fact] public void InventoryV2_RequiresBusinessType() { var row = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["Id"] = "TXN-001" }; var missing = _mapper.MissingRequired(row, [], "S5_INVENTORY_TXN", "v2"); Assert.Equal(["BizDocType"], missing); } [Fact] public void ConfiguredMap_RemainsTheAuthoritativeContract() { var row = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["external_item"] = "ITEM-001" }; var maps = new List { new() { ContractField = "ItemNum", RawKey = "external_item", IsRequired = 1 } }; var missing = _mapper.MissingRequired(row, maps, "MDM_ITEM", "v1"); Assert.Empty(missing); } }