using YLErp.Configuration; using YLErp.DBModels; using YLErp.Modules.TradeModule.DocGenerateModule; namespace YLErp.UnitTestProject.Modules.TradeModule.DocGenerateModule { [TestClass] public class GuolianContractNoGeneratorTest { [TestMethod] public void IsGuolianSwapTrade_OnlyMatchesGuolianSwap() { var swapTrade = CreateSwapTrade(); Assert.IsTrue(GuolianContractNoGenerator.IsGuolianSwapTrade(swapTrade, CompanyEnum.国联)); Assert.IsFalse(GuolianContractNoGenerator.IsGuolianSwapTrade( new trade { TradeType = "香草期权" }, CompanyEnum.国联)); Assert.IsFalse(GuolianContractNoGenerator.IsGuolianSwapTrade(swapTrade, CompanyEnum.国泰君安)); } [TestMethod] public void ShouldGenerateTradeNumberAfterSave_OnlyGeneratesForBlankTradeNumber() { var blankTrade = CreateSwapTrade(); var manualTrade = CreateSwapTrade(); manualTrade.TradeNumber = "MANUAL-001"; Assert.IsTrue(GuolianContractNoGenerator.ShouldGenerateTradeNumberAfterSave( blankTrade, CompanyEnum.国联)); Assert.IsFalse(GuolianContractNoGenerator.ShouldGenerateTradeNumberAfterSave( manualTrade, CompanyEnum.国联)); Assert.IsFalse(GuolianContractNoGenerator.ShouldGenerateTradeNumberAfterSave( blankTrade, CompanyEnum.国泰君安)); } [TestMethod] public void BuildTradeNumber_ClientTrade_UsesNumericSequenceAndSanitizesUnderlyingCode() { var trade = CreateSwapTrade(); trade.OpponentRole = "甲方"; trade.TradeDate = new DateTime(2026, 7, 24); trade.UnderlyingCode = "250210.IB"; var number = GuolianContractNoGenerator.BuildTradeNumber(trade, "IS", 3); Assert.AreEqual("GLMS-IS-20260724-FICC-03-250210IB", number); } [DataTestMethod] [DataRow(1, "A")] [DataRow(26, "Z")] [DataRow(27, "AA")] public void BuildTradeNumber_NonClientTrade_UsesLetterSequence(int sequenceNo, string sequenceCode) { var trade = CreateSwapTrade(); trade.OpponentRole = "乙方"; trade.TradeDate = new DateTime(2026, 7, 24); trade.UnderlyingCode = "180205.IB"; var number = GuolianContractNoGenerator.BuildTradeNumber(trade, "glmscounter", sequenceNo); Assert.AreEqual($"GLMS-glmscounter-20260724-FICC-{sequenceCode}-180205IB", number); } private static trade CreateSwapTrade() { return new trade { TradeType = "收益互换" }; } } }