| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using Admin.NET.Plugin.AiDOP.Dto.S0.Supply;
- using Admin.NET.Plugin.AiDOP.Entity.S0.Supply;
- using Admin.NET.Plugin.AiDOP.Infrastructure;
- using Xunit;
- namespace Admin.NET.Plugin.AiDOP.Tests.S0.Supply;
- /// <summary>
- /// S0 货源清单 srm_purchase.is_active 字符串列 ↔ bool? 口径统一转换与输出 DTO 映射单元测试。
- /// 覆盖:读取多编码兼容、写入“是/否”、未知非空值不静默判停用、查询用等值集合(非 Contains)、DTO 归一。
- /// </summary>
- public class AdoS0SrmPurchaseIsActiveTests
- {
- [Theory]
- [InlineData("是", true)]
- [InlineData("Y", true)]
- [InlineData("y", true)]
- [InlineData("1", true)]
- [InlineData("true", true)]
- [InlineData("True", true)]
- [InlineData(" 是 ", true)] // 前后空格:Trim 后命中
- [InlineData("否", false)]
- [InlineData("N", false)]
- [InlineData("n", false)]
- [InlineData("0", false)]
- [InlineData("false", false)]
- [InlineData("False", false)]
- public void Parse_KnownTokens_ReturnsExpected(string input, bool expected)
- {
- Assert.Equal(expected, AdoS0SrmPurchaseIsActive.Parse(input));
- }
- [Theory]
- [InlineData(null)]
- [InlineData("")]
- [InlineData(" ")]
- [InlineData("未知")]
- [InlineData("启用中")]
- public void Parse_NullEmptyOrUnknown_ReturnsNull(string? input)
- {
- // 未知非空值必须返回 null,不得静默判成停用(false),以免把脏数据当停用处理。
- Assert.Null(AdoS0SrmPurchaseIsActive.Parse(input));
- }
- [Theory]
- [InlineData(true, "是")]
- [InlineData(false, "否")]
- public void Encode_Bool_ReturnsPersistedString(bool input, string expected)
- {
- Assert.Equal(expected, AdoS0SrmPurchaseIsActive.Encode(input));
- }
- [Fact]
- public void Encode_Null_ReturnsNull()
- {
- Assert.Null(AdoS0SrmPurchaseIsActive.Encode(null));
- }
- [Fact]
- public void RoundTrip_EncodeThenParse_Preserves()
- {
- Assert.True(AdoS0SrmPurchaseIsActive.Parse(AdoS0SrmPurchaseIsActive.EnabledValue));
- Assert.False(AdoS0SrmPurchaseIsActive.Parse(AdoS0SrmPurchaseIsActive.DisabledValue));
- }
- [Fact]
- public void EnabledSql_UsesEqualitySetNotContains()
- {
- var sql = AdoS0SrmPurchaseIsActive.EnabledSql("sp.is_active");
- Assert.Contains("IN ('是','y','1','true')", sql);
- Assert.Contains("TRIM(LOWER(sp.is_active))", sql);
- Assert.DoesNotContain("LIKE", sql);
- Assert.DoesNotContain("Contains", sql);
- }
- [Fact]
- public void DisabledSql_UsesDisabledSet()
- {
- var sql = AdoS0SrmPurchaseIsActive.DisabledSql("sp.is_active");
- Assert.Contains("IN ('否','n','0','false')", sql);
- Assert.Contains("TRIM(LOWER(sp.is_active))", sql);
- }
- [Theory]
- [InlineData("是", true)]
- [InlineData("否", false)]
- [InlineData(null, null)]
- [InlineData("未知", null)]
- public void FromEntity_MapsIsActiveToBool(string? dbValue, bool? expected)
- {
- var entity = new AdoS0SrmPurchase { Id = 1, IcitemId = 2, SupplierId = 3, IsActive = dbValue };
- var dto = AdoS0SrmPurchaseDto.FromEntity(entity);
- Assert.Equal(expected, dto.IsActive);
- }
- [Fact]
- public void FromEntity_PassesCurrencyAndSupplierTypeThrough()
- {
- var entity = new AdoS0SrmPurchase
- {
- Id = 10,
- IcitemId = 20,
- SupplierId = 30,
- IsActive = "是",
- CurrencyType = 1,
- SupplierType = "标准",
- };
- var dto = AdoS0SrmPurchaseDto.FromEntity(entity);
- Assert.Equal(1, dto.CurrencyType); // long? 数值原样透传(1=CNY)
- Assert.Equal("标准", dto.SupplierType); // 供应类别中文原文透传
- Assert.True(dto.IsActive);
- }
- }
|