From 99958f9b43be3e187e60b3697f2541aa8d24e910 Mon Sep 17 00:00:00 2001 From: hjhan Date: Fri, 3 Jul 2026 18:03:38 +0800 Subject: [PATCH] =?UTF-8?q?test(swap):=20SwapDealSettlementTest=E8=A1=A5?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=B9=B3=E4=BB=93+=E5=90=AB=E9=A2=84?= =?UTF-8?q?=E4=BB=98=E9=87=91=E5=9C=BA=E6=99=AF(=E5=80=9F=E9=89=B4testable?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 借鉴 testable 分支 SwapUnwindScenarioTest.Scenario2,补当前分支缺失的2个场景: SD_007 部分平仓:CloseMethod=部分平仓 → HasPartialUnWind=1,TradeStatus不变, StockEqvNotional/TradeAmount按比例扣减(原100万-50万=50万) SD_008 含预付金平仓:SwapMarginAmount≠0 → 2条资金流水(平仓费+应付预付金) SwapDealSettlementTest 现8场景,SwapModule 173测试全绿(+2),无回归。 --- .../SwapModule/SwapDealSettlementTest.cs | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/UnitTestProject/Modules/SwapModule/SwapDealSettlementTest.cs b/UnitTestProject/Modules/SwapModule/SwapDealSettlementTest.cs index 85869479..a5c4b50a 100644 --- a/UnitTestProject/Modules/SwapModule/SwapDealSettlementTest.cs +++ b/UnitTestProject/Modules/SwapModule/SwapDealSettlementTest.cs @@ -223,6 +223,73 @@ namespace YLErp.Modules.SwapModule Console.WriteLine($"SD_003 通过:TradeStatus={td.TradeStatus},StockEqvNotional={td.StockEqvNotional} ✅"); } + // ================================================================ + // SD_007:SwapUnwind 部分平仓 —— HasPartialUnWind=1,TradeStatus 不变 + // ================================================================ + + /// + /// [SD_007] SwapUnwind 部分平仓(借鉴 testable SwapUnwindScenarioTest.Scenario2) + /// ------------------------------------------------------------ + /// 部分平仓(CloseMethod≠全部平仓 且 ClosePercent≠1)走 else 分支: + /// td.HasPartialUnWind = 1,TradeStatus 保持"确认成交"不变 + /// StockEqvNotional/TradeAmount 仍按 CloseNotionalValue/CloseQty 扣减 + /// + [TestMethod] + public void SD_007_SwapUnwind_部分平仓_设HasPartialUnWind且TradeStatus不变() + { + var td = CreateTrade(); + var service = new StubDealService(td); + // 部分平仓:ClosePercent=0.5, CloseQty=5000, CloseNotionalValue=500000 + var unwindData = CreateUnwindData( + swapRealizedPnL: 3000m, swapMarginAmount: 0m, + closeMethod: (int)CloseMethodEnum.部分平仓, closePercent: 0.5m, + closeQty: 5000m, closeNotionalValue: 500000m, positionQty: 10000m); + + service.SwapUnwind(unwindData); + + // 部分平仓:设 HasPartialUnWind=1,TradeStatus 不变 + Assert.AreEqual(1, td.HasPartialUnWind, "部分平仓应设 HasPartialUnWind=1"); + Assert.AreEqual("确认成交", td.TradeStatus, "部分平仓 TradeStatus 保持不变"); + // 持仓扣减:原 StockEqvNotional=1000000 - 500000 = 500000 + Assert.AreEqual(500000.0, td.StockEqvNotional, 0.001, "StockEqvNotional 扣减后=500000"); + Assert.AreEqual(5000.0, td.TradeAmount, 0.001, "TradeAmount 扣减后=5000"); + // 资金流水仍有(部分平仓也产生平仓费流水) + Assert.AreEqual(1, service.ClientCashCalls.Count, "部分平仓应1条资金流水"); + Assert.AreEqual(-3000.0, service.ClientCashCalls[0].amount, 0.001, "资金流水=-SwapRealizedPnL"); + Console.WriteLine($"SD_007 通过:HasPartialUnWind={td.HasPartialUnWind},TradeStatus={td.TradeStatus},StockEqvNotional={td.StockEqvNotional} ✅"); + } + + // ================================================================ + // SD_008:SwapUnwind 含预付金 —— 两条资金流水(平仓费+应付预付金) + // ================================================================ + + /// + /// [SD_008] SwapUnwind 含预付金返还(SwapMarginAmount≠0) + /// ------------------------------------------------------------ + /// SwapUnwind 内部:SwapMarginAmount≠0 时追加一条"应付预付金"资金流水。 + /// 验证:2条流水(平仓费 + 应付预付金),金额和操作类型正确。 + /// + [TestMethod] + public void SD_008_SwapUnwind_含预付金_两条资金流水() + { + var td = CreateTrade(); + var service = new StubDealService(td); + var unwindData = CreateUnwindData( + swapRealizedPnL: 5000m, swapMarginAmount: 2000m, + closeMethod: (int)CloseMethodEnum.全部平仓, closePercent: 1m, + closeQty: 10000m, closeNotionalValue: 1000000m, positionQty: 10000m); + + service.SwapUnwind(unwindData); + + // 2条资金流水:平仓费 + 应付预付金 + Assert.AreEqual(2, service.ClientCashCalls.Count, "含预付金时应2条资金流水"); + Assert.AreEqual(-5000.0, service.ClientCashCalls[0].amount, 0.001, "第1条=平仓费 -SwapRealizedPnL"); + Assert.AreEqual(ClientCashInCashOut.系统操作_平仓费, service.ClientCashCalls[0].action); + Assert.AreEqual(2000.0, service.ClientCashCalls[1].amount, 0.001, "第2条=应付预付金 SwapMarginAmount"); + Assert.AreEqual(ClientCashInCashOut.系统操作_应付预付金, service.ClientCashCalls[1].action); + Console.WriteLine($"SD_008 通过:2条流水,平仓费={service.ClientCashCalls[0].amount},应付预付金={service.ClientCashCalls[1].amount} ✅"); + } + // ================================================================ // SD_004:DealFloatPosition 含费价重算正确(后端唯二真做计算的地方) // ================================================================