按业务拆分原 SwapDealSettlementTest(8场景)为3个文件,提升可读性: - TestableSwapDealService.cs: 共享stub(7个seam override)+工厂方法(CreateTrade/CreateUnwindData) - SwapUnwindScenarioTest.cs: 平仓全流程6场景(UW_001~006: 全平/部分平/含预付金/含费价重算/审核/提交) - SwapIncomeScenarioTest.cs: 结息2场景(SI_001~002: 正常结息/含预付金返息) 命名对齐 testable 分支风格(SwapUnwindScenarioTest),场景前缀改 UW_/SI_ 更直观。 删除 SwapDealSettlementTest.cs(内容已拆分迁移)。 SwapModule 173测试全绿,无回归。
68 lines
3.7 KiB
C#
68 lines
3.7 KiB
C#
using YLErp.DBModels;
|
||
using YLErp.DBModels.Enums;
|
||
|
||
namespace YLErp.Modules.SwapModule
|
||
{
|
||
/// <summary>
|
||
/// 互换结息(SwapIncome)测试
|
||
/// ============================================================================
|
||
/// 借鉴 testable 分支命名,基于当前分支 TestableSwapDealService 共享 stub。
|
||
/// SwapIncome 是写客户资金流水(ClientCashInCashOut)的核心入口之一。
|
||
/// ============================================================================
|
||
[TestClass]
|
||
public class SwapIncomeScenarioTest
|
||
{
|
||
// ================================================================
|
||
// 场景1:SwapIncome 正常结息 —— 资金流水金额正确
|
||
// ================================================================
|
||
|
||
/// <summary>
|
||
/// SwapIncome 正常结息:SwapRealizedPnL=1000 → 客户资金流水金额=-1000。
|
||
/// 后端 SwapDealService SwapIncome 直接用前端传入的 SwapRealizedPnL 记账。
|
||
/// </summary>
|
||
[TestMethod]
|
||
public void SI_001_SwapIncome_正常结息_资金流水金额正确()
|
||
{
|
||
var td = SwapDealTestFactory.CreateTrade();
|
||
td.ExerciseDate = new DateTime(2026, 12, 31); // 未到期,不走"已到期"分支
|
||
var service = new TestableSwapDealService(td);
|
||
var unwindData = SwapDealTestFactory.CreateUnwindData(swapRealizedPnL: 1000m);
|
||
|
||
service.SwapIncome(unwindData);
|
||
|
||
Assert.AreEqual(1, service.ClientCashCalls.Count, "应生成1条资金流水(互换)");
|
||
Assert.AreEqual(-1000.0, service.ClientCashCalls[0].amount, 0.001, "资金流水金额 = -SwapRealizedPnL");
|
||
Assert.AreEqual(ClientCashInCashOut.系统操作_互换, service.ClientCashCalls[0].action, "操作类型=系统操作_互换");
|
||
Assert.AreEqual(1, service.SaveSwapDealCalls.Count, "应调用 SaveSwapDeal 1次");
|
||
Assert.AreEqual((int)SwapEventTypeEnum.互换, service.SaveSwapDealCalls[0].eventType, "事件类型=互换(3)");
|
||
Console.WriteLine($"SI_001: 资金流水={service.ClientCashCalls[0].amount}, 事件类型=互换 ✅");
|
||
}
|
||
|
||
// ================================================================
|
||
// 场景2:SwapIncome 含预付金返息 —— 两条资金流水
|
||
// ================================================================
|
||
|
||
/// <summary>
|
||
/// SwapIncome 含预付金返息:SwapRealizedPnL=1000, SwapMarginRebatePnl=200
|
||
/// → 生成2条资金流水(互换 + 预付金返息),金额分别为 -1000、-200。
|
||
/// </summary>
|
||
[TestMethod]
|
||
public void SI_002_SwapIncome_含预付金返息_两条资金流水()
|
||
{
|
||
var td = SwapDealTestFactory.CreateTrade();
|
||
td.ExerciseDate = new DateTime(2026, 12, 31);
|
||
var service = new TestableSwapDealService(td);
|
||
var unwindData = SwapDealTestFactory.CreateUnwindData(swapRealizedPnL: 1000m, swapMarginRebatePnl: 200m);
|
||
|
||
service.SwapIncome(unwindData);
|
||
|
||
Assert.AreEqual(2, service.ClientCashCalls.Count, "应生成2条资金流水(互换+预付金返息)");
|
||
Assert.AreEqual(-1000.0, service.ClientCashCalls[0].amount, 0.001, "第1条=互换金额");
|
||
Assert.AreEqual(ClientCashInCashOut.系统操作_互换, service.ClientCashCalls[0].action);
|
||
Assert.AreEqual(-200.0, service.ClientCashCalls[1].amount, 0.001, "第2条=预付金返息");
|
||
Assert.AreEqual(ClientCashInCashOut.系统操作_预付金返息, service.ClientCashCalls[1].action);
|
||
Console.WriteLine($"SI_002: 互换={service.ClientCashCalls[0].amount}, 预付金返息={service.ClientCashCalls[1].amount} ✅");
|
||
}
|
||
}
|
||
}
|