Files
zszq-trs/UnitTestProject/Modules/TradeModule/DocGenerateModule/GuolianContractNoGeneratorTest.cs
T
tengyufan 20e4b82ae3 fix: 修复国联收益互换交易编号首次生成大小写不一致
- 首次入库后按 UpperTradeNumber 配置统一交易编号大小写
- 避免自动生成小写编号在后续编辑保存时被转为大写
- 补充交易编号大小写配置的单元测试
2026-07-30 17:46:18 +08:00

84 lines
3.2 KiB
C#

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.国泰君安));
}
[DataTestMethod]
[DataRow("GLMS-st0728-20260729-FICC-Q-210210IB", true, "GLMS-ST0728-20260729-FICC-Q-210210IB")]
[DataRow("GLMS-st0728-20260729-FICC-Q-210210IB", false, "GLMS-st0728-20260729-FICC-Q-210210IB")]
public void NormalizeTradeNumberCase_AppliesUpperTradeNumberConfiguration(
string tradeNumber,
bool upperTradeNumber,
string expected)
{
var actual = GuolianContractNoGenerator.NormalizeTradeNumberCase(tradeNumber, upperTradeNumber);
Assert.AreEqual(expected, actual);
}
[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 = "收益互换" };
}
}
}